kup*_*son 11
您可以使用 bind 和 noexec,nodev,nosuid 选项重新挂载 /tmp,但不能一步完成。由于某些 linux 内核 VFS 层限制,您必须首先绑定挂载它,然后使用适当的选项重新挂载。
root@utemp:/# /tmp/test.sh
uid=0(root) gid=0(root) groups=0(root)
root@utemp:/# mount -o bind,noexec /tmp /tmp
root@utemp:/# ./tmp/test.sh
uid=0(root) gid=0(root) groups=0(root)
root@utemp:/# umount /tmp
root@utemp:/# mount -o bind /tmp /tmp
root@utemp:/# mount -o remount,noexec /tmp
root@utemp:/# ./tmp/test.sh
bash: ./tmp/test.sh: Permission denied
root@utemp:/# umount /tmp
Run Code Online (Sandbox Code Playgroud)
这很不方便——你必须在系统引导期间调用一些脚本,每个目录有两个挂载命令,而不是 /etc/fstab 中的一行。
此LWN文章中的更多信息。在较旧的内核中,它不起作用——绑定挂载点始终与底层文件系统具有相同的挂载选项。