文档首页> 技术教程> sudoers 配置:给同事开权限的正确姿势

sudoers 配置:给同事开权限的正确姿势

发布时间:2026-02-05 11:00        更新时间:2026-02-05 22:52
编辑 sudo 配置只有一个正确入口:visudo。这条规矩值得放在最前面讲,因为它是无数次事故换来的。 为什么必须 visudo visudo 保存前会做语法检查,写错了不让生效;直接用 vim 改 /etc/sudoers,一个拼写错误就能让整台机器的 sudo 瘫痪,而 root 登录往往是禁用的,恢复只能靠控制台救援。校验指定文件用 visudo -f /etc/sudoers.d/deploy。 基本条目怎么写 格式是:用户 主机=(以谁的身份) 命令。给 deploy 只开 nginx 的重启与查看权限: deploy ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx 命令多了用别名收拢:Cmnd_Alias NGINX_CMDS = /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx,条目里直接写 NGINX_CMDS,可读性和维护都方便。按组开就把同事加进 ops 组,写 %ops ALL=(ALL) ALL。推荐做法是新开文件放 /etc/sudoers.d/ 目录下,一人或一个场景一个文件,离职时删文件即可,主配置保持原样。 NOPASSWD 的权衡 deploy ALL=(root) NOPASSWD: /usr/bin/rsync 免去了每次输密码,无人值守的定时脚本里更是必需。代价是这条命令不再有密码这道闸,密钥一旦泄露,对方可以反复调用。有人图省事写 ALL=(ALL) NOPASSWD: ALL,等于把闸整个拆掉,出事时连二次确认都没有。权衡原则:交互使用保留密码,脚本场景用 NOPASSWD,白名单窄到只留必须的那几条。 配完怎么验证 sudo -l -U deploy 列出该用户被允许的全部命令,与预期逐条对一遍;让同事本人执行 sudo -n true 测试免密是否生效。如果报"您没有权限",回到条目检查命令是否写成了绝对路径。验证完当场记一条变更说明,比事后回忆可靠。 sudo 的使用全程留痕,/var/log/secure 或 auth.log 里记着谁在什么时间执行了什么——这也是坚持白名单的另一个理由:出了事有账可查。主机多了以后,sudoers 文件建议纳入版本管理,谁在何时给谁加了什么,提交记录一目了然。给权限和收权限要有同样的仪式感,半年清理一次离职人员的条目,权限表才不会越攒越乱。