关键是用noexec挂载选项从内核层阻断执行路径,配合nosuid、nodev及权限管控:临时用sudo mount -o remount,noexec,nosuid,nodev /path,永久改/etc/fstab添加defaults,noexec,nosuid,nodev,并清理x位、设umask或默认acl。

直接禁用特定目录下二进制程序的执行能力,关键不是改文件权限本身,而是切断“运行”这个动作发生的路径。单纯 chmod 去掉 x 位只能防直接调用(如 ./a.out),但无法阻止通过解释器或系统调用间接执行;真正有效的做法是组合挂载选项与文件权限控制。
用 noexec 挂载选项阻断所有执行行为
noexec 是内核级开关,挂载时启用后,该分区上任何文件(无论权限如何)都无法被当作程序直接执行——包括二进制、脚本、甚至 ELF 格式 payload。它不依赖文件属性,绕过 chmod 的局限性。
- 临时生效:sudo mount -o remount,noexec /path/to/dir
- 永久生效:编辑 /etc/fstab,在对应行 options 字段添加 noexec(如 defaults,noexec),再执行 sudo mount -a
- 验证是否启用:运行 findmnt -o TARGET,OPTIONS /path/to/dir,确认输出含 noexec
配合 nosuid 防止提权类二进制绕过
即使 noexec 已启用,若目录中存在带 SUID 的程序(如复制来的 /bin/bash),攻击者仍可能利用其他漏洞触发提权。nosuid 能让 SUID/SGID 位彻底失效:普通用户执行它时,进程 EUID 不会切换,始终以当前用户身份运行。
Python Linux版 为 Python.org 官方提供的 Python 3.14.6 Linux/Unix 源码包,适合在Linux/Unix环境中安装、运行 Python 代码并学习函数、模块和脚本开发。
- 与 noexec 一起使用更稳妥,常见安全组合为 defaults,noexec,nosuid,nodev
- 切记不要对系统根分区(/)、/usr、/bin 等路径启用,否则会导致基础命令不可用
- 适用场景明确:/tmp、/var/tmp、用户上传目录、容器 bind mount 路径、数据盘挂载点
清理已有文件的执行权限并约束新建行为
挂载选项解决“运行”问题,但需同步处理存量文件和未来新增文件的权限,避免误配导致策略形同虚设。
- 批量清除:find /path/to/dir -type f -executable -exec chmod a-x {} \;
- 防止新文件带 x 位:设置默认 umask(如 022 或 027),或对目录配置默认 ACL:setfacl -d -m u::rw-,g::r--,o::r-- /path/to/dir
- CI/CD 或构建阶段加入检查:find . -type f -perm /a+x -print,发现即阻断发布
补充运行时监控与校验机制
权限可能被误操作或恶意篡改,需主动检测异常状态并及时响应。
- 定时扫描:用 find /path/to/dir -type f -perm -a+x -print 检出带执行位的文件,触发告警
- 启动校验:在服务启动脚本中加入判断逻辑,例如 if [ $(stat -c "%a" /path/to/binary | cut -c1) = "7" ]; then exit 1; fi
- 结合 SELinux/AppArmor:为该目录下程序打标签并限制 execmem、ptrace 等危险操作,形成纵深防御










