开始学习操作系统了,把寒假学习的linux整理巩固一下

  • 要等录Linux系统一定要有帐号密码
  • 不同用户应该有不同权限
  • 通过user和group的特殊权限设置,规范用户组开发项目。
  • 系统管理员帐号 root
  • 如何修改用户相关的信息

Linux的帐号与账户组

管理员的工作中,相当重要的一环就是管理帐号。在管理Linux主机的帐号时,我们必须先来了解一下linux到底是如何辨别每一个用户的

用户标识符:UID与GID

你的ID与帐号的对应就在/etc/passwd当中

  • 每个文件都拥有人和组属性 /etc/group /etc/passwd
  • 每个登录的用户至少会获得两个ID,一个是用户ID(UID),一个是用户组ID(Group ID)
    查看某一个用户UID与GID
[root@study lidengyin]# id lidengyin
uid=1000(lidengyin) gid=1000(lidengyin) groups=1000(lidengyin),10(wheel)

用户帐号

linux用户如果需要登录主机以获取shell的环境来工作时,他需要如何进行?
首先他必须在计算机前面利用tty1-tty6的终端提供的终端提供的登录接口,并且输入帐号和密码之后才能够登录。如果是通过网络的话那么用户至少就要需息ssh这个功能。那么你输入了用户名和密码,系统帮你做了什么呢?

  1. 在/etc/passwd中查找是否有你们的帐号,如果没有则退出,如果有则读出该帐号对应的UID与GID(在/etc/group)中读出来,另外,该帐号的家目录与shell设置也一并读出。
  2. 再来核对密码表。这时linux会进入/etc/shadow里面找出对应的帐号与UID,然后核对一下你刚刚输入的密码与里面的密码是否项符合
  3. 如果一切ok就进入shell管理阶段
  • /etc/passwd的详细解析
[root@study lidengyin]# head -n 4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

可以看出每一行用:隔开
1.账户名称。提供给对数自不敏感的人使用来的登录系统的,需要用来对应UID,如root的UID对应是0
2.密码,已经转移到/etc/shadow中
3.UID, 可用登录帐号UID是1000~60000
4.GID,这个与/etc/group有关,其实/etc/group与/etc/passwd差不多,只是用来规范祖名和GID的对应而已
5.用户信息说明栏
解释帐号的意义
6.家目录
这是用户的家目录
以上面为例,root的家目录在/root,所以root登录后,就会立刻跑到/root目录中。呵呵!如果你有个帐号使用空间特别大,你想要将帐号的家目录移动到去其他硬盘去,没错,可以在这个字段修改。默认用户家目录在/home/yourlDname
7.shell
我们在BASH中提到过很多次,用户登录之后就会获取一个shell来与系统的内核沟通以进行用户的操作任务。那么默认shell为何会选择bash?就是在这个字段指定的。

  • /etc/shadow文件结构
root:$6$NE7zSyDvPjjVaYV2$zFS9gkx2oPjr9KAHOXrCKnT4cYr.h822N0svE3PBoAiGAUkg.qz8fFvJyFZBsEHPnj82Mn1bgFmoxU7L6NMlk/::0:99999:7:::
bin:*:18078:0:99999:7:::
daemon:*:18078:0:99999:7:::
adm:*:18078:0:99999:7:::

基本上shadow同样以:作为分隔符,如果数一下就会发现共有9个字段,这9个字段的用途如下
1.帐号名称
必须与/etc/passwd相同
2.密码,这个密码才是真正的密码,为了避免密码被破解这个文件的默认权限是[–rw-------]或者[-----------],即只有root可以读写。
3.最近最近修改密码时间
1970年1.1距今的天数

[root@study lidengyin]# echo $(($(date +%s)/86400))
18330
[root@study lidengyin]# echo $(($(date +%s)/86400+1))
18331
[root@study lidengyin]#

86400为一天的秒数
4.密码不可被修改的天数
5.密码重新修改的天数
6.密码修改期限前的警告参数
7.密码过期之后的帐号宽限时间
8.帐号失效时间
9.保留

关于用户组:有效与初始用户组,groups,newgr

认识了与帐号有关的两个文件/etc/passwwd之后,你也许会觉得奇怪,那么用户组的文件在那呢?还有/etc/passwd的第四栏不是所谓的GID码,哪有是啥,呵呵,这就需要了解/etc/group 与/etc/gshadow
-/etc/group 的文件结构

[root@study lidengyin]# head -n 4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

这个文件每一行代表一个用户组,也就是以冒号作为分隔符,工分为四栏,每一个字段的意义如下
1.组名,同样用来给人使用,基本上需要与第三个字段GID对应使用
2.用户组密码,通常不需要设置,这个设置通常是给用户管理员使用的,目前很少有这个机会设置用户组管理员,同样,密码已经移动到/etc/gshadow中
3.GID
就是用户组ID.我们/etc/passwd的第四个字段就是使用GID对应的用户组名,就是有这里对应出来的
4.此用户组支持的帐号名称
我们知道,一个帐号可以a加入多个用户组,如果某个帐号想要加入此用户组,将帐号填入这个字段即可。
距离来说我想讲lidengyin也加入root用户组,那么在第一行的最后面加上[lidengyin]即可,注意不要有空格,使其成为[root❌0:lidengyin]就可以
至于/etc/group的特色就在于第四栏,因为每个用户都可以拥有所个支持的用户组,这里可能有疑问:假如我加入多个用户组,那么我在作业的时候,到底是以那个用户组为准呢?下面我们来谈谈有效用户组的概念
注意:新版linux的/etc/group的第四个字段为空
-有效用户组(effective group)与初始用户组(initial group)
每个用户在他的/etc/passwd里面的第四栏有所谓的GID,那个GID就是所谓的初始用户组(initial group)。也就是说,当用户一登录系统,就会拥有这个用户组的相关权限。举例来说,我们上面提到lidengyin这个用户的 /etc/passwd与/etc/group还有/ etc/gshadow相关的内容如下:

[root@study lidengyin]# usermod -a -G users lidengyin
[root@study lidengyin]# grep lidengyin /etc/passwd /etc/gro
groff/ group group-
[root@study lidengyin]# grep lidengyin /etc/passwd /etc/group /etc/gshadow
/etc/passwd:lidengyin:x:1000:1000:lidengyin:/home/lidengyin:/bin/bash
/etc/group:wheel:x:10:lidengyin//次要用户组设置,安装时指定
/etc/group:users:x:100:lidengyin//次要用户组设置
/etc/group:lidengyin:x:1000://因为是初始用户组,所以第四栏位不需要输入帐号
/etc/gshadow:wheel:::lidengyin//次要用户组设置
/etc/gshadow:users:::lidengyin//次要用户组设置
/etc/gshadow:lidengyin:!::

初始用户组 /etc/group不需要在第四个字段写入用户名
但是非初始用户组的其他用户组就不可以了。举个例子来说,我们将lidengyin加入users这个用户组中,由于users这个用户组并非是lidengyin的初始用户组,因此,我必须要在/etc/group这个文件中找到users这一行,并且将lidengyin这个帐号加入第四栏,这样lidengyin才能加入users这个用户组。
那么这个例子中,因为我的lidengyin帐号同时支持lidengyin,wheel,users这都三个用户组,因此,再读取,写入,执行文件时,针对用户的部分,只要是users,wheel和lidengyin这三个用户组拥有的功能,lidengyin用户都额能拥有,者了解了码?
不过这是针对已经存在的文件而言,如果今天我建立一个新文件或者新目录,请问一下,新目录的用户组,是lidengyin,wheeel还是users?呵呵,这就要检查一下当时的有效用户组了(effective group)

  • groups:有效与支持用户组的观察

如果我登录之后如何知道我所支持的用户组呢?很简单,直接输入groups就可以了。注意,groups有加s,结果向这样:

[lidengyin@study ~]$ groups
lidengyin wheel
有问题,没有显示users

在输出信息中,可以知道lidengyin同时属于lidengyin,wheel这两个用户组,而且第一个输出的用户组即为有效用户组(effective group)。yehjisuhishuo我的有效用户组时lidengyin,如果我以touch去新建一个文件,例如touch test, 那么这个文件的拥有者就是lidengyin,而用户组也是lidengyin

lidengyin@study ~]$ ls -l| test
[lidengyin@study ~]$ ls -l| grep test
-rw-rw-r--. 1 lidengyin lidengyin 0 Mar 9 12:27

这样是否可以了解有效用户组了呢?通常有效用户组的作用时新建文件,那么有效用户组是否能够变换?

  • newgrp: 有效用户组的切换
    -如何切换用户组呢?
    就是用newgrp.不过使用newgrp是有限制的,那就是你想要切换的用户组必须是你已经支持的用户组。举例来说,lidengyin可以在lidengyin,wheel,users这三个用户组之间切换为有效用户组,但是lidengyin无法切换有效用户组为sshd,使用方法如下:
[lidengyin@study ~]$ newgrp users
[lidengyin@study ~]$ groups
users wheel lidengyin
[lidengyin@study ~]$ touch test2
[lidengyin@study ~]$ ll test*
-rw-rw-r--. 1 lidengyin lidengyin 0 Mar 9 12:27 test
-rw-r--r--. 1 lidengyin users 0 Mar 9 13:40 test2
[lidengyin@study ~]$ exit
exit//注意退出newgrp环境
[lidengyin@study ~]$ touch test3
[lidengyin@study ~]$ ll test*
-rw-rw-r--. 1 lidengyin lidengyin 0 Mar 9 12:27 test
-rw-r--r--. 1 lidengyin users 0 Mar 9 13:40 test2
-rw-rw-r--. 1 lidengyin lidengyin 0 Mar 9 13:42

此时lidengyin的有效用户组就成为users了,我们额外讨论newgrp这个命令,这个命令可以修改当前用户的有效用户组,而且是以另一个shell来执行这个功能,所以,以上例子来来说,lidengyin这个用户就是以另一个shell登录的,而且新shell基于lidengyin有效GID为users,如果以图例来看就如图:

linux帐号管理与ACL权限设置_用户组


虽然用户的环境配置不会有影响,但是用户的用户组权限将会被重新计算,

需要注意,由于是新货去一个shell,因此如果你想回到原来的环境,请输入exit

  • 加入用户组有两个方式
  1. 系统管理员(root)通过usermod帮你加入
  2. 通过用户组管理员以gpasswd的方式帮你加入到他所管理的用户组中
  • /etc/gshadow
    刚刚讲了有效用户组的概念,液体到了newgrp这个命令的用法,但是如果/etc/gshadow没有搞懂的话,newgrp是无法操作的。/etc/gshadow的内容如下
[lidengyin@study ~]$ head -n 4 /etc/gshadow
head: cannot open '/etc/gshadow' for reading: Permission denied
[lidengyin@study ~]$ su root
Password:
[root@study lidengyin]# head -n 4 /etc/gshadow
root:::
bin:::
daemon:::
sys:::

还是冒号分隔,氛围四个字端

  • 四个字段的意义
  1. 祖名
  2. 密码栏,同样!表示无合法密码,所以无用户管理员
  3. 用户组管理员的帐号(相关信息在gpasswd)中
  4. 有加入该用户组支持的所属帐号(与/etc/group相同)

帐号管理

好,!!既然要管理好账户,当然从新增和删除用户开始,下面我们分别来谈一谈如何新增,删除与修改用户的相关信息把

新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel

要如何在linux系统新增一个用户呢?呵呵!真是太简单了,我们登录系统时会输入(1)帐号和(2)密码
所以建立一个可用的帐号同样需要这两个数据。帐号可以使用useradd来新建,密码则是用passwd这个命令来新建。这两个命令执行方法如下

[root@study lidengyin]# useradd vbird1
[root@study lidengyin]# ll -d /home/vbird1/
drwx------. 3 vbird1 vbird1 78 Mar 9 14:18 /home/vbird1/
[root@study lidengyin]# grep vbird1 /etc/passwd /ect/group/ /etc/shadow
/etc/passwd:vbird1:x:1001:1001::/home/vbird1:/bin/bash
grep: /ect/group/: No such file or directory
/etc/shadow:vbird1:!!:18330:0:99999:7:::
[root@study lidengyin]# grep vbird1 /etc/passwd /etc/group/ /etc/shadow
/etc/passwd:vbird1:x:1001:1001::/home/vbird1:/bin/bash
grep: /etc/group/: Not a directory
/etc/shadow:vbird1:!!:18330:0:99999:7:::
[root@study lidengyin]# grep vbird1 /etc/passwd /etc/group /etc/shadow
/etc/passwd:vbird1:x:1001:1001::/home/vbird1:/bin/bash
/etc/group:vbird1:x:1001:
/etc/shadow:vbird1:!!:18330:0:99999:7:::
//系统默认会默认建立一个与帐号一模一样的用户组名

其实用户已经帮我们设置好了非常多的默认值,所以我们可以简单使用useradd帐号来建立用户。在centos这些默认值会帮我们处理一下几个选项:

  • 在/etc/passwd里面建立一行与帐号有关的数据,包括建立 UID/GID/家目录等
  • 在/etc/shadow里面将此帐号的密码相关参数写入,但是尚未有密码
  • 在/etc/group里面加入一个与帐号一模一样的祖名
  • 在/home下面建立一个与帐号同名的目录作为,且权限为700
    由于在shadow中仅仅会有密码参数而不会有加密过得密码数据,因此我们在建立用户帐号时,还需要使用password帐号来设置密码才算完成了用户建立的流程。如果由于特殊需求而改变用户参数,就得用上述表格的选项进行建立了,参考下面案例:
    此外我们也可以指定特殊的UID作为用户的专属ID。了解了易班帐号之后,我们来看看什么时系统帐号(system account)
[root@study lidengyin]# useradd -r vbird3
[root@study lidengyin]# ll -d /home/vbird3
ls: cannot access '/home/vbird3': No such file or directory
[root@study lidengyin]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:978:976::/home/vbird3:/bin/bash
/etc/shadow:vbird3:!!:18330::::::
/etc/group:vbird3:x:976:
[root@study lidengyin]#

系统帐号默认不会建立家目录
总计:会修改的目录

  • 用户帐号与密码参数方面的文件:/etc/passwd, /etc/shadow
  • 用户用户组方面文件:/etc/group /etc/gshadow
  • 用户的家目录: /home/账户名称

用户删除

如果用userdel去删除一个帐号,且该帐号所属的初始用户组已经没有人隶属于该用户组,那就删掉这个用户组

  • passwd
    刚刚我们讲到,使用useradd建立帐号之后,默认情况下帐号暂时是锁定的。也就是说帐号暂时无法完成登录。你可以去看看/etc/shadow内的第二个字段。那该如何是好?怕什么直接给他设置新密码就是了。
    对吧,设置密码就是passwd
[root@study lidengyin]# passwd vbird1
Changing password for user vbird1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@study lidengyin]#

root果然是最伟大的人物,当我们设置用户密码时,可以用root来设置即可。
如果用户自己要该密码呢?
?包括root也是这样修改的

[lidengyin@study ~]$ su vbird1
Password:
[vbird1@study lidengyin]$ passwd
Changing password for user vbird1.
Current password:
New password:
BAD PASSWORD: The password is the same as the old one
passwd:
  • 注意!
    要帮一般用户建立密码需要使用passwd 帐号的格式,使用passwd表示修改自己的密码。拜托千万不要改错
  • usermod
    在使用useradd后,发现某些地方还可以进行详细的修改。此时我们可以直接在/etc/passwd或/etc/shadow去修改相应字段的数据,不过linux也提供了相应的命令来让大家进行相关命令的微调,那就是usermod

linux帐号管理与ACL权限设置_用户组_02


让我们谈谈修改参数的实例:

> ^C
[root@study lidengyin]# usermod -c "lidengyin's test" vbird1
[root@study lidengyin]# grep vbird1 /etc/passwd
vbird1:x:1001:1001:lidengyin's test:/home/vbird1:/bin/bash
[root@study lidengyin]# usermod -e "2020-12-31" vbird1
[root@study lidengyin]#
  • userdel
    这个功能就太简单了,目的在于删除用户的相关数据。而用户的数据有:
  • 用户帐号/密码相关参数 : /etc/passwd /etc/shadow
  • 用户组相关参数: /etc/group, /etc/gshadow
  • 用户个人文件数据: /home/username, /var/spool/mail/username
    整个命令的语法非常简单
  • linux帐号管理与ACL权限设置_用户组_03

  • 使用userdel的时机是,你真的确定不让该用户在主机上面使用任何数据了
    另外,用户使用一段时间后会不止上面提到的文件所以最好先用
find / -user username

查出整个系统内属于username的文件,然后再加以删除。

用户功能

  • id
    id 可以查询某人和自己的相关UID/GID登信息,他的参数也不少,不过,都不需要记住
    反正使用ID时就全部列出来了
    基本使用方式
id [username]

实例

[root@study lidengyin]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@study lidengyin]# id lidengyin
uid=1000(lidengyin) gid=1000(lidengyin) groups=1000(lidengyin),10(wheel),100(users)
[root@study lidengyin]#

新增和删除用户组

OK!了解帐号的新增,删除,修改与查询之后,下面聊一聊用户组的相关内容

groupadd

linux帐号管理与ACL权限设置_字段_04


实例

[root@study lidengyin]# groupadd group1
[root@study lidengyin]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:1002:
/etc/gshadow:group1:!::
  • groupmod
    跟usermod类似,仅仅在group相关参数的修改

linux帐号管理与ACL权限设置_字段_05


实例

[root@study lidengyin]# groupmod -n group2 group1
[root@study lidengyin]#
  • groupdel
    呼呼! groupdel自然是用在删除用户组,用法很简单
  • linux帐号管理与ACL权限设置_字段_06

  • 实例
[root@study lidengyin]# groupmod -n group2 group1
[root@study lidengyin]# groupdel group2
[root@study lidengyin]# groupdel vbird1
groupdel: cannot remove the primary group of user 'vbird1'
[root@study lidengyin]#

为什么vbird1不能删除?原因很简单,某个帐号(/etc/passwd)的初始化用户组使用该用户组。当然无法删除,否则vbird1这个用户登陆系统就会,就会找不到GID,如果要删除,你必须确认 /etc/passwd内的帐号内没有任何人使用该用户作为初始用户组才可以
所以你要:

  1. 修改vbird1的GID
  2. 删除vbird1这个用户

用户身份切换

如何让一般身份成为root呢?

  • 通过su - 直接将身份变成root,但是这个命令需要root的密码,也就是说,如果你通过su变成root的话,你的一般用户就必须要root密码才行
  • 通过sudo命令执行root的命令串,优于sudo需要事先设置妥当,且sudo需要输入用户自己的密码,因此多人共管一台主机的话,sudo 要比su来的好,至少root密码不会流出去

su

su是一个简单的用户切换命令。它可以进行任何身份的转换!!

方法如下:

linux帐号管理与ACL权限设置_ide_07


单纯使用su可以切换为root的身份,读取变量设置为非登录shell的方式

[root@study lidengyin]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@study lidengyin]# env | grep lidengyin
USERNAME=lidengyin
USER=lidengyin
PWD=/home/lidengyin
XDG_DATA_DIRS=/home/lidengyin/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
MAIL=/var/spool/mail/lidengyin
LOGNAME=lidengyin
PATH=/home/lidengyin/.local/bin:/home/lidengyin/bin:/home/lidengyin/.local/bin:/home/lidengyin/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

单纯使用[su]不规范,一些功能也无法使用,所以切换身份切记使用一下方式

[lidengyin@study ~]$ su -
Password:
[root@study ~]# env | grep root
USER=root
PWD=/root
HOME=/root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
MAIL=/var/spool/mail/root
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@study ~]#
  • 一次执行,执行完毕恢复原来的身份
  • linux帐号管理与ACL权限设置_字段_08

  • 实例:
[lidengyin@study ~]$ su - -c 'head -n 4 /etc/shadow' 
Password:
root:$6$NE7zSyDvPjjVaYV2$zFS9gkx2oPjr9KAHOXrCKnT4cYr.h822N0svE3PBoAiGAUkg.qz8fFvJyFZBsEHPnj82Mn1bgFmoxU7L6NMlk/::0:99999:7:::
bin:*:18078:0:99999:7:::
daemon:*:18078:0:99999:7:::
adm:*:18078:0:99999:7:::
[lidengyin@study ~]$

好,那接下来,如果我是root或者其他人,想要切换成某些特殊的符号,可以使用方式来切换

[lidengyin@study ~]$ sudo useradd ldy
[sudo] password for lidengyin:
[lidengyin@study ~]$ passwd ldy
passwd: Only root can specify a user name.
[lidengyin@study ~]$ sudo passwd ldy
Changing password for user ldy.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[lidengyin@study ~]$ su -l ldy
Password:
[ldy@study ~]$ su -
Password:
[root@study ~]# id sshd
uid=74(sshd) gid=74(sshd) groups=74(sshd)
[root@study ~]# id sshd
uid=74(sshd) gid=74(sshd) groups=74(sshd)
[root@study ~]# su -l sshd
This account is currently not available.
[root@study ~]# finger sshd
bash: finger: command not found...
Failed to search for file: Cannot update read-only repo
[root@study ~]# exit
logout
[ldy@study ~]$ exit
logout
[lidengyin@study ~]$

sudo介绍完毕,总结一下他的用法

  • 若要完整的切换到新用户的环境,必须使用
su -

或者

su -l username

才会同PATH,USER,MAIL等变量都转换成新用户的环境

  • 如果仅想执行一次root命令,可以利用
su - -c "命令串"

的方式来处理

  • 使用root切换成任意账户时,并不需要输入新用户的密码
    但是这样在多人操作时很容易造成root密码的流出,所以还是要通过sudo来处理、

sudo

相比于su需要了解新切换的用户密码,通常是root的密码,sudo的执行则只需要自己的密码即可。甚至可以不设需要密码即可执行sudo,。由于sudo可以让你以其他用户的身份执行命令,通常是root,因此并不是所有人都能够执行sudo,而是仅有规范到/etc/shdoers内的用户能够执行sudo这个命令。

  • sudo的命令用法
    由于一开始系统默认仅有root可以执行sudo,因此下面的范例我们先以root的身份来执行,登谈到visudo时,再以其他一般用户来讨论其他sudo的用法。sudo的语法如下
  • linux帐号管理与ACL权限设置_字段_09

  • 实例:
[lidengyin@study ~]$ su -
Password:
[root@study ~]# sudo -u sshd touch /tmp/mysshd
[root@study ~]# ll /tmp/mysshd
-rw-r--r--. 1 sshd sshd 0 Mar 9 17:32 /tmp/mysshd
[root@study ~]#

sudo可以让你切换身份来执行某项任务,例如上面的两个范例,范例中我们使用sshd的权限去执行某项任务。要注意我们无法使用

su -sshd

去切换系统帐号,这个时候sudo真的是好用。
但是sudo默认仅有root能执行,为什呢么?
因为sudo的执行时这样的流程:

  1. 当用户执行sudo时,系统于/etc/sudoers文件中查找该用户是否有执行sudo的权限
  2. 当用户具有可执行sudo的权限之后,便让用户输入用户自己的密码来确认
  3. 若密码输入成功,便开始进行sudo 后续接的命令
  4. 若要切换的用户身份与使用者相同也不需要输入密码
    所以sudo的执行重点是
    能否使用sudo必须要看 /etc/sudoers的设置值,而可使用sudo者是通过输入自己的密码来执行后续的密码串
    那么要使用visudo去修改这个文件
  • visudo 与/etc/sudoers
    除了root之外的其他帐号,若想要使用sudo执行属于root的权限命令,则root需要先使用去修改 /etc/sudoers,让该帐号能够使用全部或者部分的root功能。
    一般来说visudo的设置有集中简单的方法,下面我们以几个例子来分贝说明
  • 首先给出失败案例
[root@study ~]# su - ldy
[ldy@study ~]$ /etc/shadow
-bash: /etc/shadow: Permission denied
[ldy@study ~]$ sudo /etc/shadow

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for ldy:
ldy is not in the sudoers file. This incident will be reported.
[ldy@study ~]$
  • 单一用户可使用root所有命令,与sudoers文件语法
    假设我们让ldy这个帐号可以使用root的全部命令,第一种做法是直接修改/etc/suoders,方法如下:
root    ALL=(ALL)       ALL
ldy ALL=(ALL)

有趣把?
其实visudo只是利用vi 将 /etc/sudoers文件调出来修改而已。这个文件设置其实很简单
如上图所示,如果你找到98行左右,看到的数据就是

root    ALL=(ALL)
  • 上面这一行的4个组件意义
  1. 用户帐号:操作系统的那个帐号可以使用sudo这个命令
  2. 登录者的来源主机名:当这个帐号由那台主机连接到linux主机,意思是这个帐号可能是由那个网络主机链接的,这个设定值可以指定客户端计算机(信任来源的意思),默认值root可以来自任何依赖网络主机
  3. 可切换的身份:这个帐号可以切换成什么身份来执行后续的命令,默认root可以切换成 任何人
  4. 可执行的命令:可用该身份执行什么命令?这个命令务必使用绝对路径,默认root可以切换任何身份进行任何命令。

ALL是个特殊的关键词,代表任何身份,主机和命令的意思。所以我们想要ldy可以进行任何身份的任何命令,就如同上表特殊字体写的那样,其实就是复制上述默认值那一行,再将root改成ldy即可,此时[ldy不论l来自那台主机登录,它可以切换身份成任何人,且可以进行系统上面的任何命令]。修改完请保存后退出vi,并且ldy登录系统后,进行一下命令测试:

[root@study ~]# su - ldy
[ldy@study ~]$ /etc/passwd
-bash: /etc/passwd: Permission denied
[ldy@study ~]$ sudo /etc/passwd
[sudo] password for ldy:
Sorry, try again.
[sudo] password for ldy:
sudo: /etc/passwd: command not found
[ldy@study ~]$ sudo cat /etc/shadow
root:$6$NE7zSyDvPjjVaYV2$zFS9gkx2oPjr9KAHOXrCKnT4cYr.h822N0svE3PBoAiGAUkg.qz8fFvJyFZBsEHPnj82Mn1bgFmoxU7L6NMlk/::0:99999:7:::
bin:*:18078:0:99999:7:::
daemon:*:18078:0:99999:7:::
adm:*:18078:0:99999:7:::
lp:*:18078:0:99999:7:::
  1. 利用wheel用户组的以及免密码的功能处理visudo
%wheel  ALL=(ALL)       ALL
%代表后面接的是一个用户组之意,改完请保存后退出

实际案例如下

[root@study ~]# useradd ldy1
[root@study ~]# passwd ldy1
Changing password for user ldy1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@study ~]# usermod -a -G wheel ldy1
[root@study ~]#

上面的命令会造成任何简爱如wheel这个用户组的用户,就能够使用sudo切换任何身份来执行任何命令,你当然也可以将wheel换成你自己想要的用户名。接下来,请切换身份成为ldy1试试sudo的运行

[root@study ~]# su - ldy1
[ldy1@study ~]$ sudo cat /etc/shadow

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for ldy1:
root:$6$NE7zSyDvPjjVaYV2$zFS9gkx2oPjr9KAHOXrCKnT4cYr.h822N0svE3PBoAiGAUkg.qz8fFvJyFZBsEHPnj82Mn1bgFmoxU7L6NMlk/::0:99999:7:::
bin:*:18078:0:99999:7:::

注意!

centos7开始已经默认开放了wheel用户组的全部权限

我现在到这里基本够用了

------------以后在继续深入学吃饭--------

最后实践

linux帐号管理与ACL权限设置_字段_10