web-dev-qa-db-ja.com

vagrantの共有フォルダーの所有権を変更できますか?

vagrantchefを使用して、仮想マシンで自分のブログを開発しています。 wordpressフォルダに簡単にアクセスできるように、共有フォルダを作成しました。

基本的にwordpressフォルダは私のホストにあり、VMの/ var/www/wordpressに共有フォルダとしてマウントされます。構成は次のようになります:

config.vm.share_folder "foo", "/guest/path", "/Host/path"

私の問題は、私のVM=の所有権は、ホスト上でそれを変更しても常にvagrant:vagrantです。VMの所有権の変更は無視されます。

chownを使用してアップロードディレクトリの所有権をwww-data:www-dataに設定できません。

chmodを使用してアクセス制限を777に変更することは可能ですが、これは本当に醜いハックです。

これが私が実際に欲しいものです。これは可能ですか?:

  • 開発:ホストから共有フォルダーへのアクセス。
  • アクセス制限:VMでは、すべてのファイルとフォルダーに適切で安全な所有権とアクセス制限が必要です。
35
ayckoster

@StephenKingが示唆するように、ディレクトリ全体のオプションを変更できます。

関連する関数は文書化されていませんが、 ソース は次のように伝えています。

# File 'lib/vagrant/config/vm.rb', line 53

def share_folder(name, guestpath, hostpath, opts=nil)
  @shared_folders[name] = {
    :guestpath => guestpath.to_s,
    :hostpath => hostpath.to_s,
    :create => false,
    :owner => nil,
    :group => nil,
    :nfs   => false,
    :transient => false,
    :extra => nil
  }.merge(opts || {})
end 

基本的に、フォルダ全体にグループ、所有者、ACLを設定できます。これは、ホストですべてを書き込み可能に設定するよりもはるかに優れています。ネストされたディレクトリの所有権を変更する方法は見つかりませんでした。

ここにクイックフィックスがあります:

config.vm.share_folder "v-wordpress", "/var/www/wordpress", "/Host/path", :owner => "www-data", :group => "www-data"
38
ayckoster

@ john-syrinek

1.2+

config.vm.synced_folder "src/", "/srv/website",
  owner: "root", group: "root"

http://docs.vagrantup.com/v2/synced-folders/basic_usage.html

13
Sean Burlington

ゲスト内の所有権の変更を許可できます。

config.vm.share_folder "foo", "/guest/path", "/Host/path", {:extra => 'dmode=777,fmode=777'}
8
StephenKing

@StephenKingと@aycokosterのすばらしいヒントに続き、別のディレクトリを読み取り専用でマウントするための使用例がありました。

追加した

config.vm.share_folder "foo", "/guest/path", "/Host/path", :extra => 'ro'

そして

# discard exit status because chown `id -u vagrant`:`id -g vagrant` /Host/path is okay

vagrant up || true 
2
user246672

他の回答で指摘されているように、ownerおよびgroup構成オプションを使用して、正しい所有者とグループを設定する必要があります。

ただし、それが機能しない場合があります(たとえば、ターゲットユーザーがプロビジョニング中に後でのみ作成される場合など)。これらの場合、共有を再マウントできます。

Sudo mount -t vboxsf -o uid=`id -u www-data`,gid=`id -g www-data` /path/to/share /path/to/share
0
Florian Brucker