Comprendre l'option de montage nodev et son utilisation avec les lecteurs flash USB

10

La page de manuel de mount (8) OS X décrit l' nodevoption:

N'interprétez pas les caractères et ne bloquez pas les périphériques spéciaux sur le système de fichiers. Cette option est utile pour un serveur doté de systèmes de fichiers contenant des périphériques spéciaux pour des architectures autres que la sienne.

Rien que ça, je ne comprends pas bien… 

… Pour moi, la partie la plus importante de cette question - qui peut m'aider à comprendre l'option - est:

Pourquoi les lecteurs flash USB sont-ils montés avec l'option nodev?

Exemple:

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)

Dans cet exemple, les quatre volumes avec nodevsont:

  1. expérience - sur une clé USB
  2. LaCie Little Big Disk - sur un disque dur sur FireWire 400, ce volume comprend une Time MachineBackups.backupdb
  3. Wuala - L'intégration du système de fichiers utilise FUSE pour OS X
  4. Sauvegardes Time Machine

En gros, je peux comprendre que 2, 3 et 4 sont spéciaux. Pourtant:

  • Je ne comprends pas la pertinence d' nodevun lecteur flash USB.

Autres références

Montage automatique de disques USB (fonctionnement) - Unix et Linux

Contexte

Souhaitant comprendre pourquoi Time Machine dans Lion et Mountain Lion ne peut pas sauvegarder à partir de lecteurs flash USB. Mais cette question concerne plus généralement l' nodevoption.

Graham Perrin
la source

Réponses:

17

L' nodevoption indique au système d'interdire la création et l'accès aux nœuds de périphérique - le type de fichiers spéciaux que vous avez /dev.

Par exemple, /dev/disk0vous donne un accès direct à toutes les données stockées sur le premier disque sans avoir à passer par les niveaux supérieurs tels que le système de fichiers ou le code de vérification des autorisations - la seule autorisation vérifiée est de savoir si vous êtes autorisé à ouvrir ce nœud de périphérique spécifique pour lire ou écrire.

Cela signifie que s'il /dev/disk0était rendu lisible dans le monde entier, n'importe quel utilisateur pouvait facilement lire les fichiers de tout autre utilisateur sur le même disque (s'ils n'étaient pas chiffrés), en lisant simplement à partir de /dev/sda.

Selon le système d'exploitation, /devaura généralement de nombreux autres types de nœuds de périphérique, y compris /dev/memqui donnent accès à l'intégralité de la mémoire (physique et / ou virtuelle) du système - mais pas avec les systèmes exécutant un noyau compilé avec CONFIG_STRICT_DEVMEM(sauf root ).

Pour cette raison, seul root est généralement autorisé à créer des nœuds de périphérique (pour les autres utilisateurs, mknodrenvoie "Opération non autorisée"), et tous les nœuds de périphérique existants sont conservés dans un seul emplacement ( /dev) avec des autorisations de fichier strictes qui ne donnent pas aux utilisateurs normaux accès en lecture ou en écriture. (À quelques exceptions près). Cependant, dans les temps modernes, n'importe qui pouvait facilement contourner la restriction root uniquement en allant sur un autre ordinateur auquel ils ont déjà accès root, en l'utilisant pour créer des nœuds de périphérique sur un lecteur USB, en définissant des autorisations très ouvertes, et en connectant ce lecteur à votre ordinateur.

C'est ce que l' nodevoption empêche - même si quelqu'un crée un nœud de périphérique lisible / inscriptible sur son propre lecteur, le système d'exploitation refusera de faire quoi que ce soit avec lui en raison de l' nodevoption utilisée lors du montage.


Les mêmes raisons s'appliquent à l' nosuidoption, qui indique au système d'exploitation d'ignorer le bit setuid qui entraînerait normalement l'exécution d'un programme avec des privilèges différents de ceux de l'utilisateur. Par exemple, /usr/bin/sudoa le bit setuid et appartient à root, donc il aura toujours les mêmes privilèges que root.

user1686
la source
C'est une excellente réponse - merci. Si je comprends bien les choses, une autre question se pose… dans le forum de support ZEVO: Pourquoi les montures ZEVO ZFS sans l'option nodev? (Pour le moment, je n'ai pas de disque dur USB de rechange à donner à HFS Plus seul.)
Graham Perrin
@GrahamPerrin: Les options nodevdésactivées par défaut doivent être définies explicitement lors du montage. Le monteur automatique de disque amovible OS X les définit, les programmes équivalents sous Linux le font aussi, mais ils ne seront pas définis lors de l'exécution à mountpartir du terminal, sauf si vous les ajoutez manuellement -o nodev. (Cela ne nuit pas à la sécurité car mountlui-même nécessite des privilèges root.) Cela dépend donc de la façon dont votre disque ZEVO ZFS est monté.
user1686
Avec ZEVO Community Edition 1.1.1, l'importation est dynamique (automatique) et il semble que la valeur par défaut soit de monter automatiquement sans nodev. Ni l'importation ni le montage ZFS ne nécessitent d'authentification… voyons comment les choses se déroulent dans la zone ZEVO.
Graham Perrin
@grawity: Faux, l' nodevoption indique de rejeter les lectures et les écritures sur les fichiers de l'appareil afin que ceux qui existent soient également concernés. Vous pouvez toujours les créer.
user2284570