核心是仅授权/usr/bin/systemctl restart nginx精确命令,禁用所有其他systemctl操作及网络/关机类命令,并通过sudo -l验证权限严格受限。

核心是只授权明确路径+固定参数的 systemctl restart nginx,同时切断所有可能绕过重启限制的系统级命令路径,包括网络服务 reload 的通用入口。
只给精确的 Nginx 重启权限
在 /etc/sudoers.d/nginx-restart 中用 visudo -f 添加:
- 必须写完整路径:
/usr/bin/systemctl restart nginx,不能省略/usr/bin/或写成systemctl - 参数必须固定:
restart nginx是字面量匹配,restart *、reload nginx、restart mysql全部不生效 - 推荐绑定到组(如
%webops),方便后续扩展其他服务:
%webops ALL=(root) NOPASSWD: NGINX_RESTART
堵死系统级网络 reload 和关机类操作
仅“放开一条缝”还不够,必须显式封堵常见绕过路径:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 禁止直接调用网络管理命令:
/sbin/ifconfig、/usr/bin/ip link、/usr/bin/nmcli等(若不需要) - 重点拦截 systemd 下的网络 reload 入口:
/bin/systemctl reload systemd-networkd、/bin/systemctl reload NetworkManager - 同步屏蔽关机/重启类命令,防止用户用
systemctl reboot或shutdown间接影响网络状态:
/bin/systemctl reload systemd-networkd, \
/bin/systemctl reload NetworkManager, \
/sbin/shutdown, /sbin/reboot, /sbin/halt, /sbin/poweroff, \
/bin/systemctl reboot, /bin/systemctl poweroff, /bin/systemctl halt
%webops ALL=(ALL) ALL, !NETWORK_BLOCK
验证是否真受控
切到目标用户后执行以下检查:
-
sudo -l -U username:确认输出中只列出/usr/bin/systemctl restart nginx,没有其他 systemctl 行为 -
sudo systemctl restart nginx:应成功 -
sudo systemctl reload nginx:应被拒绝(未授权) -
sudo systemctl reload NetworkManager或sudo ip link set eth0 down:应明确提示“command not allowed”
补充建议:避免 service 兼容层干扰
有些老脚本会用 service nginx restart,但它实际调用的是 systemctl。sudoers 不识别这种封装,所以不要授权 /usr/sbin/service。若必须兼容,可额外加一条:
但注意:该路径需确认真实存在(不同发行版位置可能为 /sbin/service),且仍要写绝对路径、固定参数,不可带通配符。

















