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

20

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

Sono umount e "espelli" diversi in qualche modo che richiede più sicurezza per umount dal terminale?

Nota Sto utilizzando OS X 10.8.2

    
posta KennyPeanuts 05.02.2013 - 18:46
fonte

1 risposta

33

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

La logica dietro è 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 root o un utente con privilegi autorizzati a eseguirlo.

Questo ha molto senso quando UNIX viene usato come sistema operativo server, ma un SO desktop basato su UNIX (per 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 diskutil uomo per maggiori informazioni) funziona in questo modo. Ad esempio, posso aprire Terminal ed eseguire correttamente:

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

mentre umount fallisce:

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

Che cos'è il Finder o diskutil che fa diversamente? Dietro le quinte, inviano una richiesta a un demone chiamato com.apple.SecurityServer (vedi pagina man per maggiori informazioni), che concede 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'autenticazione aggiuntiva. (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 diskutil usa 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'altra parte, è solo collegato 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.dylib utilizza diverse altre librerie, ma non è collegato a nessun framework.)

    
risposta data 06.02.2013 - 15:09
fonte

Leggi altre domande sui tag