Warum benötigt OS X Administratorrechte, um ein Laufwerk mit `umount` vom Terminal abzuhängen, aber nicht, wenn Finder verwendet wird?

21

Jeder kann ein USB-Laufwerk aus dem Finder entfernen, indem er auf das Symbol "Auswerfen" daneben klickt. Allerdings kann nur ein Benutzer mit Administratorrechten ein Laufwerk über vom Terminal trennen umount.

Sind umountund „Auswerfen“ in irgendeiner Weise anders , die mehr Sicherheit für erfordert umountvom Terminal?

Hinweis Ich verwende OS X 10.8.2

DQdlM
quelle

Antworten:

34

umountist ein UNIX-Befehl, der der traditionellen UNIX-Perspektive folgt, dass das Aufheben der Bereitstellung eines Dateisystems eine Systemverwaltungsaufgabe ist .

Das Grundprinzip dahinter ist, dass das Aufheben der Bereitstellung eines Dateisystems, wenn es schlecht geplant oder ausgeführt wird, insbesondere auf einem Mehrbenutzersystem störend oder sogar destruktiv sein kann. Daher sind reguläre Benutzer vor diesem potenziell gefährlichen Befehl geschützt und nur Root- Benutzer oder privilegierte Benutzer dürfen ihn ausführen.

Dies ist sehr sinnvoll, wenn UNIX als Serverbetriebssystem verwendet wird, ein UNIX-basiertes Desktop-Betriebssystem (z. B. OS X oder Ubuntu ) jedoch andere Anforderungen hat: Jeder Benutzer sollte in der Lage sein, Flash-Laufwerke, austauschbare Festplatten usw .

Der Finder und diskutil(siehe man diskutil für weitere Informationen) arbeiten auf diese Weise. Zum Beispiel kann ich Terminal öffnen und erfolgreich ausführen:

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

während umountfehlschlägt:

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

Was macht der Finder oder diskutilanders? Hinter den Kulissen senden sie eine Anfrage an einen Daemon mit dem Namen com.apple.SecurityServer ( weitere Informationen finden Sie auf der Manpage ), der das Recht gewährt, das Dateisystem abzuhängen:

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

Auf diese Weise kann jeder Benutzer die Bereitstellung eines Laufwerks aufheben, ohne dass eine zusätzliche Authentifizierung erforderlich ist. (Ubuntu hat eine ähnliche Philosophie. Wenn Sie interessiert sind, schauen Sie sich diese Antwort auf AskUbuntu an.)

So unterstützen Sie das oben im Finder erläuterte Verhalten und diskutilverwenden mehrere Apple-Frameworks:

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

umountAuf der anderen Seite ist nur mit dieser dynamischen Bibliothek verknüpft:

$ 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.dylibVerwendet mehrere andere Bibliotheken, ist jedoch nicht an ein Framework gebunden.)

jaume
quelle
1
Geniale Antwort! Vielen Dank. Ich kam von Linux zu Mac, also wusste ich nichts darüber diskutil. Das ist gutes Wissen.
DQdlM
Danke, ich bin froh, dass ich etwas Licht in die Unterschiede zwischen umountund diskutil/ Finder bringen konnte.
Jaume