什么是sudo?
在Linux中,经常会看到一些带
sudo
的命令,有好事者就要问了,sudo
是什么,有什么用?
sudo
是Linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,这种感觉就像是你的老师授给你当了小组长一样。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。
配置文件
sudo
的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers
,sudo
提供了一个编辑该文件的命令:visudo
来对该文件进行修改,visudo
使用vi打开/etc/sudoers文件,但是在保存退出时,visudo
会检查内部语法,避免用户输入错误信息,操作和vim
是一样的
[root@Jobs /]# visudo
...
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93
94 ## Allows members of the 'sys' group to run networking, software,
95 ## service management apps and more.
96 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
97
98 ## Allows people in group wheel to run all commands
99 %wheel ALL=(ALL) ALL
100
101 ## Same thing without a password
102 # %wheel ALL=(ALL) NOPASSWD: ALL
...
"/etc/sudoers.tmp" 112L, 3938C
通过visudo
打开配置文件之后,会发现里面都是一些对配置文件的描述注释,一直往下翻,看到第92行左右,会看到有一个范例root ALL=(ALL) ALL
,从左往右依次解释一下
root:表示用户名
ALL:表示允许登陆的主机,大部分情况下为ALL
(ALL):表示以谁的身份去执行,如果在()内写ALL,表示root身份
ALL:表示当前用户可执行的命令,多个命令可以用“,”分割
理所当然的, 如果在第92行的root ALL=(ALL) ALL
下加一行,test1 ALL=(ALL) ALL
,则表示“test1”用户在所有主机上可以“root”的身份执行所有命令,千万不要这么做,非常危险!千万不要这么做,非常危险!千万不要这么做,非常危险!(重要的事情说三遍)
关于如何以正确姿势来修改sudoers
配置文件,下面会用示例的方式给大家展示
举个栗子
[test1@Jobs root]$ ls /root/
ls: cannot open directory /root/: Permission denied
//“test1”没有权限所有无法访问“root”家目录
[test1@Jobs root]$ sudo ls /root
//如果直接用`sudo`命令则需要让“root”用户输入密码,如果每次都要输入,太烦了,而且也不安全
PassWord:
[root@Jobs ~]#visudo
···
92 root ALL=(ALL) ALL
93 test1 ALL=(ALL) /bin/ls
//在92行下面加一行,协商所需要执行的命令路径,命令路径可用“which”命令来查看
···
[test1@Jobs root]$ sudo ls /root
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 test1:
//此时提示输入“test1”用户的密码
bbr.sh bbr.sh.1 install_bbr.log shadowsocks.log shadowsocks.sh test ystemctl status firewalld
#常见配置文件写法
[root@Jobs ~]#visudo
···
92 root ALL=(ALL) ALL
93 test1 ALL=(ALL) ALL #“test1”用户在所有主机上可以“root”的身份执行所有命令
94 %test1 ALL=(ALL) ALL #“test1”组内用户在所有主机上可以“root”的身份执行所有命令
95 test1 ALL=(root) /bin,!/bin/who #“test1”用户在所有主机上可以“root”的身份执行/bin下的所有命令除了who命令
96 %test1 ALL=(ALL) NOPASSWD: ALL #“test1”组内用户在所有主机上可以“root”的身份执行所有命令不用密码
···
别名
sudoers
有个骚操作,支持别名的定义
User_Alias | Host_Alias | Runas_Alias | Cmnd_Alias |
---|---|---|---|
用户名 | 主机名 | 用户名 | 命令路径 |
组名(%) | IP 地址 | 组名(%) | 目录 |
其他User_Alias | 网络地址 | 其他Runas_Alias | 其他Cmnd_Alias |
示例:
User_Alias son = son1,son2,%test1 #定义个别名叫“son”,里面有用户“son1”“son2”“test1用户组”
Cmnd_Alias ml = /bin #定义命令路径别叫“ml”
son ALL=(ALL) ml #以别名形式写配置文件
依次类推,对User_Alias、Host_Alias、 Runas_Alias、Cmnd_Alias均可进行别名定义,别名定义能很好的增加工作效率
写在最后
如果还需要查询更多的
sudo
命令的用法,请到《Linux命令手册》,这应该是我第三次安利这个网站了,是不是要考虑赞助点哈~