先用df -h /tmp或findmnt /tmp确认是否为独立挂载点,若“mounted on”显示/或未出现在挂载列表,则非独立挂载,noexec无法生效;必须对真实设备或挂载点执行remount。

怎么确认目标路径是否为独立挂载点
直接对 /tmp 或 /var/www/uploads 执行 mount -o remount,noexec 报错“not mounted”,大概率是因为它只是根分区下的子目录,而非独立挂载的文件系统。必须先验证真实挂载关系:
- 运行
df -h /tmp,看输出中 “Mounted on” 列是否等于/tmp;如果不是(比如显示/),说明它没被单独挂载,noexec无法生效 - 用
findmnt /tmp或mount | grep " /tmp "查是否在挂载列表里出现完整条目 - 常见易误判路径:
/home(常和/同设备)、/var/log(多属根分区)、/opt(除非手动分过区)
临时启用 noexec,nosuid,nodev 的正确命令
临时加限制不改配置、不重启,但必须作用于设备本身,而非任意子目录:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 对 tmpfs 类型(如
/tmp或/dev/shm):sudo mount -o remount,noexec,nosuid,nodev /tmp - 对物理分区(如
/mnt/data):sudo mount -o remount,noexec,nosuid,nodev /dev/sdb1或sudo mount -o remount,noexec,nosuid,nodev /mnt/data(后者要求该路径是挂载点) - 若要同时设只读:
sudo mount -o remount,ro,noexec,nosuid,nodev /var/www/uploads - 回退命令(恢复执行能力):
sudo mount -o remount,exec,suid,dev /tmp
永久生效:/etc/fstab 中怎么写才不出错
写错格式会导致 mount -a 失败,甚至系统启动卡在挂载阶段。关键不是加不加 noexec,而是怎么覆盖默认行为:
-
defaults默认含exec和suid,所以必须显式写出noexec,nosuid,nodev来覆盖,不能只写noexec - 正确示例(tmpfs):
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0 - 正确示例(UUID 分区):
UUID=abcd1234 /mnt/data ext4 defaults,noexec,nosuid,nodev 0 2 - 修改后务必执行
sudo mount -a测试语法;无输出即通过,有报错需立即修正 - 别碰
/、/usr、/bin这些路径——加了noexec后mount、ls等命令自身都无法运行
noexec 生效但脚本还能跑?这是正常现象
noexec 拦的是 ./script.sh 这种直接执行,不是拦解释器调用。这点容易被当成“配置失败”而反复折腾:
- 以下会失败(被内核拦截):
/tmp/test.sh、/mnt/usb/malware.bin - 以下仍能成功(不受影响):
bash /tmp/test.sh、python3 /var/www/uploads/exploit.py - 所以
noexec必须配合权限清理:find /var/www/uploads -type f -name "*.sh" -exec chmod a-x {} \; - 更彻底的做法是加
ro(只读),但得确保业务真不需要写入
noexec 就万事大吉,结果攻击者照旧用 python 跑起 payload。防护闭环得靠 noexec + nosuid + nodev + 权限收束四者齐上。










