概述
sudo
命令可以让普通用户具有超级管理员 root
才有的权限。
有时候需要让普通用户执行一些只有超级管理员才有权限执行的命令,但如果告诉普通用户超级管理员的密码,就可能造成密码泄露。所以使用 sudo
可以让普通用户执行一些超级管理员才有权限执行的命令,这样减少了 root
用户的登录和管理时间,也提高了安全性。
注:
sudo
命令默认情况下只能root
用户才能使用。如果需要让普通用户也能使用sudo
命令,必须在/etc/sudoers
文件中进行配置。
/etc/sudoers
文件
如果需要让普通用户也能使用 sudo
命令,必须在 /etc/sudoers
文件中进行配置。并且该文件也只有 root
用户才有权限进行修改。
修改该文件必须使用 visudo
命令,因为该文件是一个只读文件,必须通过特殊的方式才能修改。并且 visudo
命令可以对修改后的 /etc/sudoers
文件进行语法检查,判断你的修改是否有效。
这两行说明如下:
root ALL=(ALL) ALL
用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
关于各字段说明如下:
字段 | 说明 |
---|---|
用户名 | 表示系统中哪个用户,可以使用 sudo 这个命令 |
组名 | 表示系统中哪个组,可以使用 sudo 这个命令 |
被管理主机的地址 | 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。通常写 ALL |
可使用的身份 | 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略 |
授权命令 | 表示可以执行什么命令,命令必须写绝对路径。默认值是 ALL,表示可以执行任何命令 |
例如:
# 表示用户 zhangsan 可以执行 useradd 命令
zhangsan ALL=(ALL) /usr/sbin/useradd
# 表示名为 lisi 的用户组中的所有成员可以执行 userdel 命令
%lisi ALL=(ALL) /usr/sbin/userdel
进行测试:首先使用 visudo
命令在文件中的如下位置添加如下内容(注意,首先要有如下的用户和用户组):
接着登录 zhangsan
用户,然后使用 sudo useradd zhangsan-son
命令添加用户:
注意:可以写多个授权命令,之间用逗号分隔。
语法
该命令的语法如下:
sudo [选项] 命令
该命令支持的选项有:
选项 | 说明 |
---|---|
-V | 显示版本编号 |
-h | 会显示版本编号及指令的使用方式说明 |
-l | 显示出自己(执行 sudo 的使用者)的权限 |
-v | 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码 |
-k | 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟) |
-b | 将要执行的指令放在背景执行 |
-p prompt | 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称 |
-u, --user=user | 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 user 的身份执行指令 |
-s | 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell |
-H | 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root ) |
使用
执行命令
如果要使用 sudo
执行命令:
# 语法
sudo 命令
# 示例
sudo useradd zhangsan-son
查看当前用户可执行的 sudo
命令
如果要查看当前用户可以以超级管理员身份执行哪些命令,加上 -l
选项:
# 语法
sudo -l