最简方式是将用户加入sudo(Ubuntu/Debian)或wheel(CentOS/RHEL)组;推荐用visudo精确授权具体命令路径;可对特定命令设NOPASSWD,但禁用NOPASSWD: ALL;用Cmnd_Alias和User_Alias提升可维护性,规则建议存于/etc/sudoers.d/下独立文件。

直接加组是最简方式
多数现代 Linux 发行版(如 Ubuntu/Debian)默认将 sudo 组设为特权组,CentOS/RHEL 则用 wheel 组。只要把用户加入对应组,就能获得完整 sudo 权限:
- Ubuntu/Debian:
sudo usermod -aG sudo username - CentOS/RHEL:
sudo usermod -aG wheel username - 执行后需新开终端或
su - username切换会话才生效
按命令精确授权(推荐)
不希望用户能执行所有命令?用 visudo 编辑规则,限制到具体二进制路径和参数:
- 只允许重启 nginx:
username ALL=(root) /usr/bin/systemctl restart nginx - 允许多个命令,用逗号分隔:
username ALL=(root) /bin/journalctl -u nginx, /usr/bin/systemctl status nginx - 路径必须写全(不能用
systemctl,得写/usr/bin/systemctl),否则 sudo 拒绝执行
免密执行与安全平衡
开发或自动化场景常需跳过密码提示,但要明确限定范围:
- 仅对特定命令免密:
username ALL=(root) NOPASSWD: /usr/bin/apt update, /usr/bin/dpkg -i - 禁止对危险命令免密(如
/sbin/reboot、/bin/rm) - 避免写成
NOPASSWD: ALL—— 这等于开放 root shell,违背最小权限原则
用别名提升可维护性
多人多命令时,靠别名管理更清晰、不易出错:
- 定义命令别名:
Cmnd_Alias WEB_CMD = /usr/bin/systemctl restart nginx, /usr/bin/nginx -t - 定义用户别名:
User_Alias DEV_TEAM = alice, bob, %webadmins - 组合授权:
DEV_TEAM ALL=(root) NOPASSWD: WEB_CMD - 所有规则建议放在
/etc/sudoers.d/下独立文件中(如/etc/sudoers.d/web-team),避免污染主配置










