Чому для OS X потрібні права адміністратора, щоб відключити диск з терміналу за допомогою `umount`, але не під час використання Finder?


21

Будь-хто може від'єднати USB-накопичувач із Finder, натиснувши на нього значок "витягнення". Однак, лише користувач з правами адміністратора може від'єднати диск з терміналу за допомогою umount.

Чи umountвідрізняються та «викидаються» певним чином, що вимагає більшої безпеки umountвід терміналу?

Примітка. У мене працює ОС X 10.8.2

Відповіді:


34

umount- це команда UNIX, яка дотримується традиційної точки зору UNIX, що демонтаж файлової системи є завданням системного адміністрування .

Обґрунтуванням цього є те, що демонтування файлової системи, якщо вона погано спланована чи виконана, може бути руйнівною, навіть руйнівною, особливо в системі багатокористувацької роботи. Тому постійні користувачі захищені від цієї потенційно небезпечної команди, і виконувати її може лише root або привілейований користувач.

Це має багато сенсу, коли UNIX використовується в якості серверної операційної системи, але настільна ОС на базі UNIX (наприклад, OS X або Ubuntu ) має інші потреби: будь-який користувач повинен мати можливість демонтувати флешки, знімні жорсткі диски тощо .

Finder та diskutil(див. Man дискутил для отримання додаткової інформації) працюють таким чином. Наприклад, я можу відкрити Terminal і успішно запустити:

$ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.