最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何通过检查系统内部文件系统权限防止越权污染
时间:2026-07-15 19:27:58 编辑:袖梨 来源:一聚教程网
最基础有效的越权污染防护是检查文件系统权限是否合理、最小化且未被滥用;需扫描SUID/SGID文件、限制敏感目录挂载选项、设置setgid与umask、启用SELinux/AppArmor并审计关键文件操作。
直接检查文件系统权限,是防止越权污染最基础也最有效的手段。关键不在于“有没有权限”,而在于“权限是否合理、是否最小化、是否被意外继承或滥用”。下面从实操角度讲清楚怎么做。
查清谁在用什么权限访问关键目录
越权污染往往始于某个服务或脚本以过高权限运行,又恰好操作了不该碰的路径。先定位风险点:
- 用 ls -ld /var/www /etc/nginx /opt/app 看关键目录的所有者和权限,确认是否为 root:root 755 或更严格(比如 750);若出现 777 或 www-data:www-data 却能写入配置目录,就是高危信号
- 用 find /usr/local/bin /opt -type f -perm -4000 -o -perm -2000 2>/dev/null 扫描 SUID/SGID 文件,这类文件一旦被篡改或利用,可直接提权执行任意命令
- 对运行中的服务,用 ps auxZ | grep httpd(带 SELinux 上下文)或 ps auxf 查看进程真实用户,确认不是以 root 身份运行 Web 应用
限制敏感路径的写入与遍历能力
很多污染不是主动写入,而是通过路径拼接、符号链接或递归操作扩散的。要主动封堵这类通道:
- 对日志、上传、缓存等可写目录,设置 noexec,nosuid,nodev 挂载选项(写入 /etc/fstab 后 mount -o remount),阻止在其中执行代码或提权程序
- 用 chattr +a /var/log/app.log 允许追加但禁止覆盖或删除,防日志被清空或注入伪造条目
- 对 Web 根目录,确保 php.ini 中 open_basedir 已启用,或 Nginx 配置中用 alias + internal 限制 PHP 脚本只能访问指定子路径
阻断跨用户/跨服务的隐式权限继承
新建文件默认继承父目录权限,但 umask 和组策略常被忽略,导致协作目录变成“谁都能改”的污染温床:
- 检查全局 umask(umask 命令),生产环境建议设为 027(文件默认 640,目录 750),避免新文件对“other”开放读取
- 对多用户共享目录(如 /srv/shared),启用 setgid 位:chmod g+s /srv/shared,确保新创建文件自动归属该组,再配合组权限精细化控制
- 禁用不必要用户的 ~/.ssh/authorized_keys 写权限(chmod 600 ~/.ssh/authorized_keys),防止攻击者通过 SSH 密钥横向污染其他账户
结合强制访问控制做最终兜底
传统 DAC 权限容易被绕过,必须叠加 MAC 机制形成纵深防御:
- 确认 SELinux 处于 enforcing 模式(getenforce),对 Web 服务目录用 semanage fcontext -a -t httpd_sys_content_t "/srv/myapp(/.*)?" 定义类型,再 restorecon -Rv /srv/myapp 生效
- 若用 AppArmor,检查 aa-status 是否加载对应 profile,并确认其限制了 file write 到非白名单路径
- 所有权限变更后,用 auditctl -w /etc/passwd -p wa -k auth_change 加审计规则,实时捕获对关键文件的写操作并记录到 /var/log/audit/audit.log