web-dev-qa-db-ja.com

Vagrantホームフォルダー内のフォルダーのアクセス許可を変更できません

Vagrant vmにsshするときに、vagrantユーザーフォルダーの上下のファイルとフォルダー、およびvagrantユーザーフォルダー内のファイルのアクセス許可を変更できます。ただし、Vagrantユーザーフォルダーの下のフォルダーのアクセス許可は変更できません。 Vagrantユーザーとrootとしてログインしても同じ問題があります。

Vagrantユーザーのフォルダー内のアクセス許可の変更に何らかの制限がありますか? vagrantユーザーフォルダーはホストOSと共有されませんが、capistrano deployフォルダーとdocRootは共有されます。

ゲストはCentOS 6、ホストはOS X 10.7です。 Vagrantは1.0.5です。 Virtualboxは4.2.1です。

52
kayaker243

共有フォルダーの形式は、Vagrantのバージョンごとに異なります。ファビオの答えを参照してください https://serverfault.com/questions/398414/vagrant-set-default-share-permissions

Vagrantバージョン1.3.1以前

config.vm.share_folder "v-data", "/export", "/export", :owner => 'vagrant', :group => 'httpd', :extra => 'dmode=775,fmode=775'

Vagrantバージョン1.3.1、1.3.2

Vagrant 1.3.1以降では、extraオプションは、配列を想定するmount_optionsに置き換えられました。

config.vm.share_folder "v-data", "/export", "/export", :owner => 'vagrant', :group => 'httpd', :mount_options => ['dmode=775', 'fmode=775']

Vagrantバージョン> = 1.3.3

Vagrant 1.3.3では、config.vm.share_folderconfig.vm.synced_folderに置き換えられたように見えます。

config.vm.synced_folder "v-data", "/export", "/export", :owner => 'vagrant', :group => 'httpd', :mount_options => ['dmode=775', 'fmode=775']

87
Greg Elin

私の問題はあなたに関連しているかもしれません。

ゲストとしてvagrantにcentos vmがあり、ホストとしてwin7があります。

ホストと共有されているフォルダーのVMのアクセス許可を実際に変更することはできません。

何か有用なものが見つかった場合は報告します。ここでグーグルグループについて議論してください:

https://groups.google.com/forum/?fromgroups=#!topic/vagrant-up/2JvcoZTuWRI

更新1:また、共有フォルダにシンボリックリンクを作成できないことも読んでいます。

UPDATE 2:仮想ボックスの作成後、仮想ボックスの権限を変更できないようです。ただし、VagrantFileでは、共有フォルダーのアクセス許可をスイートに設定できます:I.E.

config.vm.share_folder "v-data", "/export", "/export", :owner=> 'vagrant', :group=>'httpd', :extra => 'dmode=775,fmode=775'

ここで、所有者、グループ、および私たちのために働く許可を設定しました。

これがお役に立てば幸いです。

17
Jamie.Good

Vagrant 1.2.7では、バージョン2のVagrantfileが使用されるため、構文は以前の回答と若干異なります。その下にあるのがCentOS 6.2のトリックです。私の状況では、ソースとして相対パスを使用するのが最適です。共有フォルダーを指します。

config.vm.synced_folder "./", "/vagrant", owner: 'vagrant', group: 'Apache', extra: 'dmode=775,fmode=775'

Jamieが述べたように、まだ設定する必要がありますbefore creationですので、vagrant reloadオーバーライドするVagrantfileを編集した後。

9

VirtualBoxでは、同期されたフォルダーの所有者/アクセス許可を変更することはできません。

Vagrantファイルで変更することができます(他のユーザーの回答に従って)。
グループではなく所有者の変更を検討してください。
これも考慮してください-サーバーがファイルに書き込みできるようにした場合、サーバーはhttpdではなくwww-dataと呼ばれる可能性があります。つかいます ps aux | grep nginx [またはApache/lighthttpd]をチェックします。

他にもいくつかのオプションがあります。

  • 同期フォルダーではなく、共有ファイルにアクセスしているプログラムの所有者を変更します。
    たとえば、PHPがファイルに書き込む必要がある場合、サーバーを変更し、PHP vagrantとして実行します。[Apacheでは、これで完了ですNGINXのユーザーはnginx.confに設定され、php-fpmのユーザーは php-fpm.conf またはそれに含まれるファイルの1つにあります。
    Apacheロックファイル(/ var/lock/Apache2)またはPHP websocket file(/var/run/php5-fpm.sock))のアクセス許可を変更する必要がありますウェブサーバー。
  • VirtualBoxの代わりに別のVM(HyperV、VMware)を使用します。他のVMにはこの制限がないようです。
  • デフォルトの同期を使用する代わりに、RSynを使用してファイルを同期します。
    config.vm.synced_folder "/var/www/", type: "rsync"
  • すべてのアクセス許可を777に設定します。通常、これは悲惨であり、提案すらされません。それはまだ悪い考えですが、VMはおそらく実行可能です。しかし、共有アクセスを与える前によく考えてください。
    config.vm.synced_folder "/var/www/", mount_options: ["dmode=777", "fmode=666"]

これらの答えは Ryan Sechreset および Jeremy Kendall でより適切に説明されています。

6
SamGoody

ゲストではなくホストから権限を変更します。 VirtualBoxは、ゲストOSからの共有ファイルのアクセス許可の変更を許可しません。

TLDR;問題は、ゲストのユーザーがホストファイルにアクセスする権限を持っていないことではありません。問題は、ホスト上の仮想ボックスプロセスの実行ユーザーが、ホストにファイルを書き込む権限を持っていないことです。許可には2つのセットがあります。ゲストのアクセス許可は、他のOSと同様に設定する必要があります。また、ゲストOSが実行されている仮想ボックスプロセスにそのフォルダーへのアクセス許可があることを確認する必要があります。そのプロセスに読み取りアクセス権しかない場合、ゲストユーザーが実行できるほとんどのアクセス権は読み取りです。

4
Stewart

まだコメントできませんが、Vagrant 1.7.2に対するMDeSilvaの回答を拡張するために:

一部の人には自明かもしれませんが、グループと所有者は引用符で囲む必要があります。

group: "sync_group", owner: "sync_owner", mount_options: ['dmode=755, fmode=644']
2
orediggerco

Vagrant 1.7.2の場合、Vagrantファイルを次のように編集します。

group: sync_group, owner: sync_owner, mount_options: ['dmode=777', 'fmode=776']
0
Shaolin