Masalahnya - masalah izin di vbox / ubuntu mengakses drive yang dibagikan OSX
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Tujuannya adalah cara sederhana untuk berbagi direktori antara lingkungan Mac dan Ubuntu. Sayangnya contoh-contoh yang saya lihat sejauh ini tampaknya sedikit lebih kompleks daripada yang sebenarnya perlu, dan tidak benar-benar menjelaskan apa masalah nyata yang perlu diselesaikan. Saya akan berusaha menangani kedua masalah itu di sini.
Lingkungan di sini adalah Mac yang menjalankan OSX 10.9.5, dengan Virtual Box 4.3.16 menjalankan Ubuntu-14.04.1 dengan ekstensi Guest diinstal. Barang-barang September 2014.
Saya berpikir bahwa seluruh masalah di sini adalah bahwa uid direktori pada Mac, dan di Ubuntu harus sesuai - default gid ditugaskan untuk pengguna dan kelompok yang berbeda antara OSX dan Ubuntu, dan bahwa di mana masalah kebohongan.
Untuk mengakses file, seseorang harus memilikinya, atau menjadi anggota grup yang memilikinya. Dan karena akses sebenarnya didasarkan pada nomor id grup, bukan nama grup, yang diperlukan hanyalah membuat nomor grup umum di kedua sisi, yang menjadi milik pengguna.
Itulah yang dilakukan oleh solusi di bawah ini. Jangan menyesatkan dengan panjangnya apa yang ditulis, itu sebenarnya sangat sederhana. Ada banyak sekali contoh tentang apa yang terjadi.
Saya akan membalik-balik antara OSX dan VBOX konsol di sini (mac dan virtual-box / ubuntu) dalam dokumen ini - pastikan Anda memahami jendela Anda.
Catatan akhir: Solusi yang ditunjukkan di bawah ini didasarkan pada pembuatan ID grup umum antara lingkungan OSX dan Ubuntu, sehingga izin file berfungsi. Mungkin ada solusi lain yang lebih modern. Yang ini benar-benar sederhana dan mudah dimengerti, dan berjalan dengan instalasi sederhana tanpa hiasan.
OSX: —————
Catatan yang dilakukan pada yang baru di luar kotak 10.9.5 Mac, dengan tidak ada di dalamnya, tidak terhubung ke jaringan perusahaan, tidak ada yang suka berjalan di atasnya selain perangkat lunak saham. Ini sesederhana yang didapat.
Ketika saya melakukan instalasi default pada Mac, joe_public adalah pengguna admin, dan uid-nya diatur ke 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)
Perhatikan bahwa uid adalah 501 - ini adalah id akun pertama default di OSX - tidak ada yang istimewa
Saya membuat beberapa direktori yang ingin saya bagikan di sisi Mac - Perhatikan bahwa saya tidak meletakkannya di bawah direktori pengguna saya untuk alasan cadangan.
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: ——————
Kotak virtual standar sederhana dan instalasi ubuntu - sekali lagi, joe_public adalah admin default yang dibuat ketika saya menginstal ubuntu.
Harap perhatikan sekali lagi, bahwa ruang nama antara OSX dan Ubuntu sama sekali berbeda. Sama sekali tidak ada hubungan antara kedua nama di sini.
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)
Menciptakan tiga titik pemasangan, menggunakan Pengaturan Kotak Virtual -> Folder Berbagi gui.
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
CATATAN: Saya benar-benar harus memulai ulang sesi saya untuk semua poin pemasangan ini muncul.
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)
Perhatikan bahwa gid untuk ini adalah 999 - ini adalah grup vboxsf .
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
Ini ditugaskan secara otomatis oleh Virtual Box versi 4.3.16 untuk kami. Dokumentasi vbox menunjukkan cara bagaimana mengubah ini jika Anda memasang path secara manual melalui baris perintah, tetapi siapa yang akan mengingatnya - Cukup ambil default yang diminta GUI pada kita ..
Tapi itu tidak berhasil (diharapkan pada titik ini - itulah yang kami coba pecahkan)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Perhatikan bahwa pada titik ini joe_public bukan anggota grup vboxsf itu - dan itu akan menjadi masalah sampai kami memperbaikinya. FYI: Ini adalah grup default yang ditetapkan untuk akun ketika dibuat.
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
Jadi apa yang kita miliki saat ini (kami belum melakukan apa pun untuk memperbaikinya)
• 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
Kami tidak ingin mengubah gid pengguna joe_public di kedua sisi, karena itu menyebalkan pada sistem yang sudah diinstal, dan tidak menyelesaikan ini untuk pengguna lain. Solusi paling sederhana adalah membuat grup id yang cocok - vboxsf - di sisi mac, dan pastikan bahwa joe_public adalah anggota di kedua sisi.
Jadi, masih di vbox / ubuntu, membuat joe_public anggota dari 999 vboxsf kelompok
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
Saya pikir saya keluar dari akun saya dan kembali lagi ke sini setelah saya melakukan ini.
OSX: —————
Sekarang kita perlu membuat grup vboxsf di mac. Saya ragu bahwa nama itu benar-benar membuat perbedaan di sini - ini adalah grup 999 id yang penting. Harap diingat bahwa ruang nama sistem direktori (dan juga nama pengguna) berbeda antara host dan sistem operasi VM. Tetapi hanya untuk membuat hidup menjadi waras, kita semua menyebutnya vboxsf di mac. Alasan yang sama mengapa joe_public digunakan nama pengguna di kedua sisi.
OSX tidak memiliki perintah add group sederhana seperti linux - jadi gunakan perintah dscl untuk melakukan ini dalam beberapa langkah. Silakan lihat dokumentasi mac os untuk detail lebih lanjut tentang ini. Perhatikan bahwa kita membuat grup vboxsf, dan menambahkan joe_public ke grup itu di sini.
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
Jadi, pada titik ini, kita seharusnya memiliki
• 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
Buktinya di sini adalah jika itu berfungsi - jadi itulah langkah selanjutnya
VBOX: ——————
masuk ke direktori kami dan sentuh file
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
Periksa apakah kami berhasil membuat file.
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
Itu semua tampaknya berfungsi ..
VBOX: —————— VERIFIKASI FINAL
Apa yang kami periksa di sini adalah bahwa semua ini bergantung pada pengguna joe_public yang menjadi anggota grup vboxsf - dan cara paling sederhana adalah dengan menghapus joe_public dari grup
Menghapus pengguna joe_public dari grup vboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
Melihat apakah kami dapat mengaksesnya direktori kami - dan kami tidak bisa, dan ini membuktikan bahwa itu adalah masalah izin grup
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Tambahkan pengguna kembali ke vboxsf
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
Berhasil lagi!
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: - SATU MASALAH LEBIH BANYAK - tautan simbolik di vbox -------
Jika Anda masuk ke / media / sf_share , Anda akan menemukan bahwa tautan simbolis di direktori bersama tidak berfungsi. Ini adalah masalah yang sangat besar jika Anda mencoba mengatur lingkungan pengembangan linux penuh pada drive bersama.
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
Secara default, tautan simbolik tidak didukung pada bagikan kotak virtual. Lihat penjelasan di bawah ini. Pada dasarnya seperti yang saya pahami, tautan simbolik adalah lubang keamanan yang "diperbaiki" di Virtual Box dengan menonaktifkan dukungan untuk mereka dalam kerangka waktu 4.1.8 (2011). Saya menjalankan 4.3.16 di sini ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-share-folder-symlink-error/
Untungnya ada pintu belakang untuk mengaktifkannya kembali, melalui perintah Host's VBoxManage . Seperti biasa, tolong pahami celah keamanan di sini yang mungkin Anda buka. Saya menggunakan mesin pengembangan yang berdiri sendiri, jadi ini sepertinya bukan masalah.
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
Catatan: Ubuntu adalah nama vm saya, dan dibagikan adalah nama direktori bersama.
Anda bisa mendapatkan nama vm seperti ini:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
Dan nama folder bersama, baik melalui Kotak Virtual gui, atau
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
Saya mem-boot ulang seluruh sistem kotak virtual di sini, saya tidak tahu persyaratan minimum yang harus diambil.
Lagi pula, untuk menguji ini, kembali ke jendela vbox Anda
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
Tidak ada kesalahan - dan untuk memverifikasi
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: ----------
Dan kembali pada sisi mac - hanya untuk membuktikan semuanya berhasil
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
Harap dicatat, saya hanya menguji ini pada host OSX, dan klien kotak virtual Ubuntu. Referensi yang saya sebutkan di atas tampaknya menunjukkan bahwa mungkin ada masalah menjalankan host berbasis Windows.
KIRI LATIHAN UNTUK SISWA ———————
Manfaat dari metode yang tercantum di atas adalah dapat berjalan di mesin stand-along, tanpa akses jaringan. Tetapi jika Anda berpikir tentang hal ini, masalah nama-ayat-id ini harus menjadi masalah umum di antara lingkungan komputasi yang heterogen.
Apa solusi lain yang tersedia di mana solusi untuk masalah itu tersedia? - Hal-hal seperti Active Directory (produk Microsoft) dan sejenisnya mungkin dapat menyelesaikan ini. Akan menarik untuk mendapatkan koleksi solusi tersebut dan membandingkan berbagai fitur dan pengorbanan di sana.
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
, di mana umask adalah nilai dariumask
pengguna, uid dan gid berasalid <user>
,src
adalah nama share VBox, dan/meida/sf_src
merupakan titik mount yang diinginkan.