Perché OS X richiede i privilegi di amministratore per smontare un'unità dal terminale usando `umount` ma non quando si usa Finder?


21

Chiunque può smontare un'unità USB dal Finder facendo clic sull'icona "espelli" accanto ad essa. Tuttavia, solo un utente con privilegi di amministratore può smontare un'unità dal terminale utilizzando umount.

Sono umounte "espulsione" diverso in qualche modo che richiede più sicurezza per umountdal terminale?

Nota Sto eseguendo OS X 10.8.2

Risposte:


34

umountè un comando UNIX che aderisce alla prospettiva UNIX tradizionale secondo cui smontare un filesystem è un'attività di amministrazione del sistema .

La logica alla base è che smontare un filesystem, se mal pianificato o eseguito, potrebbe essere dirompente, persino distruttivo, specialmente su un sistema multiutente. Pertanto, gli utenti regolari sono protetti da questo comando potenzialmente pericoloso e solo l'utente root o un utente privilegiato può eseguirlo.

Ciò ha molto senso quando UNIX viene utilizzato come sistema operativo server, ma un sistema operativo desktop basato su UNIX (ad esempio, OS X o Ubuntu ) ha altre esigenze: qualsiasi utente dovrebbe essere in grado di smontare unità flash, hard disk rimovibili, ecc. .

Il Finder e diskutil(vedi man diskutil per maggiori informazioni) funzionano in questo modo. Ad esempio, posso aprire Terminal ed eseguire correttamente:

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

mentre umountfallisce:

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

Cosa sta diskutilfacendo il Finder in modo diverso? Dietro le quinte, inviano una richiesta a un demone chiamato com.apple.SecurityServer (vedere la pagina man per ulteriori informazioni), che garantisce il diritto di smontare il filesystem:

$ 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)

Ciò consente a qualsiasi utente di smontare un'unità senza richiedere un'ulteriore autenticazione. (Ubuntu ha una filosofia simile. Se sei interessato, dai un'occhiata a questa risposta su AskUbuntu.)

Per supportare il comportamento spiegato sopra il Finder e diskutilutilizzare diversi framework 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, dall'altro lato, è collegato solo a questa libreria dinamica:

$ 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.dylibutilizza diverse altre librerie, ma non è collegato a nessun framework.)


1
Risposta fantastica! Grazie. Sono venuto su Mac da Linux, quindi non lo sapevo diskutil. Questa è una buona conoscenza da avere.
DQdlM,

Grazie, sono felice di poterti aiutare a fare luce sulle differenze tra umounte diskutil/ Finder.
Jaume
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.