Common scripts
Linux
common
免 sudo 密码
原则: 永远用 visudo 编辑配置文件(自动校验语法,错误不会保存)。
方法一:完整 sudo 免密(不推荐用于生产服务器)
sudo visudo -f /etc/sudoers.d/dont-prompt-$USER-for-sudo-password
# 添加一行:
username ALL=(ALL) NOPASSWD: ALL
方法二:限制到特定命令(推荐)
sudo visudo -f /etc/sudoers.d/docker-user
# 仅 docker 相关命令免密:
username ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/docker-compose
方法三:使用 Cmnd_Alias 分组管理
sudo visudo -f /etc/sudoers.d/deploy
Cmnd_Alias DEPLOY_CMDS = /usr/bin/systemctl restart nginx, \
/usr/bin/systemctl reload nginx, \
/opt/deploy/deploy.sh
%deploy ALL=(ALL) NOPASSWD: DEPLOY_CMDS
验证命令:
sudo -l # 查看当前用户可执行的 sudo 命令
sudo -l -U username # 查看指定用户
sudo -l | grep NOPASSWD # 查看哪些命令已配置免密
ls -la /etc/sudoers.d/ # 列出所有配置文件
安全注意事项:
- 避免给面向公网的 SSH 账号设置完整 NOPASSWD
- 尽量限制到具体命令路径,而非通配 ALL
- 对可能被 shell escape 的命令,考虑加 NOEXEC 选项
- sudo 日志默认通过 syslog 记录,可用
journalctl | grep sudo查看
来源: How to Configure Sudo Access Without a Password on Ubuntu