sudo命令
sudo命令说明
对比su命令切换需要用户密码,sudo执行则只需要自己的密码即可。有的时候甚至是不需要密码就可以运行sudo,而只有在/etc/sudoers内的用户才可以执行sudo这个命令。同时,如果两次执行sudo的间隔在五分钟内,那么再次执行sudo时就不需要再次输入密码。
sudo [-b] [-u 新用户账号]
参数:
-b :将后续命令让系统自动执行,而不与前面的shell产生影响。
-u :后面可以接想要切换的用户,如果没有则默认是root。
sudo命令样例
[root@shadow ~]# sudo -u sshd touch /tmp/mysshd
[root@shadow ~]# ll /tmp/mysshd
-rw-r--r-- 1 sshd sshd 0 Oct 13 22:02 /tmp/mysshd
这个样例中root使用sudo切换sshd来新建文件,需要注意的是我们本身是无法使用“su - sshd”来切换系统账号(因为系统账号的shell是/sbin/nologin)。
visudo与/etc/sudoers
文件语法
除了root之外的其他账号,如果想要使用sudo执行属于root的权限命令,则root需要先使用visudo去修改/etc/sudoers,让该账号能够使用全部或部分的root命令功能。visudo的实质是使用vi调出/etc/sudoers的文件内容来进行修改。其中需要修改的数据格式如下:
用户账号 登录者的来源主机名=(可切换的身份) 可执行的命令
root ALL=(ALL) ALL <==这是默认值
这几个参数的意义如下:
-
用户账号:系统的哪个账号可以使用sudo这个命令。默认为root这个账号。
-
登录者的来源主机名:表明这个账号可能是由哪一台网络主机连接过来的。默认root可以来自任何一台网络主机。
-
可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
-
可执行的命令:这个命令务必使用绝对路径编写。默认root可以切换任何身份且进行任何命令。
其中ALL是特殊的关键字,代表任何身份、主机或命令的意思。
用户组设置
[root@shadow ~]# visudo
...前面省略...
%wheel ALL=(ALL) ALL
# 在最左边加上一个%,代表后面接的是一个“用户组”的意思。
以上的设置表明任何加入wheel这个用户组的用户都可以使用sudo切换任何身份来操作任何命令。
免密码输入功能
[root@shadow ~]# visudo
...前面省略...
%wheel ALL=(ALL) NOPASSWD:ALL
其中关键字NOPASSWD就是免除密码输入的意思。
有限制的命令操作
例如,需要设置用户仅能使用passwd这个命令帮助root修改其他用户的密码,可以如下设置:
[root@shadow ~]# visudo
myuser1 ALL=(root) /usr/bin/passwd <==最后命令必须使用绝对路径
这个设置的意思是指myuser1可以切换成root使用passwd这个命令,这里需要注意的是:命令字段必须要填写成绝对路径才可以,否则visudo会出现语法错误。但同时,这种情况下,myuser1同样有权限去修改root的密码,可能这并不是我们所希望的,因此,我们可以进行如下改进:
[root@shadow ~]# visudo
myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
/usr/bin/passwd root
其中的“!”代表不可执行的意思,因此,这一行的含义则变为可以执行“passwd任意字符”,但是“passwd”与“passwd root”这两个命令除外。这样,mysuer1就可以修改其他用户的密码,而不能修改root的密码了。
通过别名设置visudo
visudo的别名可以是命令别名、账户别名、主机别名等。其中User_Alias代表账号别名,Cmnd_Alias代表命令别名,Host_Alias代表来源主机名别名,这些别名都需要使用大写字符命名。例如:
[root@shadow ~]# visudo
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
!/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
sudo搭配su使用
如果单纯使用su命令,切换root身份的时候需要用到root的密码,而如果用sudo命令搭配su命令使用则只需要自己的密码就可以完成转换了。