应通过/etc/sudoers精准授权运维人员仅执行指定服务重启命令,如sudo systemctl restart nginx,禁止系统级关机重启;需用完整路径、固定参数白名单,配合cmnd_alias统一管理并显式排除shutdown/reboot等高危命令,同时启用sudo日志审计。

要让运维人员只能执行特定的重启指令(比如只允许重启 Nginx 服务,禁止重启整个系统),关键不是“放开 reboot”,而是用 /etc/sudoers 精准授权——只给明确路径、明确参数的命令权限,其他一概拒绝。
明确限定可执行的 systemctl 重启命令
systemd 系统中,reboot、shutdown 等命令实际都指向 /bin/systemctl。直接禁用或开放整个 systemctl 风险太大。更安全的做法是:只允许用户运行带固定参数的 systemctl restart 子命令。
- 用
visudo编辑/etc/sudoers - 添加一行(以用户
opsuser为例):opsuser ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl restart redis - 注意必须写完整绝对路径,且参数不能带通配符(如
restart *不允许) - 保存后,该用户执行
sudo systemctl restart nginx成功,但sudo systemctl reboot或sudo systemctl restart mysql会被拒绝
用 Cmnd_Alias 统一管理多条重启指令
当需要授权多个服务重启时,定义命令别名能让配置清晰、易维护。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 在
/etc/sudoers的Cmnd_Alias区域添加:Cmnd_Alias RESTART_SERVICES = /usr/bin/systemctl restart nginx, /usr/bin/systemctl restart redis, /usr/bin/systemctl restart haproxy - 再绑定到用户或组:
%ops ALL=(root) NOPASSWD: RESTART_SERVICES - 这样所有属于
ops组的成员,仅能无密码执行这三条指定的 restart 命令,其余任何 systemctl 操作均不可用
彻底屏蔽系统级关机/重启命令
防止绕过限制,需同步阻断原始关机类命令的 sudo 权限。
- 定义一个禁止别名:
Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/reboot, /sbin/halt, /sbin/poweroff, /bin/systemctl reboot, /bin/systemctl poweroff - 对目标用户显式排除:
opsuser ALL=(ALL) ALL, !SHUTDOWN_CMDS - 该写法表示“允许全部命令,但明确禁止 SHUTDOWN_CMDS 列表中的命令”,比单纯不授权更可靠
验证与审计建议
配置完成后务必验证,并开启操作留痕。
- 用
sudo -l -U opsuser查看该用户实际被允许执行的命令列表 - 手动测试几条允许和不允许的命令,确认行为符合预期
- 在
/etc/sudoers中启用日志:Defaults logfile="/var/log/sudo.log",便于事后追溯谁在何时执行了哪条重启指令










