我想知道在 中设置 mountnodev
选项的效果。/
/etc/fstab
据我了解,它nodev
可以防止对特殊节点的解释,因此可以防止流氓用户或攻击者安装和使用自己的设备节点来对系统造成严重破坏。
我的第一个想法是,挂载/
会nodev
变得/dev
完全无用,并且会阻止系统正常启动,因为没有设备(包括挂载在/home
和上的分区/usr
)可以使用。
所以,想象一下当我在 Ubuntu 安装和所有东西上测试它时我的惊讶出现了正常工作。/dev/zero
并/dev/null
做了他们应该做的事。我没有其他可以做任何事情的设备节点,例如套接字,但我不知道如何处理它们。
任何人都可以解释发生了什么以及为什么安装继续有效?
系统是否隐式忽略诸如安装
/
之类的愚蠢事情nodev
?就此而言,不同发行版或内核的处理是否一致?回到最初的问题:实际上是否存在我未能观察/触发的(不良)影响?
答案1
如果您发出mount
命令(或 cat /etc/mtab),您将看到 /dev 是它自己的文件系统,与 / 分开:
... /dev 上的 udev 类型 devtmpfs (rw,mode=0755) ...
在我的驱动器上,我的根文件系统上似乎没有任何设备文件。我用以下方式寻找它们:
sudo find / -xdev -type b -o -type c
因此,使用 nodev 挂载此文件系统不会产生明显的影响。
答案2
在init挂载根文件系统之后,挂载/dev/文件系统之前,/文件系统上包含隐藏的/dev/目录,其中包含以下文件:
crw-rw-rw- 1 root root 5, 1 Nov 9 20:27 console
lrwxrwxrwx 1 root root 13 Nov 9 20:27 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 Nov 9 20:27 full
crw-rw-rw- 1 root root 1, 3 Nov 9 20:27 null
crw-rw-rw- 1 root root 5, 2 Nov 9 20:27 ptmx
drwxr-xr-x 2 root root 4096 Nov 9 20:27 pts
crw-rw-rw- 1 root root 1, 8 Nov 9 20:27 random
drwxr-xr-x 2 root root 4096 Nov 9 20:27 shm
lrwxrwxrwx 1 root root 15 Nov 9 20:27 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Nov 9 20:27 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Nov 9 20:27 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root root 5, 0 Nov 9 20:27 tty
crw-rw-rw- 1 root root 1, 9 Nov 9 20:27 urandom
crw-rw-rw- 1 root root 1, 5 Nov 9 20:27 zero
在此时间范围内任何写入这些设备的尝试都会失败。这是一个非常好的问题,因为我不知道是否有任何事情实际上会有所作为。如果以后发生不好的事情,你的控制台可能会被搞砸。您可能会收到一些垃圾邮件。有些东西可能没有熵。
答案3
好吧,我认为你对这些东西如何协同工作的看法是错误的。安装继续工作,因为 nodev 属性的含义是将消息发送到不会将受管分区上任何新创建的设备作为设备威胁。
/dev 目录根据以下内容发现设备乌德夫守护进程。它如何表示 dev 中的设备的规则可以在 /lib/udev/rules.d 中找到,因为每个文件都有一个带有 .rules 的后缀。