sudoers是系统权限“开关总闸”,须用visudo编辑并校验语法;格式为“用户/组 主机列表 = (目标用户:目标组) 命令列表”;遵循最小权限、禁shell逃逸、requiretty、全操作日志四铁律;支持User_Alias、Host_Alias、Cmnd_Alias别名管理;修改后需sudo -l测试、查日志验证,误锁可进recovery mode修复。

sudoers 文件不是普通配置文件,而是系统权限的“开关总闸”,写错一条可能直接锁死管理员账户或引发严重安全风险。必须用 visudo 编辑,依赖语法校验,禁止直接用 vim 或 nano 修改保存。
sudoers 基本语法结构:谁在哪儿能干什么
每一行授权规则遵循固定格式:
用户/组 主机列表 = (目标用户:目标组) 命令列表
-
用户/组:可用用户名(如
alice)、%开头的组名(如%admin)、别名(见下文) -
主机列表:通常写
ALL,多服务器环境可限定为server01,db02;HOSTALIAS可预定义主机别名 -
(目标用户:目标组):默认是
(ALL),即以任意用户身份执行;可细化为(root:www-data)表示仅能以 root 用户和 www-data 组身份运行 -
命令列表:绝对路径必填(如
/bin/systemctl),支持通配符/usr/bin/apt*,但禁用/bin/bash、/usr/bin/less等可逃逸命令
安全授权四条铁律
-
最小权限原则:只授权具体命令,不给
ALL。例如运维查日志只需/usr/bin/tail /var/log/nginx/*.log,而非整个/usr/bin/tail -
禁用 shell 逃逸入口:明确禁止
/bin/sh、/bin/bash、/usr/bin/perl -e、/usr/bin/python3 -c等可通过脚本提权的命令 -
启用 requiretty(终端绑定):在文件顶部加
Defaults requiretty,防止通过后台任务或 web shell 非交互式调用 sudo -
记录所有 sudo 操作:确保
Defaults logfile="/var/log/sudo.log"和Defaults log_input,log_output已启用,便于审计命令输入输出
实用别名机制:让规则清晰可维护
避免重复写长命令或用户列表,用别名分层管理:
-
User_Alias:如
User_Alias DBA = alice,bob,%dba-team -
Host_Alias:如
Host_Alias PROD = web01,web02,db01 -
Cmnd_Alias:如
Cmnd_Alias RESTART_NGINX = /bin/systemctl restart nginx, /bin/systemctl reload nginx - 组合使用示例:
DBA PROD = (root) RESTART_NGINX
调试与验证:改完别急着退出
- 保存前
visudo自动检查语法,报错则无法退出 —— 这是唯一安全防线 - 编辑后立即用目标用户测试:
sudo -l查看可见权限,sudo -u root whoami验证执行能力 - 检查日志:
tail -f /var/log/sudo.log观察实际调用是否符合预期 - 误操作锁死?重启进 recovery mode,挂载根分区为读写,用
mount -o remount,rw /后修改 /etc/sudoers


















