問題-OSX共有ドライブにアクセスするvbox / ubuntuの許可の問題
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
目標は、Mac環境とUbuntu環境の間でディレクトリを共有する簡単な方法です。残念ながら、これまで見てきた例は、実際に必要なものよりも少し複雑であるように思われ、解決する必要のある実際の問題を実際に説明していません。ここでは、これらの問題の両方を処理しようとします。
ここでの環境は、OSX 10.9.5を実行しているMacで、Virtual Box 4.3.16がゲスト拡張機能がインストールされたUbuntu-14.04.1を実行しています。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はadminユーザーであり、彼の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:——————
シンプルなデフォルトの仮想ボックスとubuntuのインストール-繰り返しますが、joe_publicはubuntuのインストール時に作成されたデフォルトの管理者です。
OSXとUbuntuの間の名前空間は完全に異なることに再度注意してください。ここでは、2つの名前の間にまったく関係はありません。
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の設定->共有フォルダー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の gidを変更したくありません。これは、既にインストールされているシステムの問題であり、他のユーザーにとっては解決できないためです。最も簡単な解決策は、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グループを作成する必要があります。ここで名前が実際に違いを生むとは思いません。重要なのは999グループIDです。ホストとVMオペレーティングシステムでは、ディレクトリシステムの名前空間(およびユーザー名)が異なることに注意してください。しかし、人生を正気にするために、私たちは皆、Mac で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を単に削除することです
グループ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:-もう1つの問題-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$
そして、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ベースのホストの実行に問題がある可能性を示しているようです。
学生のための左の運動———————
上記の方法の利点は、ネットワークアクセスなしでスタンドアロンのマシンで実行できることです。しかし、これについて考えると、この名前とIDの問題は、異種コンピューティング環境間で共通の問題にならなければなりません。
その問題の解決策が利用可能な場合、他にどのような解決策が利用可能ですか?— Active Directory(Microsoft製品)などがこれを解決できる可能性があります。これらのソリューションのコレクションを取得し、さまざまな機能とトレードオフを比較することは興味深いでしょう。
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
、umaskがumask
ユーザーの値、uidとgidがfromid <user>
、src
VBox共有の名前、および/meida/sf_src
目的のマウントポイントであるdoです。