VagrantでMac環境向けにNFSを設定するときの権限設定

りんご

例えばVagrantfileに以下のように設定します。

config.vm.synced_folder ".", "/var/www/www-develop.skyarch.net", type: "nfs"
config.nfs.map_uid = ENV['MAC_CURRENT_USER_ID']
config.nfs.map_gid = ENV['MAC_CURRENT_USER_ID']

上記の”ENV[‘MAC_CURRENT_USER_ID’]”はMacのユーザーIDを設定します。

※Macの現在のユーザIDは
 以下のページの”ユーザアカウントのフルネームを変更する”の
 ”macOS Sierra、El Capitan、Yosemite”の手順1~3で確認できます。
macOS のユーザアカウントやホームフォルダの名前を変更する – Apple サポート

このオプションを指定しないでNFS共有を行っていると、
VM側のapache, nginx等のユーザーが
Mac側の共有ディレクトリーにキャッシュを作成しようとした場合など
権限の問題で動作しない等の問題が発生しますが、
このオプションを設定することで回避できます。

↓こちらの説明からはやや解りにくいですが、
NFS – Synced Folders – Vagrant by HashiCorp

“config.nfs.map_uid”, “config.nfs.map_gid”を指定すると
「VM側のあらゆるユーザーが共有ファイルに対してアクセスした」とき、
Vagrantが自動的に、
「Mac側において指定したユーザーがアクセスした」ものとして
処理を行ってくれるようです。

以下、NFSに関する基礎知識です。

NFSサーバー・クライアント間における所有者・グループのマッピング

Vagrantの場合、Mac側がNFSサーバー、VirtualBox側がNFSクライアントとなります。
NFSサーバー(Mac)がNFSクライアント(VM)にファイルを晒す形となります。
その際、何も設定をしないと、NFSクライアント(VM)側で見るファイルの所有者・グループは
NFSサーバー(Mac)側で見るファイルの所有者・グループのIDと同じ
NFSクライアント(VM)側の所有者・グループとなります。
(対応するユーザーが存在しない場合は所有者・グループが番号として表示されます。)

Ex: Macのユーザー”shinoda”のユーザーIDが”501″とすると

# Mac側
ls -la
drwx------. 4 shinoda shinoda 4096 Feb 10 10:28 .
drwxr-xr-x. 6 shinoda shinoda 4096 Feb 9 22:07 ..
drwx------. 3 shinoda shinoda 4096 Feb 7 22:52 test.txt

# VM側
ls -la
drwx------. 4 501 501 4096 Feb 10 10:28 .
drwxr-xr-x. 6 501 501 4096 Feb 9 22:07 ..
drwx------. 3 501 501 4096 Feb 7 22:52 test.txt
りんご

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.