ปัญหา - ปัญหาการอนุญาตใน vbox / ubuntu เข้าถึงไดรฟ์ที่ใช้ร่วมกับ OSX
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
เป้าหมายคือวิธีง่ายๆในการแชร์ไดเรกทอรีระหว่าง Mac และ Ubuntu น่าเสียดายที่ตัวอย่างที่ฉันเห็นมานั้นดูเหมือนจะซับซ้อนกว่าที่พวกเขาต้องการจริงๆและไม่ได้อธิบายสิ่งที่เป็นปัญหาจริงที่ต้องแก้ไข ฉันจะพยายามจัดการกับปัญหาทั้งสองที่นี่
สภาพแวดล้อมที่นี่คือ Mac ที่ใช้ OSX 10.9.5 โดยมี Virtual Box 4.3.16 กำลังใช้งาน Ubuntu-14.04.1 พร้อมติดตั้งส่วนขยายของผู้เยี่ยมชม สิ่งกันยายน 2014
ฉันคิดว่าปัญหาทั้งหมดที่นี่คือuidของไดเรกทอรีบน Mac และใน Ubuntu ต้องตรงกัน - gid เริ่มต้นที่กำหนดให้กับผู้ใช้และกลุ่มต่างจาก OSX และ Ubuntu และนั่นคือปัญหาที่เกิดขึ้น
ในการเข้าถึงไฟล์หนึ่งต้องเป็นเจ้าของมันหรือเป็นสมาชิกของกลุ่มที่เป็นเจ้าของ และเนื่องจากการเข้าถึงนั้นขึ้นอยู่กับหมายเลขรหัสของกลุ่มไม่ใช่ชื่อกลุ่มสิ่งที่จำเป็นคือการสร้างหมายเลขกลุ่มทั่วไปทั้งสองด้านที่ผู้ใช้เป็นเจ้าของ
นั่นคือสิ่งที่โซลูชันด้านล่างทำ อย่าเข้าใจผิดตามความยาวของสิ่งที่เขียนจริง ๆ แล้วมันง่ายมาก มีตัวอย่างมากมายที่เกิดขึ้น
ฉันกำลังจะพลิกระหว่างคอนโซลOSXและVBOXที่นี่ (mac และ virtual-box / ubuntu) ภายในเอกสารนี้ - ตรวจสอบให้แน่ใจว่าคุณเข้าใจว่าหน้าต่างของคุณเป็นแบบไหน
หมายเหตุสุดท้าย: โซลูชันที่แสดงด้านล่างนี้ใช้พื้นฐานการสร้างรหัสกลุ่มทั่วไประหว่างสภาพแวดล้อม OSX และ Ubuntu เพื่อให้การอนุญาตไฟล์ทำงานได้ อาจมีโซลูชั่นอื่น ๆ ที่ทันสมัยกว่า อันนี้ง่ายและเข้าใจจริงๆและวิ่งบนกระดูกเปลือยที่ไม่มีการตกแต่ง
OSX: —————
โปรดทราบว่ามีการทำบนตัวเครื่องใหม่ 10.9.5 Mac โดยที่ไม่ต้องใช้อะไรเลยไม่ได้เชื่อมต่อกับเครือข่ายขององค์กรไม่มีอะไรแปลกใหม่ที่จะทำงานบนมันนอกเหนือจากซอฟต์แวร์สต็อก มันง่ายเหมือนที่ได้รับ
เมื่อฉันได้ติดตั้งเริ่มต้นใน Mac, joe_publicเป็นผู้ดูแลระบบและโพสต์ของเขาถูกกำหนดให้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)
โปรดสังเกตว่าuidคือ501 - นี่เป็นรหัสบัญชีเริ่มต้นแรกบน OSX - ไม่มีอะไรพิเศษ
ฉันสร้างบางไดเรกทอรีที่ฉันต้องการแชร์ในฝั่ง Mac - โปรดทราบว่าฉันไม่ได้ใส่ไว้ในไดเรกทอรีผู้ใช้ของฉันเพื่อเหตุผลในการสำรองข้อมูล
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: ——————
กล่องเสมือนเริ่มต้นที่ง่ายและการติดตั้ง Ubuntu - อีกครั้งjoe_publicเป็นผู้ดูแลระบบเริ่มต้นที่สร้างขึ้นเมื่อฉันติดตั้ง Ubuntu
โปรดทราบอีกครั้งว่าพื้นที่ชื่อระหว่าง OSX และ Ubuntu แตกต่างอย่างสิ้นเชิง ไม่มีความสัมพันธ์ใด ๆ ระหว่างสองชื่อนี้
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)
สร้างจุดเมานต์สามจุดโดยใช้การตั้งค่าของ Virtual Box -> Shared Folders gui
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
หมายเหตุ: จริง ๆ แล้วฉันต้องรีบูตเซสชันของฉันเพื่อให้จุดเมานต์เหล่านี้ทั้งหมดขึ้นมา
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)
โปรดสังเกตว่า gid สำหรับสิ่งเหล่านี้คือ 999 - นี่คือกลุ่มvboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
สิ่งนี้ถูกกำหนดโดยอัตโนมัติโดย Virtual Box เวอร์ชัน 4.3.16 สำหรับเรา เอกสาร vbox แสดงให้เห็นถึงวิธีการเปลี่ยนแปลงสิ่งนี้หากคุณติดตั้งเส้นทางด้วยตนเองผ่านบรรทัดคำสั่ง แต่ใครจะจำได้ว่า - เพียงแค่ใช้ค่าเริ่มต้นที่ GUI บังคับให้เรา ..
แต่มันใช้งานไม่ได้ (คาดว่าจะถึงจุดนี้ - นั่นคือสิ่งที่เราพยายามแก้ไข)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
โปรดทราบว่า ณ จุดนี้joe_publicไม่ใช่สมาชิกของกลุ่มvboxsf - และนั่นจะเป็นปัญหาจนกว่าเราจะแก้ไข FYI: นี่คือกลุ่มเริ่มต้นที่กำหนดให้กับบัญชีเมื่อสร้างขึ้น
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
ดังนั้นสิ่งที่เรามีอยู่ ณ จุดนี้ (เรายังไม่ได้ทำอะไรเพื่อแก้ไข)
• 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
เราไม่ต้องการเปลี่ยน gid ของผู้ใช้joe_publicทั้งสองข้างเนื่องจากเป็นปัญหาในตูดในระบบที่ติดตั้งแล้วและไม่ได้แก้ปัญหานี้สำหรับผู้ใช้รายอื่น ทางออกที่ง่ายที่สุดคือการสร้าง id กลุ่มที่ตรงกัน - vboxsf - บนฝั่ง mac และตรวจสอบให้แน่ใจว่าjoe_publicเป็นสมาชิกของทั้งสองฝ่าย
ดังนั้นยังคงอยู่บน VBox / อูบุนตูให้joe_publicเป็นสมาชิกของ 999 vboxsfกลุ่ม
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
ฉันคิดว่าฉันออกจากระบบบัญชีของฉันและกลับมาที่นี่อีกครั้งหลังจากฉันทำสิ่งนี้
OSX: —————
ตอนนี้เราต้องสร้างกลุ่มvboxsfบน mac ฉันสงสัยว่าชื่อจริงสร้างความแตกต่างได้ที่นี่ - เป็นรหัสกลุ่ม999ที่สำคัญ โปรดจำไว้ว่าการเว้นวรรคชื่อระบบไดเรกทอรี (รวมถึงชื่อผู้ใช้) นั้นแตกต่างกันระหว่างโฮสต์และระบบปฏิบัติการ VM แต่เพียงเพื่อทำให้ชีวิตมีชีวิตชีวาเราทุกคนเรียกมันว่าvboxsfบน mac เหตุผลเดียวกับที่ทำไมjoe_publicใช้ชื่อผู้ใช้ทั้งสองด้าน
OSX ไม่มีคำสั่งเพิ่มกลุ่มอย่างง่ายเหมือนกับที่ linux ทำดังนั้นให้ใช้คำสั่ง dscl เพื่อทำสิ่งนี้ในหลายขั้นตอน โปรดดูเอกสารประกอบของ mac os สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ โปรดสังเกตว่าเราสร้างกลุ่ม vboxsf และเพิ่ม 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
ดังนั้น ณ จุดนี้เราควรมี
• 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
หลักฐานที่นี่คือถ้ามันทำงาน - นั่นคือขั้นตอนต่อไป
VBOX: ——————
cd ในไดเรกทอรีของเราแล้วแตะไฟล์
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
ตรวจสอบว่าเราสร้างไฟล์สำเร็จ
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
ดูเหมือนว่าทุกอย่างจะทำงาน ..
VBOX: —————— การยืนยันขั้นสุดท้าย
สิ่งที่เรากำลังตรวจสอบที่นี่คือสิ่งทั้งหมดนี้ขึ้นอยู่กับผู้ใช้joe_publicซึ่งเป็นสมาชิกของกลุ่มvboxsf - และวิธีที่ง่ายที่สุดคือการลบjoe_publicออกจากกลุ่ม
การลบผู้ใช้joe_publicจากกลุ่มvboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
ดูว่าเราสามารถเข้าถึงไดเรกทอรีของเราได้หรือไม่และนี่เป็นการพิสูจน์ว่าเป็นปัญหาการอนุญาตกลุ่ม
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
เพิ่มผู้ใช้กลับสู่vboxsf
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
มันทำงานได้อีกครั้ง!
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: - อีกหนึ่งปัญหา - ลิงก์สัญลักษณ์ใน vbox -------
หากคุณเข้าสู่/ media / sf_sharedคุณจะพบว่าลิงก์สัญลักษณ์ในไดเรกทอรีที่แชร์นั้นใช้งานไม่ได้ นี่เป็นปัญหาใหญ่จริง ๆ ถ้าคุณพยายามตั้งค่าสภาพแวดล้อมการพัฒนา linux แบบเต็มบนไดรฟ์ที่ใช้ร่วมกัน
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
ตามค่าเริ่มต้นลิงก์สัญลักษณ์จะไม่ได้รับการสนับสนุนจากการแชร์กล่องเสมือน ดูคำอธิบายด้านล่าง โดยพื้นฐานแล้วฉันเข้าใจแล้วลิงก์สัญลักษณ์เป็นช่องโหว่ที่ "คงที่" ในกล่องเสมือนโดยปิดการใช้งานการสนับสนุนในกรอบเวลา 4.1.8 (2011) ฉันใช้ 4.3.16 ที่นี่ ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/
โชคดีที่มีประตูหลังเพื่อเปิดใช้งานอีกครั้งผ่านคำสั่งVBoxManageของโฮสต์ เช่นเคยโปรดเข้าใจช่องโหว่ที่นี่ที่คุณอาจเปิดอยู่ ฉันใช้เครื่องมือพัฒนาแบบสแตนด์อะโลนดังนั้นนี่จึงไม่ใช่ปัญหา
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
หมายเหตุ: Ubuntuเป็นชื่อ vm ของฉันและการแบ่งปันคือชื่อไดเรกทอรีที่ใช้ร่วมกัน
คุณจะได้รับชื่อ vm ดังนี้:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
และชื่อโฟลเดอร์ที่แชร์ไม่ว่าจะผ่าน Virtual Box gui หรือ
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
ฉันรีบูตระบบกล่องเสมือนทั้งหมดที่นี่ฉันไม่ได้เข้าใจถึงความต้องการขั้นต่ำสำหรับการใช้งาน
อย่างไรก็ตามในการทดสอบนี้กลับไปที่หน้าต่าง vbox ของคุณ
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
ไม่มีข้อผิดพลาด - และเพื่อยืนยัน
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 - เพียงเพื่อพิสูจน์ว่ามันใช้ได้ดี
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
โปรดทราบว่าฉันเพิ่งทดสอบสิ่งนี้บนโฮสต์ OSX และไคลเอ็นต์กล่องเสมือน Ubuntu การอ้างอิงที่ฉันระบุไว้ข้างต้นดูเหมือนจะบ่งชี้ว่าอาจมีปัญหาในการใช้โฮสต์ที่ใช้ Windows
ซ้ายการออกกำลังกายสำหรับนักเรียน ———————
ประโยชน์ของวิธีการที่กล่าวข้างต้นคือสามารถทำงานบนเครื่องสแตนด์อะโลนโดยไม่ต้องเข้าถึงเครือข่าย แต่ถ้าคุณคิดเกี่ยวกับเรื่องนี้ปัญหา name-verses-id จะต้องเป็นปัญหาที่พบบ่อยระหว่างสภาพแวดล้อมการคำนวณที่ต่างกัน
มีวิธีแก้ไขปัญหาอื่นใดอีกบ้างที่มีวิธีแก้ไขปัญหานั้น ๆ - สิ่งต่าง ๆ เช่น Active Directory (ผลิตภัณฑ์ Microsoft) และสิ่งที่คล้ายกันอาจสามารถแก้ไขปัญหานี้ได้ มันจะน่าสนใจที่จะได้รับชุดของการแก้ปัญหาเหล่านั้นและเปรียบเทียบคุณสมบัติต่างๆและการแลกเปลี่ยน
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
ที่ umask คือค่าของumask
ของผู้ใช้ UID และ GID จากid <user>
,src
เป็นชื่อของส่วนแบ่งการ VBox และ/meida/sf_src
เป็นที่ต้องการจุดติด