在没有单独分区的情况下制作 /home /tmp noexec nodev

gor*_*uad 6 security linux mount quota

我需要为根文件系统的某些部分更改一些挂载选项,例如 /tmp /var 和 /home(添加 nodev、nosuid 和配额),但是我无法创建单独的分区,而且我没有足够的 RAM将 /tmp 挂载为 tmpfs。我试过 mount -o bind,noexec,nodev,nosuid /tmp /tmp,但它似乎不起作用,因为之后我仍然可以从 /tmp exec 文件并在其上进行设备点头。有没有其他方法可以做到这一点?

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文章中的更多信息。在较旧的内核中,它不起作用——绑定挂载点始终与底层文件系统具有相同的挂载选项。