Почему OS X требует прав администратора для размонтирования диска из терминала, используя `umount`, но не при использовании Finder?

21

Любой человек может отключить USB-накопитель от Finder, нажав на значок «извлечь» рядом с ним. Тем не менее, только пользователь с правами администратора может отключить диск с помощью терминала umount.

Отличаются ли umount«извлечение» каким-либо образом, что требует большей защиты umountот терминала?

Обратите внимание, я использую OS X 10.8.2

DQdlM
источник

Ответы:

34

umountявляется командой UNIX, которая придерживается традиционной точки зрения UNIX, что размонтирование файловой системы является задачей системного администрирования .

Смысл в том, что размонтирование файловой системы, если она плохо спланирована или выполнена, может быть разрушительным, даже разрушительным, особенно в многопользовательской системе. Таким образом, обычные пользователи защищены от этой потенциально опасной команды, и только root или привилегированный пользователь может ее выполнить.

Это имеет большой смысл, когда UNIX используется в качестве серверной операционной системы, но настольная ОС на основе UNIX (например, OS X или Ubuntu ) имеет другие потребности: любой пользователь должен иметь возможность размонтировать флэш-диски, съемные жесткие диски и т. Д. ,

Finder и diskutil(см. Man diskutil для получения дополнительной информации) работают таким образом. Например, я могу открыть терминал и успешно запустить:

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

тогда как umountтерпит неудачу:

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

Что такое Finder или diskutilделает по-другому? За кулисами они отправляют запрос демону с именем com.apple.SecurityServer (см. Man-страницу для получения дополнительной информации), который предоставляет право размонтировать файловую систему:

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

Это позволяет любому пользователю отключить диск без дополнительной аутентификации. (У Ubuntu похожая философия. Если вам интересно, взгляните на этот ответ на AskUbuntu.)

Чтобы поддержать поведение, описанное выше, Finder и diskutilиспользовать несколько платформ 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с другой стороны, связан только с этой динамической библиотекой:

$ 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использует несколько других библиотек, но не связан с какой-либо структурой.)

Жауме
источник
1
Отличный ответ! Спасибо. Я пришел в Mac из Linux, поэтому я не знал о diskutil. Это хорошее знание, чтобы иметь.
DQdlM
Спасибо, я рад , что я мог бы помочь пролить свет на различия между umountи diskutil/ Finder.
Jaume