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

最新下载

热门教程

Linux 系统目录权限加固:关闭敏感目录的执行权

时间:2026-07-13 08:43:02 编辑:袖梨 来源:一聚教程网

直接关闭敏感目录执行权的关键是清除文件自身x权限并启用noexec挂载选项:前者阻止./script.sh类直接调用,后者从内核层禁止该分区任何文件被execve()加载执行,无论权限如何;需配合umask或默认ACL确保新文件无x位。

直接关闭敏感目录的执行权,不能只靠 chmod 去掉目录本身的 x 权限——因为目录的执行权(即 x 位)实际控制的是“能否进入该目录或访问其子项”,而非运行脚本。真正阻止脚本执行,关键在文件自身的执行位挂载层面的行为约束

关键不是“关目录的执行权”,而是阻断脚本被执行的能力

  • 目录权限中的 x 决定能否 cd 进入、能否 ls 列出内容(配合 r)、能否访问其下的文件
  • 脚本能被运行,取决于文件本身是否有 x 权限,以及所在文件系统是否允许执行

所以加固重点是两层:

  • 清掉文件的执行位:防止 ./script.sh 类直接调用
  • 启用 noexec 挂载选项:从内核层禁止该分区上任何文件被当作程序加载执行,无论权限如何

/tmp/var/www/uploads/home 等目录,推荐组合操作

  • 临时生效(测试用):

    sudo mount -o remount,noexec,nosuid,nodev /tmpsudo mount -o remount,noexec,nosuid,nodev /var/www/uploads
  • 永久生效(写入 /etc/fstab):
    找到对应挂载行(如 /tmp 对应的 UUID 或设备),在 options 字段追加 noexec,nosuid,nodev,例如:

    UUID=1234abcd /tmp ext4 defaults,noexec,nosuid,nodev 0 2

    然后重挂载:sudo mount -o remount /tmp

  • 同时清理已有脚本的执行位(防绕过):

    find /tmp -type f ( -name "*.sh" -o -name "*.py" -o -name "*.pl" ) -exec chmod a-x {} ;

注意 noexec 的实际效果边界

  • ✅ 阻止 ./a.out./deploy.sh/tmp/malware 直接执行
  • ✅ 阻止 ELF 二进制、shell 脚本、Python 编译字节码(.pyc)等被 execve() 加载
  • ❌ 不影响 python3 /tmp/exploit.py —— 因为解释器是 /usr/bin/python3(在其他挂载点,且有 x),它读取并解释源码,不触发目标文件的 exec 行为
  • ❌ 不影响 sh /tmp/script.sh —— 同理,sh 是合法执行程序,它只是把目标当文本读取

所以 noexec 是基础防线,不是万能锁;若需拦截解释器调用,得结合 SELinux 策略、rbac 或容器隔离。

配套建议:让新文件默认无执行位

  • 在应用用户环境(如 /etc/profile.d/secure.sh)中设:
    umask 027 → 新建普通文件默认 640,目录默认 750,无 x 给 group/other
  • 对上传目录设置默认 ACL:
    setfacl -d -m u::rw-,g::r--,o::--- /var/www/uploads

不复杂但容易忽略。

热门栏目