可通过配置 /etc/sudoers 精确授权用户仅运行指定网络工具(如 /bin/ping、/usr/bin/traceroute、/usr/bin/nslookup),须用 visudo 编辑、确认绝对路径、禁止通配符,并验证权限限制有效性。

可以通过配置 /etc/sudoers 文件,精确控制用户仅能以 root 权限运行指定网络诊断工具(如 ping、traceroute、nslookup),而禁止执行其他高危命令。
明确需要放行的工具及其完整路径
Linux 中同名命令可能存在于多个路径(如 /bin/ping、/usr/bin/ping),sudoers 要求使用绝对路径。建议先用 which 或 command -v 确认实际路径:
-
which ping→ 通常返回/bin/ping -
which traceroute→ 可能是/usr/bin/traceroute或/usr/sbin/traceroute -
which nslookup→ 多为/usr/bin/nslookup
记录下每个工具的真实路径,后续配置必须完全匹配。
创建专用 sudoers 规则(推荐使用 visudo)
直接编辑 /etc/sudoers 风险极高,务必使用 sudo visudo,它会在保存前语法检查,避免锁死系统。
在文件末尾添加类似规则(以用户 devuser 为例):
devuser ALL=(root) NOPASSWD: /bin/ping, /usr/bin/traceroute, /usr/bin/nslookup
说明:
-
NOPASSWD:表示执行这些命令时不需输入密码(可选,按安全策略决定是否保留) - 逗号后不能有空格;路径必须准确;不支持通配符(如
/usr/bin/*不合法) - 若需限制参数(例如只允许 ping 指定域名),可用
sudoers的command alias+ 参数白名单,但较复杂,一般场景不建议过度限制
验证权限并测试行为
保存退出后,切换到目标用户测试:
-
sudo ping -c 3 8.8.8.8→ 应成功执行 -
sudo ls /root→ 应被拒绝(提示“command not allowed”) -
sudo /bin/bash→ 同样被拒绝,确保未开放 shell 提权路径
若失败,检查:
– 是否拼错路径或用户名
– 是否遗漏 ALL=(root) 部分
– 是否误加了不可见字符(如中文标点)
进阶:按组管理多个用户
若需授权给一组用户(如 netdiag 组),可先创建组:
sudo groupadd netdiagsudo usermod -aG netdiag alice
然后在 /etc/sudoers 中写:
%netdiag ALL=(root) NOPASSWD: /bin/ping, /usr/bin/traceroute, /usr/bin/nslookup
符号 % 表示组名,便于后期增减成员而无需反复修改 sudoers。
不复杂但容易忽略关键细节:路径准确性、visudo 编辑习惯、以及及时验证。只要严格按路径配置,就能安全地把网络诊断能力交给普通用户,又不扩大权限范围。

















