一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何通过检查系统内部文件系统权限防止越权污染

时间:2026-07-15 19:27:58 编辑:袖梨 来源:一聚教程网

最基础有效的越权污染防护是检查文件系统权限是否合理、最小化且未被滥用;需扫描SUID/SGID文件、限制敏感目录挂载选项、设置setgid与umask、启用SELinux/AppArmor并审计关键文件操作。

直接检查文件系统权限,是防止越权污染最基础也最有效的手段。关键不在于“有没有权限”,而在于“权限是否合理、是否最小化、是否被意外继承或滥用”。下面从实操角度讲清楚怎么做。

查清谁在用什么权限访问关键目录

越权污染往往始于某个服务或脚本以过高权限运行,又恰好操作了不该碰的路径。先定位风险点:

  • ls -ld /var/www /etc/nginx /opt/app 看关键目录的所有者和权限,确认是否为 root:root 755 或更严格(比如 750);若出现 777www-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/fstabmount -o remount),阻止在其中执行代码或提权程序
  • chattr +a /var/log/app.log 允许追加但禁止覆盖或删除,防日志被清空或注入伪造条目
  • 对 Web 根目录,确保 php.iniopen_basedir 已启用,或 Nginx 配置中用 alias + internal 限制 PHP 脚本只能访问指定子路径

阻断跨用户/跨服务的隐式权限继承

新建文件默认继承父目录权限,但 umask 和组策略常被忽略,导致协作目录变成“谁都能改”的污染温床:

  • 检查全局 umaskumask 命令),生产环境建议设为 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

热门栏目