Vấn đề - vấn đề về quyền trong vbox / ubfox khi truy cập ổ đĩa chia sẻ OSX
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Mục tiêu là một cách đơn giản để chia sẻ các thư mục giữa các môi trường Mac và Ubuntu. Thật không may, các ví dụ mà tôi đã thấy cho đến nay dường như phức tạp hơn một chút so với thực tế chúng cần phải có, và không thực sự giải thích vấn đề thực sự cần phải giải quyết là gì. Tôi sẽ cố gắng xử lý cả hai vấn đề đó ở đây.
Môi trường ở đây là máy Mac chạy OSX 10.9.5, với Virtual Box 4.3.16 thực thi Ubuntu-14.04.1 với các tiện ích mở rộng Guest được cài đặt. Tháng 9 năm 2014 thứ.
Tôi nghĩ rằng toàn bộ vấn đề ở đây là uid của các thư mục trên Mac và trong Ubuntu phải khớp - Các gid mặc định được gán cho người dùng và các nhóm khác nhau giữa OSX và Ubuntu và đó là vấn đề nằm ở chỗ.
Để truy cập một tập tin, người ta phải sở hữu nó hoặc là thành viên của nhóm sở hữu nó. Và vì quyền truy cập thực sự dựa trên số id của nhóm chứ không phải tên nhóm, tất cả những gì cần thiết là tạo một số nhóm chung ở cả hai bên, mà người dùng thuộc về.
Đó chính xác là những gì giải pháp dưới đây làm. Đừng hiểu lầm về độ dài của những gì được viết, nó thực sự rất đơn giản. Có rất nhiều ví dụ về những gì đang diễn ra.
Tôi sẽ chuyển giữa các bảng điều khiển OSX và VBOX ở đây (mac và hộp ảo / ubfox) trong tài liệu này - đảm bảo bạn hiểu cửa sổ nào của bạn.
Lưu ý cuối cùng: Giải pháp hiển thị bên dưới dựa trên việc thiết lập id nhóm chung giữa môi trường OSX và Ubuntu, để các quyền của tệp hoạt động. Có thể có những giải pháp khác, hiện đại hơn. Điều này là thực sự đơn giản và dễ hiểu, và chạy trên các cài đặt cơ bản chưa được trang bị xương trần.
OSX:
Lưu ý rằng đã được thực hiện trên một bản mới 10.9.5 Mac, không có gì trên đó, không được kết nối với mạng công ty, không có gì lạ mắt chạy trên nó ngoài phần mềm chứng khoán. Điều này là đơn giản như nó được.
Khi tôi thực hiện cài đặt mặc định trên Mac, joe_public là người dùng quản trị và uid của anh ta được đặt thành 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)
Lưu ý rằng uid là 501 - đây là id tài khoản đầu tiên mặc định trên OSX - không có gì đặc biệt
Tôi đã tạo một vài thư mục mà tôi muốn chia sẻ ở phía Mac - Lưu ý rằng tôi đã không đặt chúng trong thư mục người dùng của mình vì lý do sao lưu.
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:
Hộp ảo mặc định đơn giản và cài đặt Ubuntu - một lần nữa, joe_public là quản trị viên mặc định được tạo khi tôi cài đặt ubfox .
Xin lưu ý một lần nữa, không gian tên giữa OSX và Ubuntu là hoàn toàn khác nhau. Hoàn toàn không có mối quan hệ giữa hai tên ở đây.
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)
Đã tạo ba điểm gắn kết, sử dụng Cài đặt của Hộp ảo -> gui Thư mục được chia sẻ.
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
LƯU Ý: Tôi thực sự phải khởi động lại phiên của mình để tất cả các điểm gắn kết này xuất hiện.
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)
Lưu ý rằng gid cho những cái này là 999 - đây là nhóm vboxsf .
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
Điều này đã được chỉ định tự động bởi Virtual Box phiên bản 4.3.16 cho chúng tôi. Tài liệu vbox chỉ ra cách thay đổi điều này nếu bạn gắn đường dẫn thủ công thông qua dòng lệnh, nhưng ai sẽ nhớ điều đó - Đơn giản chỉ cần lấy các mặc định mà GUI buộc chúng ta ..
Nhưng nó không hoạt động (dự kiến tại thời điểm này - đó là những gì chúng tôi đang cố gắng giải quyết)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Lưu ý rằng tại thời điểm này, joe_public không phải là thành viên của nhóm vboxsf đó - và đó sẽ là một vấn đề cho đến khi chúng tôi khắc phục nó. FYI: Đây là các nhóm mặc định được gán cho tài khoản khi nó được tạo.
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
Vì vậy, những gì chúng tôi có tại thời điểm này (chúng tôi chưa làm gì để khắc phục nó)
• 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
Chúng tôi không muốn thay đổi gid của người dùng joe_public ở cả hai bên, vì đó là một vấn đề khó khăn đối với các hệ thống đã được cài đặt và không giải quyết điều này cho những người dùng khác. Giải pháp đơn giản nhất là tạo id nhóm phù hợp - vboxsf - ở bên mac và đảm bảo rằng joe_public là thành viên của cả hai bên.
Vì vậy, vẫn còn trên vbox / ubuntu, hãy joe_public một thành viên của 999 vboxsf nhóm
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
Tôi nghĩ rằng tôi đã đăng xuất khỏi tài khoản của mình và quay lại đây sau khi tôi làm điều này.
OSX:
Bây giờ chúng ta cần tạo một nhóm vboxsf trên mac. Tôi nghi ngờ rằng cái tên thực sự tạo ra sự khác biệt ở đây - đó là id nhóm 999 quan trọng. Xin nhớ rằng các không gian tên hệ thống thư mục (cũng như tên người dùng) khác nhau giữa máy chủ và hệ điều hành VM. Nhưng chỉ để làm cho cuộc sống lành mạnh, tất cả chúng ta gọi nó là vboxsf trên mac. Lý do tương tự tại sao joe_public được sử dụng tên người dùng ở cả hai bên.
OSX không có lệnh add nhóm đơn giản như linux - vì vậy hãy sử dụng lệnh dscl để thực hiện việc này theo nhiều bước. Xin vui lòng xem tài liệu mac os để biết thêm chi tiết về điều này. Lưu ý rằng chúng tôi tạo nhóm vboxsf và thêm joe_public vào nhóm đó tại đây.
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
Vì vậy, tại thời điểm này, chúng ta nên có
• 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
Bằng chứng ở đây là nếu nó hoạt động - vì vậy đó là bước tiếp theo
VBOX:
cd vào thư mục của chúng tôi và chạm vào một tập tin
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
Kiểm tra xem chúng tôi đã tạo một tệp thành công.
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
Tất cả dường như đang hoạt động ..
VBOX: XÁC NHẬN ĐÁNH GIÁ CUỐI CÙNG
Những gì chúng tôi đang kiểm tra ở đây là toàn bộ điều này phụ thuộc vào người dùng joe_public là thành viên của nhóm vboxsf - và cách đơn giản nhất chỉ đơn giản là xóa joe_public khỏi nhóm
Xóa người dùng joe_public khỏi nhóm vboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
Xem liệu chúng tôi có thể truy cập vào thư mục của mình không - và chúng tôi không thể, và điều này chứng tỏ đó là vấn đề về quyền của nhóm
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Thêm người dùng trở lại vào vboxsf
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
Nó hoạt động trở lại!
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: - MỘT VẤN ĐỀ THÊM - liên kết tượng trưng trong vbox -------
Nếu bạn truy cập vào / media / sf_ Shared , bạn sẽ thấy rằng các liên kết tượng trưng trong các thư mục được chia sẻ đơn giản là không hoạt động. Đây là một vấn đề thực sự lớn nếu bạn đang cố gắng thiết lập môi trường phát triển linux đầy đủ trên một ổ đĩa chung.
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
Theo mặc định, các liên kết tượng trưng không được hỗ trợ trên các chia sẻ hộp ảo. Xem dưới đây để giải thích. Về cơ bản theo tôi hiểu, các liên kết tượng trưng là một lỗ hổng bảo mật được "sửa" trong Hộp ảo bằng cách vô hiệu hóa hỗ trợ cho chúng trong khung thời gian 4.1.8 (2011). Tôi đang chạy 4.3.16 tại đây ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-spl-folder-symlink-error/
May mắn thay, có một cửa sau để kích hoạt lại nó, thông qua lệnh VBoxManage của Host . Như mọi khi, xin vui lòng hiểu các lỗ hổng bảo mật ở đây mà bạn có thể đang mở. Tôi đang sử dụng một cỗ máy phát triển độc lập, vì vậy điều này dường như không phải là vấn đề.
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
Lưu ý: Ubuntu là tên vm của tôi và được chia sẻ là tên thư mục dùng chung.
Bạn có thể lấy tên vm như thế này:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
Và tên thư mục được chia sẻ, thông qua gui của Virtual Box, hoặc
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
Tôi đã khởi động lại toàn bộ hệ thống hộp ảo ở đây, tôi không tìm ra yêu cầu tối thiểu để thực hiện.
Dù sao, để kiểm tra điều này, hãy quay lại cửa sổ vbox của bạn
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
Không có lỗi - và để xác minh
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: ----------
Và trở lại về phía mac - chỉ để chứng minh tất cả đều hoạt động
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
Xin lưu ý, tôi chỉ thử nghiệm điều này trên máy chủ OSX và máy khách hộp ảo Ubuntu. Các tài liệu tham khảo mà tôi liệt kê ở trên dường như chỉ ra rằng có thể có vấn đề khi chạy máy chủ dựa trên Windows.
BÀI TẬP TRÁCH NHIỆM CHO SINH VIÊN
Lợi ích của phương pháp được liệt kê ở trên là nó có thể chạy trên một máy độc lập, không có quyền truy cập mạng. Nhưng nếu bạn nghĩ về điều này, vấn đề tên-id-id này đã trở thành một vấn đề phổ biến giữa bất kỳ môi trường điện toán không đồng nhất nào.
Những giải pháp nào khác có sẵn khi giải pháp cho vấn đề đó có sẵn? - Những thứ như Active Directory (một sản phẩm của Microsoft) và những thứ tương tự có thể có thể giải quyết điều này. Sẽ rất thú vị khi có được một bộ sưu tập các giải pháp đó và so sánh các tính năng và sự đánh đổi khác nhau.
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
, trong đó umask là giá trị củaumask
người dùng, uid và gid đến từid <user>
,src
là tên của chia sẻ VBox và/meida/sf_src
là điểm gắn kết mong muốn.