https://wiki.archlinux.org/title/Sudo_(简体中文)
查看当前设置
命令 sudo -ll 可以显示当前的 sudo 配置; 命令 sudo -lU user 可以查看某个特定用户的设置。
使用 visudo
sudo的配置文件是/etc/sudoers。visudo会锁住sudoers文件,保存修改到临时文件,然后检查文件格式,确保正确后才会覆盖sudoers文件。必须保证sudoers格式正确,否则sudo将无法运行。
警告: /etc/sudoers格式错误会导致sudo不可用。必须使用visudo编辑该文件防止出错。
visudo调用的默认编辑器是vi。官方仓库里的 sudo 编译时开启了--with-env-editor,会采用环境变量 VISUAL 和 EDITOR的设置。如果设置了VISUAL 就不会使用EDITOR。
如果要临时使用其他编辑器,在该命令前加上EDITOR环境变量即可。例如,要使用 nano,用root运行以下命令:
EDITOR=nano visudo
要永久设置编辑器,请查看 定义本地环境变量.
系统级的设置可以把编辑器设置到 /etc/sudoers。以 nano 为例,使用visudo打开该文件,加入以下内容:
Defaults specification
Reset environment by default
Defaults env_reset
Set default EDITOR to vim, and do not allow visudo to use EDITOR/VISUAL.
Defaults editor=/usr/bin/nano, !env_editor
设置示例
要为某个用户可以执行所有命令,在配置文件中加入:
用户名 ALL=(ALL) ALL
如果只想允许以某个主机名登录用户执行命令:
用户名 主机名=(ALL) ALL
允许wheel用户组成员无密码使用sudo:
%wheel ALL=(ALL) NOPASSWD: ALL
要不询问某个用户的密码:
Defaults:USER_NAME !authenticate
警告: 任何以您的用户名运行的程序都可以无需密码就执行 sudo。
只为用户启用部分命令的执行权限:
用户名 主机名=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu
注意: 最后的设置会覆盖前面的设置,所以限定多的配置应该放到配置文件的后面。
只为某个主机名登录用户启用部分命令的执行权限,不用输入密码:
USER_NAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
更详细的sudoers范例,参见本页。此外,更多信息参见:sudoers 手册。
sudoers文件默认权限
sudoers文件的属主和属组ID必须都是0,文件权限位是0440(-r--r-----)。如果你不小心改变了默认权限,应当立即恢复它们:
chown -c root:root /etc/sudoers
chmod -c 0440 /etc/sudoers
密码过期时间
用户可以修改sudo记录密码的时间。使用visudo命令将如下内容加入/etc/sudoers:
Defaults:用户名 timestamp_timeout=20
对该用户,sudo将记录密码20分钟。时间值也可以是小数。
提示: 如果timestamp_timeout设置为0,sudo总是询问密码。