核心防护策略是“白名单授权+精确路径+分层阻断”,通过sudoers命令级黑名单(如!/bin/rm)、setfacl文件权限封禁、rbash+自定义path纯白名单环境三重防线,辅以日志审计与rm交互增强。

核心思路是“白名单授权 + 精确路径 + 分层阻断”,不靠删命令、改别名或禁用账户,而是让危险命令在任何常规路径下都不可执行,除非明确授权。
用 sudoers 做命令级黑名单(最常用)
这是第一道也是最关键的防线。sudoers 支持对命令显式禁止,但要注意规则顺序和语法细节:
- 必须用 visudo 编辑
/etc/sudoers,避免语法错误导致 sudo 完全失效 - 禁止命令需写绝对路径,例如
!/bin/rm、!/sbin/mkfs,写成rm或mkfs无效 - 规则按从上到下匹配,你的限制行必须放在通用规则(如
%sudo ALL=(ALL:ALL) ALL)之前,否则会被跳过 - 示例配置(放在 visudo 文件靠前位置):
deploy ALL=(ALL) NOPASSWD: /bin/ls, /usr/bin/journalctl, !/bin/rm, !/sbin/mkfs, !/sbin/shutdown, !/bin/dd
用 setfacl 封死本地直接调用(防绕过)
仅靠 sudoers 不够——用户可能绕过 sudo,直接执行 /bin/rm。此时需从文件权限层加固:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 先确认文件系统挂载时启用了 acl:
mount | grep "$(df /bin -P | tail -1 | awk '{print $1}')" | grep acl - 对高危命令二进制文件设置 ACL,禁止特定用户执行:
sudo setfacl -m u:deploy:--- /bin/rmsudo setfacl -m u:deploy:--- /sbin/mkfs - 验证:用 deploy 用户执行
/bin/rm --version,应提示Permission denied - 注意:ACL 优先级高于传统 chmod,且可单独控制每个用户,比
chmod -x更精准
用 rbash + 自定义 PATH 实现纯白名单环境(适合外包/监控账号)
对只需查看、诊断的账号(如监控用户 monitor),彻底切断所有非必要命令入口:
- 切换 Shell:
sudo usermod -s /bin/rbash monitor - 创建专属 bin 目录并设为只读:
sudo mkdir -p /home/monitor/bin && sudo chown monitor:monitor /home/monitor/bin - 只软链接允许的命令:
ln -s /usr/bin/ps /home/monitor/bin/psln -s /usr/bin/top /home/monitor/bin/topln -s /usr/bin/journalctl /home/monitor/bin/journalctl - 在
/home/monitor/.bashrc中固定 PATH:export PATH="/home/monitor/bin",再用chattr +i ~/.bashrc锁定防止篡改
补充建议:日志审计与误操作防护
限制只是手段,可观测性才是运维底线:
- 启用 sudo 日志:
Defaults logfile="/var/log/sudo.log"加入 sudoers,记录每次命令执行详情 - 对 rm 命令做交互增强(不影响权限策略):
在用户~/.bashrc中加alias rm='rm -i',仅对交互式 bash 生效,不影响脚本 - 禁止
rm -rf /类灾难操作:
可在/etc/sudoers中追加! /bin/rm -rf /和! /bin/rm -rf /*,虽然不能完全覆盖所有变体,但能拦截常见误写










