Ich muss herausfinden, wie ich die Berechtigungen eines USB-Flash-Laufwerks auf Geräteebene (nicht auf Dateisystemebene) festlegen kann. Mit anderen Worten, ich muss dem Benutzer Lese-/Schreibzugriff auf ein USB-Gerät gewähren, das dadurch gekennzeichnet diskutil
ist, /dev/diskX
dass X eine Ganzzahl ist.
Zum Beispiel stecke ich ein USB-Flash-Laufwerk ein und laut diskutil
seiner Kennung ist /dev/disk5
. Wenn ich die Berechtigungen davon überprüfe:
$ ls /dev/disk5*
brw-r----- 1 root operator 1, 15 May 15 08:35 /dev/disk5
brw-r----- 1 root operator 1, 16 May 15 08:35 /dev/disk5s1
brw-r----- 1 root operator 1, 17 May 15 08:35 /dev/disk5s2
root:operator
Besitz und Zugriff sind rw
auf root und r
Zugriff auf operators
nur beschränkt (aus diesem Grund müssen Sie Befehle ausgeben, die das Gerät als modifizieren sudo
).
Was ich tun muss, ist, rw
dem Operator auch Zugriff zu gewähren, und es ist nicht so einfach wie nur chmod 660 /dev/disk5
. In dem Moment, in dem Sie das Gerät ausstecken und wieder einstecken, verliert es die Berechtigungen.
Warum muss ich das tun?
Ich muss ein USB-Flash-Laufwerk in VirtualBox booten. Dazu muss ich in der Lage sein, ein "rohes" Disk-Image als Passthrough zum eigentlichen USB-Gerät zu erstellen. Das Problem ist, dass ich dazu den Befehl absetzen muss, über sudo
den sich dann der Benutzer ändert, den ich ausführe, VBoxManage
was eine Reihe von Fehlern verursacht, da er root
eine völlig andere Umgebung als der angemeldete Benutzer hat.
Dies kann in FreeBSD (ich bin sicher, Linux auch über eine andere Methode) erreicht werden, indem die devfs.rules
Datei geändert und eine Zeile wie die folgende hinzugefügt wird:
add path 'da*' mode 0660 group operator
Dies ermöglicht im Wesentlichen rw
den Zugriff auf jedes USB-Speichergerät (USB-Speicher wird von FreeBSD als /dev/da0
, /dev/da1
, usw. identifiziert).
Wie mache ich das unter macOS?
Ich konnte nie einen Weg finden, um direkten Zugriff auf das Raw-Gerät zu erhalten, aber VirtualBox hat eine "Raw Disk Access"-Funktion, mit der ich dieses Problem umgehen konnte.
Dies funktioniert so, dass ein VMDK-Laufwerk erstellt wird, das tatsächlich einem physischen Volume zugeordnet ist. Dies fungiert als Passthrough, sodass VB auf ein physisches Gerät zugreifen kann.
VBoxManage internalcommands createrawvmdk -filename "</path/to/file>.vmdk" -rawdisk /dev/disk#
Wenn ich beispielsweise ein physisches USB-Gerät mit einem Betriebssystem-Installationsprogramm hätte, könnte ich eine VMDK erstellen, die ich an eine VM anhängen könnte.
Beispiel:
Angenommen, ein USB-Installationsprogramm mit macOS/FreeBSD/Linux/Windows. Um diesen physischen USB an eine VM anzuschließen (vorausgesetzt, /dev/disk3 ist das USB-Gerät),
Gerät ein- und aushängen (nicht auswerfen).
diskutil unmount /dev/disk3
Erstellen Sie das VMDK
sudo VBoxManage internalcommands createrawvmdk -filename "USB_OS_Installer.vmdk" -rawdisk /dev/disk3
Übernehmen Sie den Besitz der VMDK (sie wurde als root erstellt über sudo
; ersetzen Sie „user“ durch Ihren Benutzernamen und lassen Sie die Gruppe „staff“ unverändert)
sudo chown user:staff USB_OS_Installer.vmdk
Hängen Sie das VMDK an die VM in der GUI von VirtualBox an.
Sie haben jetzt über Ihre VM Zugriff auf ein physisches Boot-Mediengerät.
John Keates