Pourquoi OS X nécessite-t-il des privilèges d'administrateur pour démonter un lecteur du terminal à l'aide de `umount` mais pas lors de l'utilisation du Finder?

21

Tout le monde peut démonter un lecteur USB du Finder en cliquant sur l'icône "éjecter" à côté de lui. Cependant, seul un utilisateur disposant de privilèges administratifs peut démonter un lecteur du terminal à l'aide umount.

Est-ce umountque «éjecter» est différent d'une manière qui nécessite plus de sécurité umountdepuis le terminal?

Remarque J'utilise OS X 10.8.2

DQdlM
la source

Réponses:

34

umountest une commande UNIX qui adhère à la perspective UNIX traditionnelle selon laquelle le démontage d'un système de fichiers est une tâche d'administration système .

La raison derrière cela est que le démontage d'un système de fichiers, s'il est mal planifié ou exécuté, pourrait être perturbateur, voire destructeur, en particulier sur un système multi-utilisateur. Les utilisateurs réguliers sont donc protégés de cette commande potentiellement dangereuse et seul root ou un utilisateur privilégié est autorisé à l'exécuter.

Cela a beaucoup de sens lorsque UNIX est utilisé comme système d'exploitation de serveur, mais un système d'exploitation de bureau UNIX (par exemple, OS X ou Ubuntu ) a d'autres besoins: tout utilisateur devrait pouvoir démonter des lecteurs flash, des disques durs amovibles, etc. .

Le Finder et diskutil(voir man diskutil pour plus d'informations) fonctionnent de cette façon. Par exemple, je peux ouvrir Terminal et exécuter avec succès:

$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted

alors qu'il umountéchoue:

$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted

Qu'est-ce que le Finder ou diskutilfait différemment? Dans les coulisses, ils envoient une requête à un démon appelé com.apple.SecurityServer (voir la page de manuel pour plus d'informations), qui accorde le droit de démonter le système de fichiers:

$ tail -f /var/log/system.log
Feb  6 16:57:37 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/System/Library/CoreServices/Finder.app' [171] for authorization created by '/System/Library/CoreServices/Finder.app' [171] (100013,0)
Feb  6 16:57:37 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskarbitrationd' [18] for authorization created by '/System/Library/CoreServices/Finder.app' [171] (100002,0)
Feb  6 17:01:46 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskutil' [646] for authorization created by '/usr/sbin/diskutil' [646] (100013,0)
Feb  6 17:01:46 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskarbitrationd' [18] for authorization created by '/usr/sbin/diskutil' [646] (100002,0)

Cela permet à tout utilisateur de démonter un lecteur sans nécessiter d'authentification supplémentaire. (Ubuntu a une philosophie similaire. Si vous êtes intéressé, jetez un œil à cette réponse sur AskUbuntu.)

Pour prendre en charge le comportement expliqué ci-dessus le Finder et diskutilutiliser plusieurs frameworks Apple:

$ otool -L $(which diskutil) | grep Disk
/System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
$ otool -L /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder | grep Disk
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/DiskImages (compatibility version 1.0.8, current version 344.0.0)
/System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement (compatibility version 1.0.0, current version 1.0.0)

umount, de l'autre côté, n'est lié qu'à cette bibliothèque dynamique:

$ otool -L $(which umount) 
/sbin/umount:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

( /usr/lib/libSystem.B.dylibutilise plusieurs autres bibliothèques, mais n'est lié à aucun framework.)

jaume
la source
1
Réponse géniale! Merci. Je suis venu sur mac de linux donc je ne savais pas diskutil. C'est une bonne connaissance à avoir.
DQdlM
Merci, je suis heureux d'avoir pu aider à faire la lumière sur les différences entre umountet diskutil/ Finder.
jaume