目标
sudo 权限治理最怕两件事:
- 规则分散
- 回收不干净
所以我现在只认一种方式:所有机器统一走 sudoers.d,不直接手改主文件。
目录和命名先统一
/etc/sudoers.d/
10-base-admin
20-ops-readonly
90-temp-access
每个文件只放一类规则,临时权限也单独放,不和长期权限混在一起。
新增流程
新增权限时先落一个临时文件,再校验,再上线。
cp /etc/sudoers /etc/sudoers.bak
cat >/tmp/90-temp-access <<'EOF'
user1 ALL=(ALL) NOPASSWD:/usr/bin/systemctl status nginx
EOF
visudo -cf /tmp/90-temp-access
install -m 0440 /tmp/90-temp-access /etc/sudoers.d/90-temp-access
visudo -cf /etc/sudoers
回收流程
回收不要做“注释掉再说”,直接删文件或删规则,然后复验。
rm -f /etc/sudoers.d/90-temp-access
visudo -cf /etc/sudoers
如果机器很多,建议用 Ansible 批量分发这类文件,保持同一份模板。
校验要看什么
我会把校验分成三层:
- 文件语法对不对
- 规则权限对不对
sudo -n能不能直接过
visudo -cf /etc/sudoers
sudo -n true
sudo -l -U user1
回滚怎么做
回滚只做两步:
- 恢复备份
- 重新校验
cp /etc/sudoers.bak /etc/sudoers
visudo -cf /etc/sudoers
实战里最有用的部分
这篇能写的不是“sudo 有风险”,而是:
- 用
sudoers.d收口 - 新增和回收都走同一套流程
- 语法校验必须和发布绑在一起
- 备份是回滚边界,不是摆设
结论
sudo 权限这件事,一旦不收口,后面一定会散。把它固定成文件化、校验化、可回滚的流程,才算真的能长期维护。
发表回复