¿Por qué OS X requiere privilegios de administrador para desmontar una unidad del terminal usando `umount` pero no cuando se usa Finder?

21

Cualquiera puede desmontar una unidad usb del Finder haciendo clic en el icono "expulsar" que se encuentra junto a él. Sin embargo, solo un usuario con privilegios administrativos puede desmontar una unidad del terminal usando umount.

¿Son umounty "expulsar" diferentes de alguna manera que requiere más seguridad para umountel terminal?

Tenga en cuenta que estoy ejecutando OS X 10.8.2

DQdlM
fuente

Respuestas:

34

umountes un comando de UNIX que se adhiere a la perspectiva tradicional de UNIX de que desmontar un sistema de archivos es una tarea de administración del sistema .

La razón detrás de esto es que desmontar un sistema de archivos, si está mal planeado o ejecutado, podría ser disruptivo, incluso destructivo, especialmente en un sistema multiusuario. Por lo tanto, los usuarios normales están protegidos de este comando potencialmente peligroso y solo los usuarios root o privilegiados pueden ejecutarlo.

Esto tiene mucho sentido cuando UNIX se usa como un sistema operativo de servidor, pero un sistema operativo de escritorio basado en UNIX (por ejemplo, OS X o Ubuntu ) tiene otras necesidades: cualquier usuario debe poder desmontar unidades flash, discos duros extraíbles, etc. .

El Finder y diskutil(consulte man diskutil para obtener más información) funcionan de esta manera. Por ejemplo, puedo abrir Terminal y ejecutar con éxito:

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

mientras que umountfalla:

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

¿Qué es el Finder o qué está diskutilhaciendo de manera diferente? Detrás de escena, envían una solicitud a un demonio llamado com.apple.SecurityServer (consulte la página del manual para obtener más información), que le otorga el derecho de desmontar el sistema de archivos:

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

Esto permite a cualquier usuario desmontar una unidad sin requerir autenticación adicional. (Ubuntu tiene una filosofía similar. Si está interesado, eche un vistazo a esta respuesta en AskUbuntu).

Para admitir el comportamiento explicado anteriormente en el Finder y diskutilusar varios marcos de 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, por otro lado, solo está vinculado a esta biblioteca dinámica:

$ 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.dylibusa varias otras bibliotecas, pero no está vinculado a ningún marco).

jaume
fuente
1
Respuesta impresionante! Gracias. Llegué a Mac desde Linux, así que no lo sabía diskutil. Es un buen conocimiento tener.
DQdlM
Gracias, me alegra haber podido ayudar a arrojar algo de luz sobre las diferencias entre umounty diskutil/ Finder.
jaume