普通用户需sudo授权才能关机或重启,应严格限制命令路径与参数、禁用交互式shell、启用日志与延时保护,并按角色细分权限。

普通用户默认无权执行关机或重启命令,需通过 sudo 授权才能安全使用。关键不是简单放开权限,而是限制操作范围、明确执行条件、防止误操作或滥用。
只授权特定关机/重启命令,禁用 shell 通配与参数绕过
在 /etc/sudoers 中应使用完整路径和固定参数白名单,避免开放 shutdown 或 reboot 的任意调用。例如:
- ✅ 允许立即关机:
%admin ALL=(root) /sbin/shutdown -h now - ✅ 允许5分钟后关机(带提示):
%admin ALL=(root) /sbin/shutdown -h +5 "System maintenance" - ❌ 禁止:
%admin ALL=(root) /sbin/shutdown(可被用于取消关机、重启、任意时间等) - ❌ 禁止:
%admin ALL=(root) /sbin/reboot(无法区分是否带 -f 强制重启)
禁止交互式 shell 和命令拼接风险
sudo 默认可能启用 env_reset 和 requiretty,但还需额外加固:
- 确保
sudoers中启用noexec(若系统支持),防止通过shutdown --help等触发子进程执行任意命令 - 禁用
!requiretty(即保留 requiretty),避免后台脚本或 SSH 非交互会话绕过密码提示 - 不授予
/bin/bash或/bin/sh的 sudo 权限,杜绝用sudo bash -c "shutdown ..."绕过命令白名单
记录所有关机/重启操作并设置最小延迟保护
关键操作必须可追溯,且防手抖:
- 启用
sudo日志:确认/etc/sudoers包含Defaults logfile="/var/log/sudo.log",并检查该文件权限为600、属主为 root - 强制延时关机:用
shutdown -h +1替代now,给管理员 60 秒窗口取消(sudo shutdown -c),降低误触风险 - 对重启操作单独授权并加注释说明用途,例如:
%ops ALL=(root) /sbin/shutdown -r +2 "Scheduled firmware update"
按角色细分权限,而非全局开放
不同岗位需要不同能力,避免“一权通用”:
- 运维值班员:仅允许带时间参数的
shutdown -h和shutdown -r,禁用-f(强制)和-k(仅警告) - 开发测试人员:可允许
systemctl reboot --no-wall(静默重启),但仅限于指定测试主机(用 Host_Alias 限定) - 审计员:只读权限查看
/var/log/sudo.log和journalctl -u systemd-logind,不可执行关机命令










