了解挂载选项 nodev 及其与 USB 闪存驱动器的使用

Gra*_*rin 12 mount usb-flash-drive

mount(8) OS X 手册页描述了该nodev选项:

不要解释文件系统上的字符或块特殊设备。此选项对于具有文件系统的服务器非常有用,该文件系统包含用于其自身以外的体系结构的特殊设备。

仅此一点,我不完全理解...... 

……对我来说,这个问题更重要的部分——这可能有助于我理解这个选项——是:

为什么使用 nodev 选项安装 USB 闪存驱动器?

例子:

sh-3.2$ mount
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk0s2 on /Volumes/swap (hfs, local, journaled)
/dev/disk0s4 on /Volumes/spare (hfs, local, journaled)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
localhost:/Eiu9XWYlwq4E8x9l_bQTiX on /Volumes/MobileBackups (mtmfs, nosuid, read-only, nobrowse)
/dev/disk3 on /Volumes/gjp22 (zfs, local, journaled, noatime)
/dev/disk3s1 on /opt (zfs, local, journaled, noatime)
/dev/disk6 on /Volumes/zhandy (zfs, local, journaled, noatime)
/dev/disk8s1 on /Volumes/experiment (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk10 on /Volumes/tall (zfs, local, journaled, noatime)
/dev/disk11s2 on /Volumes/LaCie Little Big Disk (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk12 on /Volumes/twoz (zfs, local, journaled, noatime)
Wuala on /Volumes/WualaDrive (osxfusefs, local, nodev, nosuid, synchronous, mounted by gjp22)
/dev/disk14s2 on /Volumes/Time Machine Backups (hfs, local, nodev, nosuid, journaled)
Run Code Online (Sandbox Code Playgroud)

在该示例中,四卷nodev分别是:

  1. 实验– 在 USB 闪存驱动器上
  2. LaCie Little Big Disk – 在 FireWire 400 的硬盘驱动器上,此卷包含 Time MachineBackups.backupdb
  3. Wuala – 文件系统集成使用 FUSE for OS X
  4. 时间机器备份

粗略地说,我可以理解2、3和4是特殊的。然而:

  • 我无法理解与nodevUSB 闪存驱动器的相关性。

其他参考

自动挂载 USB 磁盘(它是如何工作的) ——Unix 和 Linux

背景

希望了解为什么 Lion 和 Mountain Lion 中的 Time Machine 无法从 USB 闪存驱动器备份。但这个问题更普遍的是关于nodev选项。

use*_*686 21

nodev选项告诉系统不允许创建和访问设备节点——您在/dev.

例如,/dev/disk0让您可以直接访问存储在第一个磁盘上的所有数据,而无需通过更高级别(例如文件系统或权限检查代码)——唯一检查的权限是您是否被允许打开该特定设备节点用于阅读或写作。

这意味着,如果/dev/disk0使其成为全球可读的,任何用户都可以轻松地读取同一磁盘上任何其他用户的文件(如果它们未加密),只需从/dev/sda.

根据操作系统的不同,/dev通常会有许多其他类型的设备节点,包括/dev/mem可以访问系统的整个(物理和/或虚拟)内存的设备——尽管运行内核编译的系统CONFIG_STRICT_DEVMEM除外(除非是root)。

为此,通常只允许root创建设备节点(对于其他用户,mknod将返回“不允许操作”),并且所有现有设备节点都保存在一个位置 ( /dev) 中,并具有不授予普通用户的严格文件权限读或写访问。(有一些例外。) 然而,在现代,任何人都可以轻松绕过仅限 root 的限制,方法是转到另一台他们已经拥有 root 访问权限的计算机,使用它在 USB 驱动器上创建一些设备节点,设置非常开放的权限,并将该驱动器连接到您的计算机。

这就是该nodev选项所阻止的——即使有人在他们自己的驱动器上创建了一个世界可读/世界可写的设备节点,操作系统也会因为nodev挂载时使用的选项而拒绝对它做任何事情。


相同的原因适用于该nosuid选项,它告诉操作系统忽略setuid位,这通常会导致程序以与用户不同的权限执行。例如,/usr/bin/sudo具有setuid位并由 root 拥有,因此它始终具有与 root 相同的权限。