linux中sudo权限由/etc/sudoers文件实现白名单式控制,仅允许明确授权的用户、组及绝对路径命令执行提权,其余全部拒绝;必须用visudo编辑以防止语法错误锁死系统。

Linux 中没有直接叫“sudo 白名单”或“sudo 黑名单”的独立机制,真正起作用的是 /etc/sudoers 文件里的用户/组授权规则——它本质是白名单式控制:只允许明确列出的用户、组或命令执行提权操作,其余一概拒绝。
sudo 权限靠 /etc/sudoers 控制
普通用户默认不能用 sudo,是因为他们没被写进 /etc/sudoers。这个文件就像一张准入名单,只有名字(或所属组)出现在其中,并配有合法规则,才能获得对应权限。
- 规则格式示例:
alice ALL=(ALL:ALL) /usr/bin/apt, /bin/systemctl表示用户 alice 可在任意主机上以任意用户/组身份运行 apt 和 systemctl 命令 - 必须用
sudo visudo编辑该文件,防止语法错误导致所有用户无法提权 - 常见安全写法:限制可执行命令路径(避免通配符)、禁用密码(
NOPASSWD:)仅用于可信场景、禁止 shell 逃逸(如禁用/bin/bash)
命令级白名单:限制能跑哪些程序
管理员可精细到具体命令,让某用户只能执行少数几个安全操作,比如只允许重启 nginx、查看日志,不能删文件或改配置。
- 定义命令别名:
Cmnd_Alias WEBCTL = /usr/bin/systemctl restart nginx, /usr/bin/tail /var/log/nginx/*.log - 绑定用户与别名:
%webadmin ALL=(root) NOPASSWD: WEBCTL - 效果:属于 webadmin 组的用户,用
sudo systemctl restart nginx成功;但sudo rm -rf /或sudo vim /etc/nginx/nginx.conf直接报错拒绝
网络层黑白名单:用 iptables 实现
虽然和 sudo 无关,但常被一起提及的“黑白名单”多指网络访问控制。它通过 iptables 设置进出站规则:
- 白名单(只放行指定 IP):
iptables -P INPUT DROP先默认拒绝,再逐条加-A INPUT -s 192.168.1.100 -j ACCEPT - 黑名单(屏蔽恶意 IP):
iptables -A INPUT -s 203.0.113.45 -j DROP - 保存规则(CentOS/RHEL):
service iptables save;现代系统推荐用nftables替代
用户级命令白名单(非 sudo 场景)
若想让某用户登录后只能运行几个命令(比如运维自助平台账号),可用受限 shell 或自建白名单目录:
- 创建专用目录:
sudo mkdir /usr/local/bin/restricted - 复制允许的命令(用
cp -p保留权限):sudo cp /bin/ls /usr/local/bin/restricted/ - 设置用户 shell 为
/usr/local/bin/restricted/shell-wrapper,并在 wrapper 中只调用该目录下的二进制 - 更稳妥方式是配合
rbash(restricted bash)并清空$PATH,只留白名单路径











