Das Problem - Berechtigungsprobleme beim Zugriff von vbox / ubuntu auf ein freigegebenes OSX-Laufwerk
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Das Ziel ist eine einfache Möglichkeit, Verzeichnisse zwischen Mac- und Ubuntu-Umgebungen freizugeben. Leider scheinen die Beispiele, die ich bisher gesehen habe, etwas komplexer zu sein, als sie tatsächlich sein müssen, und erklären nicht wirklich, was das eigentliche Problem ist, das gelöst werden muss. Ich werde versuchen, beide Probleme hier zu behandeln.
Die Umgebung ist ein Mac mit OSX 10.9.5, auf dem Virtual Box 4.3.16 Ubuntu-14.04.1 mit installierten Guest-Erweiterungen ausführt. September 2014 Zeug.
Ich denke, dass das gesamte Problem hier ist, dass die UID der Verzeichnisse auf dem Mac und in Ubuntu übereinstimmen muss.
Um auf eine Datei zuzugreifen, muss sie entweder Eigentümer oder Mitglied der Gruppe sein, der sie gehört. Und da der Zugriff tatsächlich auf der ID-Nummer der Gruppe und nicht auf dem Gruppennamen basiert, muss auf beiden Seiten eine gemeinsame Gruppennummer erstellt werden, zu der die Benutzer gehören.
Genau das leistet die folgende Lösung. Lassen Sie sich nicht von der Länge des Geschriebenen in die Irre führen, es ist eigentlich sehr einfach. Es gibt nur sehr viele Beispiele dafür, was los ist.
Ich werde hier in diesem Dokument zwischen OSX- und VBOX- Konsolen wechseln (Mac und Virtual-Box / Ubuntu) - stellen Sie sicher, dass Sie verstehen, in welchem Fenster Sie sich befinden.
Letzte Anmerkung: Die unten gezeigte Lösung basiert auf der Einrichtung einer gemeinsamen Gruppen-ID zwischen der OSX- und der Ubuntu-Umgebung, damit die Dateiberechtigungen funktionieren. Es kann andere, modernere Lösungen geben. Dieser ist wirklich einfach und verständlich und basiert auf einfachen, schmucklosen Installationen.
OSX: —————
Beachten Sie, dass dies auf einem neuen 10.9.5 Mac ohne Verbindung zu einem Unternehmensnetzwerk und nur mit aktueller Software durchgeführt wurde. Das ist so einfach wie es nur geht.
Als ich die Standardinstallation auf dem Mac durchgeführt habe, ist joe_public der Administrator und seine UID wurde auf 501 gesetzt .
Joes-MacBook-Pro:/ joe_public$ id
uid=501(joe_public) gid=20(staff) groups=20(staff),999(vboxsf),401(com.apple.sharepoint.group.1),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),501(access_bpf),33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),399(com.apple.access_ssh)
Beachten Sie, dass die uid ist 501 - dies ist die Standardeinstellung erste Konto - ID auf OSX - nichts Besonderes
Ich habe einige Verzeichnisse erstellt, die ich auf der Mac-Seite freigeben möchte. Beachten Sie, dass ich sie aus Sicherungsgründen nicht in mein Benutzerverzeichnis verschoben habe.
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/shared
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/public
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/images
Joes-MacBook-Pro:vdisk joe_public$ ls -al
total 0
drwxr-xr-x 5 joe_public admin 170 Oct 8 01:08 .
drwxrwxr-t 36 root admin 1292 Oct 6 02:26 ..
drwxrwxrwx 2 joe_public admin 68 Oct 6 01:08 images
drwxr-xr-x 3 joe_public admin 102 Oct 8 01:07 public
drwxrwxrwx 4 joe_public admin 136 Oct 8 00:45 shared
VBOX: ——————
Einfache standardmäßige Installation von Virtual Box und Ubuntu - Auch hier ist joe_public der Standardadministrator, der bei der Installation von Ubuntu erstellt wurde.
Bitte beachten Sie noch einmal, dass der Namensraum zwischen OSX und Ubuntu völlig anders ist. Es gibt hier absolut keine Beziehung zwischen den beiden Namen.
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ id
uid=1000(joe_public) gid=1000(joe_public) groups=1000(joe_public),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Erstellt drei Bereitstellungspunkte mit der GUI " Einstellungen -> Freigegebene Ordner" von Virtual Box .
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
ANMERKUNG: Ich musste meine Sitzung tatsächlich neu starten, damit alle diese Einhängepunkte angezeigt wurden.
joe_public@joe_public-ubuntu-VirtualBox:~$ mount | grep vboxsf
shared on /media/sf_shared type vboxsf (gid=999,rw)
public on /media/sf_public type vboxsf (gid=999,rw)
images on /media/sf_images type vboxsf (gid=999,rw)
Beachten Sie, dass die GID für diese 999 ist - dies ist die Vboxsf- Gruppe.
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
Dies wurde von Virtual Box Version 4.3.16 für uns automatisch vergeben. In der vbox-Dokumentation wird gezeigt, wie Sie dies ändern können, wenn Sie den Pfad manuell über die Befehlszeile einhängen, aber wer wird sich daran erinnern? Übernehmen Sie einfach die Standardeinstellungen, die die GUI für uns erzwingt.
Aber es funktioniert nicht (an diesem Punkt erwartet - das ist, was wir versuchen zu lösen)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Beachten Sie, dass joe_public zu diesem Zeitpunkt kein Mitglied dieser vboxsf- Gruppe ist - und das wird ein Problem sein, bis wir es beheben. Zu Ihrer Information: Dies sind die Standardgruppen, die dem Konto bei seiner Erstellung zugewiesen werden.
joe_public@joe_public-ubuntu-VirtualBox:/media$ grep joe_public /etc/group
adm:x:4:syslog,joe_public
cdrom:x:24:joe_public
sudo:x:27:joe_public
dip:x:30:joe_public
plugdev:x:46:joe_public
lpadmin:x:108:joe_public
joe_public:x:1000:
sambashare:x:124:joe_public
Also, was haben wir zu diesem Zeitpunkt (wir haben noch nichts getan, um es zu beheben)
• On mac, joe_public gid is 501
• On linux, joe_public gid is 1000
• On linux, vboxfs gid is 999
• On mac, vboxsf does not exist
Wir wollen nicht das Gid des Benutzers joe_public auf beiden Seiten ändern , da dies auf bereits installierten Systemen ärgerlich ist und dies für andere Benutzer nicht löst. Die einfachste Lösung besteht darin, eine passende Gruppen-ID - vboxsf - auf der Mac-Seite zu erstellen und sicherzustellen, dass joe_public auf beiden Seiten Mitglied davon ist.
Machen Sie joe_public also immer noch auf vbox / ubuntu zu einem Mitglied der 999 vboxsf- Gruppe
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
joe_public@joe_public-ubuntu-VirtualBox:/$ grep 999 /etc/group
vboxsf:x:999:joe_public
Ich glaube, ich habe mich von meinem Konto abgemeldet und mich hier wieder angemeldet, nachdem ich dies getan habe.
OSX: —————
Jetzt müssen wir eine vboxsf- Gruppe auf dem Mac erstellen . Ich bezweifle, dass der Name hier tatsächlich einen Unterschied macht - es ist die 999- Gruppen-ID, die wichtig ist. Denken Sie daran, dass die Namensräume des Verzeichnissystems (sowie die Benutzernamen) zwischen dem Host- und dem VM-Betriebssystem unterschiedlich sind. Aber nur um das Leben gesund zu machen, nennen wir es alle vboxsf auf dem Mac. Dieselbe Überlegung, warum joe_public auf beiden Seiten einen Benutzernamen verwendet.
OSX verfügt nicht wie Linux über einen einfachen Befehl zum Hinzufügen von Gruppen. Verwenden Sie dazu den Befehl dscl in mehreren Schritten. Weitere Informationen hierzu finden Sie in der Dokumentation zu Mac OS. Beachten Sie, dass wir die Gruppe vboxsf erstellen und dieser Gruppe hier joe_public hinzufügen.
sudo dscl . -create /Groups/vboxsf
sudo dscl . -create /Groups/vboxsf name vboxsf
sudo dscl . -create /Groups/vboxsf passwd "*”
sudo dscl . -create /Groups/vboxsf gid 999
sudo dscl . -create /Groups/vboxsf GroupMembership joe_public
An diesem Punkt sollten wir also haben
• On mac, joe_public gid is 501
• On linux, joe_public gid is 1000
• On linux, vboxfs gid is 999
• On mac, vboxsf gid is 999
• On linux, joe_public is member of vboxsf
• On mac, joe_public is member of vboxsf
Der Beweis ist, ob es funktioniert - das ist der nächste Schritt
VBOX: ——————
cd in unser verzeichnis und berühre eine datei
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
Überprüfen Sie, ob wir eine Datei erfolgreich erstellt haben.
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -al
total 4
drwxrwx--- 1 root vboxsf 102 Oct 8 00:44 .
drwxr-xr-x 5 root root 4096 Oct 8 00:30 ..
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:44 foo
OSX: —————
Joes-MacBook-Pro:shared joe_public$ cd /vdisk/shared
Joes-MacBook-Pro:shared joe_public$ ls -al
total 0
drwxrwxrwx 3 joe_public vboxsf 102 Oct 8 00:44 .
drwxr-xr-x 6 joe_public admin 204 Oct 8 00:17 ..
-rw-r--r-- 1 joe_public vboxsf 0 Oct 8 00:44 foo
Joes-MacBook-Pro:shared joe_public$ touch bar
Joes-MacBook-Pro:shared joe_public$ ls -al
total 0
drwxrwxrwx 4 joe_public vboxsf 136 Oct 8 00:45 .
drwxr-xr-x 6 joe_public admin 204 Oct 8 00:17 ..
-rw-r--r-- 1 joe_public vboxsf 0 Oct 8 00:45 bar
VBOX: ——————
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -al
total 4
drwxrwx--- 1 root vboxsf 136 Oct 8 00:45 .
drwxr-xr-x 5 root root 4096 Oct 8 00:30 ..
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:45 bar
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:44 foo
Es scheint alles zu funktionieren ..
VBOX: —————— SCHLUSSPRÜFUNG
Was wir hier überprüfen, ist, dass diese ganze Sache von dem Benutzer joe_public abhängt , der ein Mitglied der vboxsf- Gruppe ist - und der einfachste Weg ist, joe_public aus der Gruppe zu entfernen
Entfernen des Benutzers joe_public aus der Gruppe vboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
Wenn wir sehen, ob wir auf unser Verzeichnis zugreifen können, können wir das nicht. Dies beweist, dass es sich um ein Gruppenberechtigungsproblem handelt
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Fügen Sie den Benutzer wieder zu vboxsf hinzu
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
Es funktioniert wieder
joe_public@joe_public-ubuntu-VirtualBox:~$ ls -al /media/sf_shared
total 4
drwxrwx--- 1 root vboxsf 170 Oct 8 01:48 .
drwxr-xr-x 6 root root 4096 Oct 8 01:25 ..
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:45 bar
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:44 foo
VBOX: - EIN MEHR PROBLEM - Symbolische Links in der vbox -------
Wenn Sie nach / media / sf_shared gehen , werden Sie feststellen, dass symbolische Links in freigegebenen Verzeichnissen einfach nicht funktionieren. Dies ist ein wirklich großes Problem, wenn Sie versuchen, eine vollständige Linux-Entwicklungsumgebung auf einem gemeinsam genutzten Laufwerk einzurichten.
joe_public@joe_public-ubuntu-VirtualBox:/media$ cd sf_images
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ls
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ mkdir test
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
ln: failed to create symbolic link ‘test2’: Read-only file system
Standardmäßig werden symbolische Links auf virtuellen Boxfreigaben nicht unterstützt. Unten finden Sie Erklärungen. Im Grunde genommen sind symbolische Links eine Sicherheitslücke, die in Virtual Box "behoben" wurde, indem die Unterstützung für sie im 4.1.8-Zeitrahmen (2011) deaktiviert wurde. Ich laufe 4.3.16 hier ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/
Glücklicherweise gibt es eine Hintertür, die es über den VBoxManage- Befehl des Hosts wieder aktiviert . Bitte haben Sie wie immer Verständnis für die Sicherheitslücken, die Sie möglicherweise öffnen. Ich arbeite auf einem eigenständigen Entwicklungscomputer, daher scheint dies kein Problem zu sein.
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
Hinweis: Ubuntu ist der Name meines virtuellen Computers und shared ist der Name des freigegebenen Verzeichnisses.
Sie können den VM-Namen folgendermaßen abrufen:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
Und der Name des freigegebenen Ordners, entweder über die Virtual Box-Benutzeroberfläche oder
Joes-MacBook-Pro:shared pbradstr$ VBoxManage showvminfo Ubuntu | grep -A 5 "Shared folders"
Shared folders:
Name: 'shared', Host path: '/vdisk/shared' (machine mapping), writable
Name: 'public', Host path: '/vdisk/public' (machine mapping), readonly
Name: 'images', Host path: '/vdisk/images' (machine mapping), writable
Ich habe hier das gesamte virtuelle Box-System neu gestartet und nicht herausgefunden, welche Mindestanforderungen es erfüllen muss.
Um dies zu testen, kehren Sie zu Ihrem vbox-Fenster zurück
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
Kein Fehler - und zu überprüfen
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -ald test*
drwxrwx--- 1 root vboxsf 102 Oct 8 11:33 test
lrwxrwx--- 1 root vboxsf 4 Oct 8 13:10 test2 -> test
OSX: ----------
Und zurück auf der Mac-Seite - nur um zu beweisen, dass alles funktioniert
Joes-MacBook-Pro:shared pbradstr$ ln -s test test3
Joes-MacBook-Pro:shared pbradstr$ ls -ald test*
drwxr-xr-x 4 joe_public admin 136 Oct 8 13:20 test
lrwxr-xr-x 1 joe_public admin 4 Oct 8 13:10 test2 -> test
lrwxr-xr-x 1 joe_public admin 4 Oct 8 13:21 test3 -> test
Bitte beachten Sie, dass ich dies nur auf einem OSX-Host und einem Ubuntu Virtual Box-Client getestet habe. Die oben aufgeführten Verweise scheinen darauf hinzudeuten, dass möglicherweise ein Problem beim Ausführen eines Windows-basierten Hosts vorliegt.
ÜBUNG LINKS FÜR DEN STUDENTEN ——————
Der Vorteil der oben aufgeführten Methode besteht darin, dass sie auf einem eigenständigen Computer ohne Netzwerkzugriff ausgeführt werden kann. Aber wenn Sie darüber nachdenken, muss dieses Problem mit der Namensangabe ein häufiges Problem für heterogene Computerumgebungen sein.
Welche anderen Lösungen sind verfügbar, wenn Lösungen für dieses Problem verfügbar sind? - Möglicherweise können Dinge wie Active Directory (ein Microsoft-Produkt) und dergleichen Abhilfe schaffen. Es wäre interessant, eine Sammlung dieser Lösungen zu erhalten und dort verschiedene Merkmale und Kompromisse zu vergleichen.
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
, dass die umask der Wert desumask
Benutzers ist, uid und gid vonid <user>
,src
der Name der VBox-Freigabe und/meida/sf_src
der gewünschte Einhängepunkt.