Sorun - OSX paylaşımlı bir sürücüye erişen vbox / ubuntu'daki izin sorunları
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Amaç, Mac ve Ubuntu ortamları arasındaki dizinleri paylaşmanın basit bir yoludur. Ne yazık ki şu ana kadar gördüğüm örnekler, olması gerekenden biraz daha karmaşık görünüyor ve çözülmesi gereken asıl sorunun ne olduğunu gerçekten açıklamıyor. Bu iki konuyu da burada ele almaya çalışacağım.
Buradaki ortam OSX 10.9.5 çalıştıran bir Mac'tir, Virtual Box 4.3.16, Konuk uzantıları yüklü halde Ubuntu-14.04.1 yürütür. Eylül 2014 şeyleri.
Sanırım buradaki tüm problem şu ki, kullanıcı kullanıcı ve gruplar için atanan varsayılan gid en OSX ve Ubuntu ve bu yılların sorun yatıyor arasındaki farklıdır - Mac dizinleri ve Ubuntu aynı olmalıdır.
Bir dosyaya erişmek için, birinin kendisine ait olması veya kendisine ait olan grubun bir üyesi olması gerekir. Erişim aslında grubun kimliğine göre değil, grup adına göre yapıldığından, gerekli olan tek şey kullanıcıların her iki tarafında da ortak bir grup numarası oluşturmaktır.
Bu tam olarak aşağıdaki çözümü yapar. Yazılanın uzunluğu kadar yanıltmayın, aslında çok basit. Neler olup bittiğine dair pek çok örnek var.
Bu dokümanda OSX ve VBOX konsolları arasında dolaşacağım (mac ve virtual-box / ubuntu) - bu pencerede hangi pencereyi açtığınızı anladığınızdan emin olun.
Son not: Aşağıda gösterilen çözüm, dosya izinlerinin çalışması için OSX ve Ubuntu ortamları arasında ortak bir grup kimliği oluşturmaya dayanmaktadır. Başka, daha modern çözümler olabilir. Bu, gerçekten basit ve anlaşılabilir ve basit süslenmemiş kurulumlarda çıplak kemiklerle çalışıyor.
OSX: —————
Bunun 10.9.5 Mac’in yeni bir kutusundan yapıldığını, üzerinde hiçbir şey bulunmadığını, bir şirket ağına bağlı olmadıklarını, üzerinde çalışan yazılımın stok yazılımı dışında herhangi bir şekilde çalışmadıklarını unutmayın. Bu olabildiğince basittir.
Mac'te varsayılan yüklemeyi yaptığımda, joe_public admin kullanıcısı ve onun kimliği 501 olarak ayarlandı .
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)
Bildirim o uid olan 501 - Bu OSX varsayılan ilk hesap id - Özel bir şey
Mac tarafında paylaşmak istediğim birkaç dizin oluşturdum. Notları, yedekleme nedenlerinden dolayı bunları kullanıcı dizinimin altına koymadığımı unutmayın.
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: ——————
Basit varsayılan sanal kutu ve ubuntu kurulumu - yine, joe_public ubuntu kurduğumda oluşturulan varsayılan yönetici.
Lütfen OSX ile Ubuntu arasındaki ad alanının tamamen farklı olduğunu bir kez daha unutmayın. Buradaki iki isim arasında kesinlikle bir ilişki yok.
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)
Sanal Kutu Ayarı -> Paylaşılan Klasörler gui kullanılarak üç montaj noktası oluşturuldu .
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
NOT: Aslında tüm bu bağlama noktalarının ortaya çıkması için oturumumu yeniden başlatmam gerekti.
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)
Bunlar için gid'in 999 olduğuna dikkat edin - bu vboxsf grubudur.
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
Bu bizim için Sanal Kutu sürüm 4.3.16 tarafından otomatik olarak atandı. Vbox belgeleri, yolu komut satırına elle bağlarsanız bunu nasıl değiştireceğinizin yollarını gösterir, ancak bunu kim hatırlayacak - Yalnızca GUI'nin bize uyguladığı varsayılanları kullanın.
Fakat işe yaramıyor (bu noktada beklenen - çözmeye çalıştığımız şey bu)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Bu noktada joe_public'in bu vboxsf grubunun bir üyesi olmadığını ve biz düzeltene kadar bu bir problem olacağını unutmayın. FYI: Bunlar oluşturulduğunda hesaba atanan varsayılan gruplardır.
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
Öyleyse bu noktada ne yaptık (düzeltmek için henüz bir şey yapmadık)
• 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
Joe_public kullanıcısının her iki tarafındaki yönünü değiştirmek istemiyoruz , bu zaten kurulu olan sistemlerdeki bir acıdır ve bunu diğer kullanıcılar için çözmez. En basit çözüm, mac tarafında eşleşen bir grup kimliği - vboxsf - yapmak ve joe_public'in her iki tarafta da üye olduğundan emin olmaktır .
Yani, hala vbox / ubuntu'da , joe_public'ü 999 vboxsf grubunun bir üyesi yap
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
Sanırım hesabımdan çıkış yaptım ve bunu yaptıktan sonra tekrar buraya girdim.
OSX: —————
Şimdi mac'ta bir vboxsf grubu oluşturmamız gerekiyor . İsmin aslında burada bir fark yarattığından şüpheliyim - bu 999 grup kimliği önemli. Dizin sistemi adı boşluklarının (kullanıcı adlarının yanı sıra) ana bilgisayar ve VM işletim sistemleri arasında farklı olduğunu lütfen unutmayın. Ama sadece hayatı aklı başında yapmak için hepimiz mac üzerinde vboxsf diyoruz . Aynı nedenle, joe_public her iki tarafta da bir kullanıcı adı kullanmaktadır.
OSX'te linux gibi basit bir grup ekleme komutu yoktur - bu yüzden bunu yapmak için dscl komutunu birkaç adımda kullanın. Bu konuda daha fazla ayrıntı için lütfen mac os belgelerine bakın. Vboxsf grubunu oluşturduğumuza ve bu gruba joe_public eklediğimize dikkat edin.
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
Yani, bu noktada, biz olmalıydı
• 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
Buradaki ispat işe yararsa - yani bir sonraki adım
VBOX: ——————
bizim dizin içine cd ve bir dosyaya dokunun
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
Bir dosyayı başarıyla oluşturduğumuzu kontrol edin.
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
Hepsi çalışıyor gibi görünüyor ..
VBOX: —————— NİHAİ DOĞRULAMA
Burada kontrol ettiğimiz şey, tüm bunların joe_public adlı kullanıcının vboxsf grubunun bir üyesi olmasına bağlı olmasıdır - ve en basit yol joe_public'i kaldırmaktır grubundan
Joe_public adlı kullanıcının vboxsf grubundan kaldırılması
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
Rehberimize erişip erişemediğimizi görmek - ve yapamayız ve bu da grup izin sorunu olduğunu kanıtlıyor
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Kullanıcıyı tekrar vboxsf'a ekle
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
Yine çalışıyor!
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: - DAHA FAZLA SORUN - vbox sembolik bağları -------
Eğer / media / sf_shared'e girerseniz , paylaşılan dizinlerdeki sembolik bağların işe yaramadığını göreceksiniz. Paylaşılan bir sürücüde tam bir linux geliştirme ortamı oluşturmaya çalışıyorsanız, bu gerçekten büyük bir sorundur.
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
Varsayılan olarak, sembolik bağlantılar sanal kutu paylaşımlarında desteklenmez. Açıklamalar için aşağıya bakınız. Temelde anladığım kadarıyla, sembolik linkler, 4.1.8 zaman dilimi (2011) 'de kendilerine verilen desteği devre dışı bırakarak Sanal Kutu’da “sabitlenmiş” bir güvenlik deliğidir. 4.3.16 burda koşuyorum ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/
Neyse ki, Host'un VBoxManage komutuyla tekrar etkinleştirmek için bir arka kapı var . Her zaman olduğu gibi, lütfen burada açmakta olduğunuz güvenlik deliklerini anlayın. Tek başına bir geliştirme makinesindeyim, bu yüzden bu bir sorun gibi görünmüyor.
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
Not: Ubuntu vm'nin adıdır ve paylaşılır. paylaşılan dizin adıdır.
Vm adını şöyle alabilirsiniz:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
Ve paylaşılan klasörlerin adı, Sanal Kutu gui veya
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
Burada tüm sanal kutu sistemini yeniden başlattım, alması için minimum gereksinimi bulamadım.
Neyse, bunu test etmek için vbox penceresine geri dön.
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
Hata yok - ve doğrulamak için
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: ----------
Mac tarafına geri döndüm - sadece işe yaradığını ispatlamak için
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
Lütfen, yalnızca bir OSX sunucusunda ve Ubuntu sanal kutu istemcisinde test ettiğime dikkat edin. Yukarıda listelediğim referanslar, Windows tabanlı bir ana bilgisayarı çalıştıran bir sorun olabileceğini gösteriyor gibi görünüyordu.
ÖĞRENCİ İÇİN SOL EGZERSİZ ———————
Yukarıda listelenen yöntemin yararı, ağ erişimi olmayan, bağımsız bir makinede çalışabilmesidir. Ancak bunun hakkında düşünürseniz, bu isim-ayetler-id konusu, herhangi bir heterojen bilgi işlem ortamı arasında ortak bir sorun olmak zorundadır.
Bu sorunun çözümlerinin mevcut olduğu başka hangi çözümler mevcut? - Active Directory (bir Microsoft ürünü) ve benzeri gibi şeyler bunu çözebilir. Bu çözümlerin bir koleksiyonunu elde etmek ve orada çeşitli özellikleri ve takasları karşılaştırmak ilginç olurdu.
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
Umask değeridir,umask
kullanıcı, sıvısındaki ve gid gelmektedirid <user>
,src
VBox payı adıdır ve/meida/sf_src
bağlama noktası arzu olduğunu.