문제-OSX 공유 드라이브에 액세스하는 vbox / ubuntu의 권한 문제
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
목표는 Mac과 Ubuntu 환경간에 디렉토리를 공유하는 간단한 방법입니다. 불행히도 지금까지 본 예제는 실제 필요한 것보다 조금 더 복잡해 보이며 실제로 해결해야 할 실제 문제를 설명하지는 않습니다. 여기서 두 가지 문제를 모두 처리하려고합니다.
여기 환경은 게스트 확장이 설치된 Ubuntu-14.04.1을 실행하는 Virtual Box 4.3.16과 함께 OSX 10.9.5를 실행하는 Mac입니다. 2014 년 9 월 물건.
여기서의 모든 문제 는 Mac과 Ubuntu에있는 디렉토리 의 uid 가 일치해야한다는 것입니다. — 사용자와 그룹에 할당 된 기본 gid는 OSX와 Ubuntu에서 서로 다르므로 문제가있는 곳입니다.
파일에 액세스하려면 파일을 소유하거나 파일을 소유 한 그룹의 구성원이어야합니다. 액세스는 실제로 그룹 이름이 아닌 그룹의 ID 번호를 기반으로하기 때문에 사용자가 속한 양쪽에 공통 그룹 번호를 작성하기 만하면됩니다.
바로 아래 솔루션이하는 일입니다. 작성된 내용의 길이에 오해하지 마십시오. 실제로 매우 간단합니다. 무슨 일이 일어나고 있는지에 대한 많은 예가 있습니다.
이 문서 내에서 OSX 와 VBOX 콘솔 (mac 및 virtual-box / ubuntu)을 전환 할 예정 입니다. 어떤 창을 이해했는지 확인하십시오.
최종 참고 사항 : 아래에 표시된 솔루션은 파일 권한이 작동하도록 OSX와 Ubuntu 환경간에 공통 그룹 ID를 설정하는 것을 기반으로합니다. 더 현대적인 다른 솔루션이있을 수 있습니다. 이것은 정말 간단하고 이해하기 쉽고 기본 뼈대 기본 설치에서 실행됩니다.
OSX : —————
즉, 10.9.5 Mac에서 즉시 사용 가능하며, 회사 네트워크에 연결되지 않고 주식 소프트웨어 이외의 다른 것도 실행되지 않습니다. 이것은 얻는 것처럼 간단합니다.
Mac에서 기본 설치를 수행했을 때 joe_public 은 관리자이고 그의 uid는 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의 기본 첫 번째 계정 ID입니다 - 아무것도 특별
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 : ——————
간단한 기본 가상 상자 및 우분투 설치-다시 한 번 joe_public 은 우분투를 설치할 때 만든 기본 관리자입니다.
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)
가상 박스의 설정-> 공유 폴더 GUI를 사용하여 3 개의 마운트 지점을 만들었습니다 .
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 그룹 의 구성원이 아니며 수정하기 전까지는 문제가 될 것입니다. 참고 : 계정을 만들 때 계정에 할당 된 기본 그룹입니다.
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
우리는 이미 설치된 시스템의 엉덩이가 고통 스럽고 다른 사용자에게는 이것을 해결하지 않기 때문에 사용자 joe_public의 양쪽 을 변경하고 싶지 않습니다. 가장 간단한 해결책은 mac 측에서 일치하는 그룹 ID ( vboxsf )를 만들고 joe_public 이 양쪽에있는 구성원 인지 확인하는 것 입니다.
따라서 여전히 vbox / ubuntu에서 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 : —————
이제 Mac 에서 vboxsf 그룹 을 만들어야합니다 . 여기서 이름이 실제로 다른 점을 의심합니다 . 중요한 그룹 ID 는 999 입니다. 디렉토리 시스템 이름 공간 (및 사용자 이름)은 호스트와 VM 운영 체제간에 다릅니다. 그러나 인생을 제정신으로 만들기 위해 우리는 모두 맥에서 vboxsf 라고 부릅니다 . 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@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의 심볼릭 링크 -------
당신이에 가면 / 미디어 / 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)에서 지원을 비활성화하여 Virtual Box에서 "고정 된"보안 허점입니다. 여기 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의 이름이며 shared 는 공유 디렉토리 이름입니다.
다음과 같이 vm 이름을 얻을 수 있습니다.
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
그리고 가상 폴더 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 : ----------
그리고 다시 맥 쪽에서-모든 것이 잘 작동하는지 증명하기 위해
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
(가) 마운트 포인트 바람직하다.