21 votes

Pourquoi OS X nécessite-t-il des privilèges d'administrateur pour démonter un lecteur à partir du terminal en utilisant `umount` mais pas en utilisant le Finder ?

Tout le monde peut démonter un lecteur usb à partir du Finder en cliquant sur l'icône "éjecter" située à côté. Cependant, seul un utilisateur disposant de privilèges d'administration peut démonter un lecteur à partir du terminal en utilisant la fonction umount .

Sont umount et "éjecter" différemment d'une manière qui exige plus de sécurité pour umount du terminal ?

Remarque : j'utilise OS X 10.8.2.

33voto

jaume Points 13186

umount est une commande UNIX qui adhère au point de vue traditionnel d'UNIX selon lequel le démontage d'un système de fichiers est une commande de type tâche d'administration du système .

La raison en est que le démontage d'un système de fichiers, s'il est mal planifié ou exécuté, peut être perturbant, voire destructeur, en particulier sur un système multi-utilisateurs. Ainsi, les utilisateurs réguliers sont protégés de cette commande potentiellement dangereuse et seuls les utilisateurs de Racine ou un utilisateur privilégié est autorisé à l'exécuter.

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

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

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

alors que umount échoue :

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

Qu'est-ce que le Finder ou diskutil faire différemment ? Dans les coulisses, ils envoient une requête à une démon appelé com.apple.SecurityServer (voir 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 à n'importe quel 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 coup d'œil à cette réponse sur AskUbuntu).

Pour prendre en charge le comportement expliqué ci-dessus, le Finder et le diskutil utilisent plusieurs cadres 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 d'autre part, est uniquement liée à 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.dylib utilise plusieurs autres bibliothèques, mais n'est lié à aucun framework).

1 votes

Réponse géniale ! Merci. Je suis venu à Mac depuis Linux, donc je ne connaissais pas les diskutil . C'est une bonne connaissance à avoir.

0 votes

Merci, je suis heureux d'avoir pu contribuer à éclairer les différences entre umount et diskutil /Finder.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X