最安全省事的方式是将用户加入sudo组(ubuntu/debian)或wheel组(rhel/centos),而非手动编辑/etc/sudoers;必须重新登录或运行newgrp生效,且需确认/etc/sudoers.d/未被注释。

直接给普通用户加 sudo 权限,最安全、最省事的方式是把人加进 sudo 组(Ubuntu/Debian)或 wheel 组(RHEL/CentOS),而不是手改 /etc/sudoers。硬写配置容易出错,一逗号没对就可能锁死 sudo。
用 usermod -aG 加入预设组最稳妥
现代发行版默认把 %sudo 或 %wheel 写进了 /etc/sudoers,只要用户在对应组里,就自动有权限。不用动配置文件,也不用记语法。
- Ubuntu/Debian 系:运行
sudo usermod -aG sudo username - RHEL/CentOS 系:运行
sudo usermod -aG wheel username - 加完必须重新登录终端,或运行
newgrp sudo(Debian)或newgrp wheel(RHEL)让组生效 - 验证是否成功:切换到该用户,执行
groups,输出里要有sudo或wheel
visudo 是唯一能安全编辑 sudoers 的方式
如果非要手动配——比如只允许重启 nginx、不许删文件——就必须用 visudo。它会在保存前做语法检查,避免写错导致整个系统无法用 sudo。
- 别用
vim /etc/sudoers或nano /etc/sudoers,哪怕你只是加个空格,也可能让sudo拒绝工作 - 加全权规则:在文件末尾加一行
username ALL=(ALL:ALL) ALL - 限制命令范围:写成
username ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/journalctl -u nginx,路径必须绝对,命令间用英文逗号、无空格 - 改完立刻运行
sudo visudo -c检查语法,返回sudoers file parsed OK才算过关
/etc/sudoers.d/ 适合多人或生产环境
直接改主配置难回滚、易冲突;模块化管理更清晰,也方便 Git 跟踪。
- 创建独立配置:
sudo visudo -f /etc/sudoers.d/01-deployers - 在里面写规则,格式和主文件一样,例如:
%deployers ALL=(root) NOPASSWD: /usr/bin/systemctl restart app* - 设权限防篡改:
sudo chmod 440 /etc/sudoers.d/01-deployers - 注意文件名按字母序加载,
01-开头确保早于其他配置生效
免密码(NOPASSWD)要精确到命令,不能放 ALL
NOPASSWD: ALL 等价于交出 root 密码,日常运维中基本没有合理场景。真要免密,只针对明确、低风险的单条命令。
- 安全写法:
backup ALL=(root) NOPASSWD: /usr/bin/rsync --archive /data/ /backup/ - 危险写法:
alice ALL=(root) NOPASSWD: ALL—— 一旦 alice 账户被黑,攻击者可直接提权 - 所有 sudo 操作默认记入
/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS),定期翻日志比依赖密码更可靠
真正容易被忽略的是:组权限变更不会即时生效,必须重登或 newgrp;而 visudo 保存后虽然立即可用,但若规则写在 /etc/sudoers.d/ 下,还要确认该目录没被 #includedir 注释掉——有些最小化安装会默认关掉这个功能。











