答案是必须从内核层挂载选项、文件不可变属性、进程最小权限、审计监控四层协同设防。挂载noexec,nosuid,nodev阻断写入,chattr +i锁定核心文件,systemd限制进程能力,selinux/auditd实现策略与审计。

限制进程对系统敏感目录的写权限,不能只靠“禁止某进程写”,而要从内核层行为拦截、文件系统级锁定、进程运行时约束、审计追踪四层协同发力。单一手段容易被绕过,必须分层设防。
一、用挂载选项从内核层阻断写入行为noexec,nosuid,nodev 等选项在挂载时生效,能直接让写操作在系统调用层面失败,连 root 进程也无法绕过:
- 对
/tmp、/var/www/uploads、/home等用户可写但无需执行的分区,添加noexec,nosuid,nodev:sudo mount -o remount,noexec,nosuid,nodev /tmp
- 永久生效需修改
/etc/fstab,例如:UUID=abcd1234 /tmp ext4 defaults,noexec,nosuid,nodev 0 2
- 注意:
noexec不影响python3 /tmp/script.py类解释器调用,但它能阻止./script.sh或 ELF 文件直接执行,是基础防线。
二、对关键文件加不可变属性(chattr +i)chmod 和 chown 都可被 root 覆盖,而 chattr +i 是内核级锁定:
- 锁定
/etc/shadow、/etc/passwd、/etc/group等核心文件:sudo chattr +i /etc/shadow /etc/passwd /etc/group
- 验证是否生效:
lsattr /etc/shadow应显示含i标志(如----i---------e---) - 注意:启用后
passwd、usermod等命令会失败;运维前先chattr -i解锁,操作完立即重锁。
三、通过进程运行身份与能力最小化收窄写权范围
不让进程拥有写敏感目录的能力,比事后拦截更有效:
- 为守护进程创建专用低权限用户(如
nginx、redis),并在 systemd unit 中强制指定:[Service] User=nginx Group=nginx ProtectSystem=strict # /usr、/boot、/etc 只读 ProtectHome=true # /home、/root、/run/user 不可见 ReadWritePaths=/var/log/nginx /var/cache/nginx
- 移除危险 capability:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_MODULE CAP_AUDIT_WRITE NoNewPrivileges=true
- 启用
PrivateTmp=true,避免进程通过/tmp间接污染全局路径。
四、用 SELinux 或 auditd 实现策略管控与行为监控
权限是门锁,审计是摄像头,两者缺一不可:
- 确保 SELinux 处于
Enforcing模式,并为敏感路径打上正确类型标签:ls -Z /etc/shadow # 应为 system_u:object_r:shadow_t:s0 sudo semanage fcontext -a -t shadow_t "/etc/shadow" sudo restorecon -v /etc/shadow
- 用
auditd记录所有对敏感目录的写操作:sudo auditctl -w /etc/shadow -p wa -k shadow_write sudo auditctl -w /etc/passwd -p wa -k passwd_write
- 日志查证:
ausearch -k shadow_write | aureport -f -i
不复杂但容易忽略











