了解安装选项nodev及其在USB闪存驱动器中的使用


10

mount(8)OS X手册页介绍了以下nodev选项:

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

仅凭这一点,我还无法完全理解…… 

…对我来说,这个问题最重要的部分-可能有助于我理解该选择-是:

为什么USB闪存驱动器装有nodev选项?

例:

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)

在该示例中,具有的四个卷nodev是:

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

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

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

其他参考

自动挂载USB磁盘(工作原理) – Unix和Linux

背景

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

Answers:


17

nodev选项告诉系统禁止创建和访问设备节点,即您所拥有的特殊文件的类型/dev

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

这意味着,如果/dev/disk0使用户可读,那么只要从读取,任何用户都可以轻松读取同一磁盘上的其他用户文件(如果未加密)/dev/sda

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

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

这是该nodev选件无法避免的-即使有人在自己的驱动器上创建了一个世界可读/世界可写的设备节点,但由于nodev安装时使用了该选件,操作系统将拒绝对其进行任何操作。


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


这是一个很好的答案–谢谢。如果我理解正确,则会出现另一个问题……在ZEVO支持论坛中:为什么ZEVO ZFS挂载没有nodev选项?(目前我没有多余的USB硬盘驱动器可以单独提供给HFS Plus。)
Graham Perrin 2013年

@GrahamPerrin:这些选项nodev默认情况下是禁用的,并且在安装时必须明确设置。OS X可移动磁盘自动安装程序会设置它们,Linux上的等效程序也可以设置它们,但是mount从终端运行时将不会设置它们,除非您手动添加-o nodev(这不会损害安全性,因为mount它本身需要root权限。)因此,这取决于ZEVO ZFS磁盘的安装方式。
user1686

在ZEVO Community Edition 1.1.1中,导入是动态的(自动),并且似乎默认情况下是自动安装而没有nodev。导入和ZFS挂载都不需要身份验证……让我们看看ZEVO区域中的情况如何。
Graham Perrin 2013年

@grawity:错误,该nodev选项告诉拒绝对设备文件的读写,因此也要关注现有文件。您仍然可以创建它们。
user2284570
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.