Problem - problemy z uprawnieniami w vbox / ubuntu uzyskujące dostęp do współdzielonego dysku OSX
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Celem jest prosty sposób udostępniania katalogów między środowiskami Mac i Ubuntu. Niestety przykłady, które do tej pory widziałem, wydają się nieco bardziej skomplikowane niż powinny być i nie wyjaśniają, jaki prawdziwy problem należy rozwiązać. Spróbuję rozwiązać oba te problemy tutaj.
Środowisko tutaj to Mac z systemem OSX 10.9.5, z Virtual Box 4.3.16 wykonującym Ubuntu-14.04.1 z zainstalowanymi rozszerzeniami Guest. Rzeczy z września 2014 r.
Myślę, że cały problem polega na tym, że identyfikator użytkownika katalogów na komputerze Mac i w Ubuntu musi się zgadzać - Domyślny identyfikator użytkownika przypisany do użytkownika i grup różni się w OSX i Ubuntu, i na tym właśnie polega problem.
Aby uzyskać dostęp do pliku, należy go posiadać lub być członkiem grupy, która go posiada. A ponieważ dostęp jest w rzeczywistości oparty na numerze identyfikacyjnym grupy, a nie na nazwie grupy, wystarczy stworzyć wspólny numer grupy po obu stronach, do którego należą użytkownicy.
Właśnie to robi poniższe rozwiązanie. Nie daj się zwieść długości napisanych treści, w rzeczywistości jest to bardzo proste. Jest tylko wiele przykładów tego, co się dzieje.
Będę przerzucać między konsolami OSX i VBOX tutaj (mac i virtual-box / ubuntu) w tym dokumencie - upewnij się, że rozumiesz, w którym oknie jesteś.
Uwaga końcowa: Rozwiązanie pokazane poniżej opiera się na ustanowieniu wspólnego identyfikatora grupy między środowiskami OSX i Ubuntu, tak aby uprawnienia do plików działały. Mogą istnieć inne, bardziej nowoczesne rozwiązania. Ten jest naprawdę prosty i zrozumiały i działa na prostych, pozbawionych ozdób instalacjach.
OSX: —————
Zwróć uwagę, że zostało to zrobione na nowym komputerze Mac 10.9.5, bez niczego, nie podłączonego do sieci korporacyjnej, nic nadzwyczajnego na nim uruchomionego oprócz oprogramowania podstawowego. To jest tak proste, jak to możliwe.
Kiedy zrobiłem domyślną instalację na komputerze Mac, joe_public jest użytkownikiem administracyjnym, a jego identyfikator użytkownika został ustawiony na 501 .
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)
Zauważ, że uid to 501 - jest to domyślny pierwszy identyfikator konta w OSX - nic specjalnego
Utworzyłem kilka katalogów, które chcę udostępnić po stronie Maca - pamiętaj, że nie umieściłem ich w katalogu użytkowników ze względu na kopię zapasową.
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: ——————
Prosta domyślna instalacja wirtualnego boxa i Ubuntu - ponownie joe_public jest domyślnym administratorem utworzonym podczas instalacji Ubuntu.
Jeszcze raz zauważ, że przestrzeń nazw między OSX a Ubuntu jest zupełnie inna. Nie ma absolutnie żadnego związku między tymi dwoma nazwami.
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)
Utworzono trzy punkty montowania, używając ustawienia Virtual Box -> GUI folderów współdzielonych.
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
UWAGA: Musiałem zrestartować moją sesję, aby pojawiły się wszystkie punkty montowania.
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)
Zauważ, że gid dla nich to 999 - jest to grupa vboxsf .
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
Zostało to przypisane nam automatycznie przez Virtual Box w wersji 4.3.16. Dokumentacja vbox pokazuje, jak to zmienić, jeśli ręcznie zamontujesz ścieżkę za pomocą wiersza poleceń, ale kto to zapamięta - po prostu weź domyślne ustawienia, które narzuca nam GUI.
Ale to nie działa (oczekiwane w tym momencie - właśnie to próbujemy rozwiązać)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Zauważ, że w tym momencie joe_public nie jest członkiem tej grupy vboxsf - i będzie to stanowić problem, dopóki go nie naprawimy . FYI: Są to domyślne grupy przypisane do konta podczas jego tworzenia.
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
Więc co mamy w tym momencie (nie zrobiliśmy jeszcze nic, aby to naprawić)
• 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
Nie chcemy zmieniać identyfikatora użytkownika joe_public po obu stronach, ponieważ jest to uciążliwe dla już zainstalowanych systemów i nie rozwiązuje tego dla innych użytkowników. Najprostszym rozwiązaniem jest utworzenie pasującej grupy id - vboxsf - po stronie mac i upewnienie się, że joe_public jest jej członkiem po obu stronach.
Tak, nadal na vbox / Ubuntu, upewnij joe_public członkowi 999 vboxsf grupie
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
Wydaje mi się, że wylogowałem się z konta i wróciłem tutaj po tym, jak to zrobiłem.
OSX: —————
Teraz musimy utworzyć grupę vboxsf na komputerze Mac. Wątpię, czy nazwa faktycznie robi różnicę - ważny jest identyfikator grupy 999 . Pamiętaj, że przestrzenie nazw systemu katalogów (a także nazwy użytkowników) różnią się między systemem operacyjnym hosta a maszyną wirtualną. Ale żeby uczynić życie rozsądnym, wszyscy nazywamy to vboxsf na Macu . To samo powód, dla którego joe_public jest używana po obu stronach z nazwą użytkownika.
OSX nie ma prostej komendy dodawania grupy, podobnie jak linux - więc użyj komendy dscl, aby zrobić to w kilku krokach. Więcej informacji na ten temat znajduje się w dokumentacji systemu Mac OS. Zauważ, że tworzymy grupę vboxsf i dodajemy tutaj joe_public.
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
W tym momencie powinniśmy mieć
• 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
Dowodem na to jest, czy to działa - więc to kolejny krok
VBOX: ——————
cd do naszego katalogu i dotknij pliku
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
Sprawdź, czy plik został pomyślnie utworzony.
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
Wszystko wydaje się działać.
VBOX: —————— WERYFIKACJA KOŃCOWA
Sprawdzamy tutaj, że to wszystko zależy od tego, czy użytkownik joe_public jest członkiem grupy vboxsf - a najprostszym sposobem jest po prostu usunięcie joe_public z grupy
Usuwanie użytkownika joe_public z grupy vboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
Sprawdzanie, czy możemy uzyskać do niego dostęp do naszego katalogu - i nie możemy, a to dowodzi, że jest to problem z uprawnieniami grupowymi
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Dodaj użytkownika z powrotem do vboxsf
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
Działa znowu!
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: - JEDEN WIĘCEJ PROBLEMU - dowiązania symboliczne w vbox -------
Jeśli przejdziesz do / media / sf_shared , przekonasz się, że dowiązania symboliczne w udostępnionych katalogach po prostu nie działają. Jest to naprawdę duży problem, jeśli próbujesz skonfigurować pełne środowisko programistyczne dla systemu Linux na dysku współdzielonym.
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
Domyślnie dowiązania symboliczne nie są obsługiwane w udziałach wirtualnych pudełek. Poniżej wyjaśnienia. Zasadniczo, jak rozumiem, dowiązania symboliczne są luką w zabezpieczeniach, które zostały „naprawione” w Virtual Boxie poprzez wyłączenie ich obsługi w przedziale czasowym 4.1.8 (2011). Korzystam z 4.3.16 tutaj ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/
Na szczęście istnieją tylne drzwi, aby je ponownie włączyć za pomocą komendy VBoxManage hosta . Jak zawsze, proszę zrozumieć luki w zabezpieczeniach, które możesz otwierać. Jestem na autonomicznej maszynie programistycznej, więc nie wydaje się to być problemem.
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
Uwaga: Ubuntu to nazwa mojego vm, a shared to nazwa udostępnionego katalogu.
Możesz uzyskać nazwę VM tak:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
I nazwa folderów współdzielonych, albo poprzez GUI Virtual Box, albo
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
Ponownie uruchomiłem tutaj cały system wirtualnej skrzynki, nie ustaliłem minimalnych wymagań, które należy spełnić.
W każdym razie, aby to przetestować, wróć do okna vbox
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
Bez błędów - i do weryfikacji
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: ----------
Z powrotem po stronie Mac - tylko po to, aby udowodnić, że wszystko działa
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
Uwaga: testowałem to tylko na hoście OSX i kliencie wirtualnym Ubuntu. Odniesienia wymienione powyżej wydają się wskazywać, że może występować problem z uruchomieniem hosta opartego na systemie Windows.
ĆWICZENIE LEWE DLA STUDENTA ———————
Zaletą powyższej metody jest to, że może ona działać na maszynie autonomicznej, bez dostępu do sieci. Ale jeśli się nad tym zastanowić, to kwestia nazwa-werset-id musi być częstym problemem wśród heterogenicznych środowisk komputerowych.
Jakie inne rozwiązania są dostępne tam, gdzie dostępne są rozwiązania tego problemu? - Rzeczy takie jak Active Directory (produkt Microsoft) i tym podobne mogą rozwiązać ten problem. Byłoby interesujące uzyskać zbiór tych rozwiązań i porównać tam różne funkcje i kompromisy.
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
, gdzie umask jest wartościąumask
użytkownika, od której są identyfikatory UID i GIDid <user>
,src
jest nazwą udziału VBox i/meida/sf_src
pożądanym punktem montowania.