互联网上的许多指南建议设置 nosuid和noexec 选项,例如在 /tmp 挂载点上。但是 noexec 不就意味着 nosuid 吗?无法执行的东西就不能使用suid 位,对吗?
答案1
感谢 LJKims 的链接,它帮助我回答我自己的问题。我忘记了也可以为目录设置 suid/sgid 位。
根据GNU coreutils 文档在 suid 目录中创建的文件和目录继承该目录的所有者(sgid 目录显然继承组)。所以,如果你想避免这种行为,在挂载点上设置 noexec 和 nosuid 是有意义的。
为了完整起见:在我对当前 Debian 的测试中,目录上的 suid 位不起作用,但只有 sgid 位使文件/目录继承目录组。
# mkdir /test
# chmod 6777 /test
# ls -ld /test
drwsrwsrwx 2 root root 4096 Jun 10 18:50 /test
$ mkdir /test/foo; touch /test/bar
$ ls -l /test
-rw-r--r-- 1 user root 0 Jun 10 18:51 bar
drwxr-sr-x 2 user root 4096 Jun 10 18:51 foo
编辑: 为了完整起见:nosuid 挂载选项不会影响 sgid 目录(至少在 Debian 8 上)。
# mount -o loop,nosuid test.img /test
# mkdir /test/foo
# chmod 2777 /test/foo
$ touch /test/foo/bar; mkdir /test/foo/baz
$ ls -l /test/foo
-rw-r--r-- 1 user root 0 Jun 12 09:46 bar
drwxr-sr-x 2 user root 4096 Jun 12 09:46 baz