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

20

Cualquier persona puede desmontar una unidad USB del Finder haciendo clic en el icono "expulsar" que se encuentra al lado. Sin embargo, solo un usuario con privilegios administrativos puede desmontar una unidad de la terminal usando umount .

¿Son umount y "expulsar" diferentes de alguna manera que requiere más seguridad para umount de la terminal?

Nota que estoy ejecutando OS X 10.8.2

    
pregunta KennyPeanuts 05.02.2013 - 18:46

1 respuesta

33

umount es 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 es que desmontar un sistema de archivos, si está mal planeado o ejecutado, podría ser perjudicial, incluso destructivo, especialmente en un sistema multiusuario. Por lo tanto, los usuarios regulares están protegidos de este comando potencialmente peligroso y solo root o un usuario privilegiado tiene permiso para 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 más información) trabajar de esta manera. Por ejemplo, puedo abrir Terminal y ejecutar con éxito:

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

mientras que umount falla:

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

¿Qué hace el Finder o diskutil de manera diferente? Detrás de escena, envían una solicitud a un daemon llamado com.apple.SecurityServer (consulte página de manual para obtener más información), que 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, el Finder y diskutil usan 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 , en el 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.dylib usa varias otras bibliotecas, pero no está vinculado a ningún marco).

    
respondido por el jaume 06.02.2013 - 15:09

Lea otras preguntas en las etiquetas