使 /home /tmp noexec nodev 不带单独的分区

使 /home /tmp noexec nodev 不带单独的分区

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

答案1

您可以使用 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

这很不方便——您必须在系统启动期间调用某个脚本,其中包含每个目录两个挂载命令,而不是在 /etc/fstab 中只包含一行。

更多信息请参见此处左心室收缩末期文章。在较旧的内核中它不起作用——绑定挂载点始终具有与底层文件系统相同的挂载选项。

相关内容