问题
I use vagrant and chef to develop my own blog in a virtual machine. To have easy access to the wordpress folder I created a shared folder.
Basically the wordpress folder is on my host and gets mounted as shared folder in /var/www/wordpress in the VM. The configuration is similar to:
config.vm.share_folder "foo", "/guest/path", "/host/path"
My problem is that the ownership in my VM is always vagrant:vagrant
even if I change it on my host. Ownership changes in the VM get ignored.
I cannot use chown
to set the ownership of the upload directory to www-data:www-data
.
It is possible to use chmod
and change the access restrictions to 777
, but this is a really ugly hack.
Here is what I actually want. Is this possible?:
- Development: Access to the shared folder from my host.
- Access Restriction: On the VM all files and folders should have proper and secure ownership and access restrictions.
回答1:
As @StephenKing suggests you can change the options of the whole directory.
The relevant function is not documented but the source tells us:
# 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
Basically you can set group, owner and acl for the whole folder which is way better than setting everything to world writable on the host. I have not found any method to change the ownership of a nested directory.
Here is a quickfix:
config.vm.share_folder "v-wordpress", "/var/www/wordpress", "/host/path", :owner => "www-data", :group => "www-data"
回答2:
@john-syrinek
in 1.2+
config.vm.synced_folder "src/", "/srv/website",
owner: "root", group: "root"
http://docs.vagrantup.com/v2/synced-folders/basic_usage.html
回答3:
You can allow changing the ownership inside the guest:
config.vm.share_folder "foo", "/guest/path", "/host/path", {:extra => 'dmode=777,fmode=777'}
回答4:
Following up on @StephenKing and @aycokoster awesome tips, I had a use-case for mounting another directory read-only.
I added
config.vm.share_folder "foo", "/guest/path", "/host/path", :extra => 'ro'
and
# discard exit status because chown `id -u vagrant`:`id -g vagrant` /host/path is okay
vagrant up || true
回答5:
As the other answers have pointed out you should probably set the correct owner and group using the owner
and group
configuration options.
However, sometimes that won't work (for example when the target user is only created later on during provision). In these cases, you can remount the share:
sudo mount -t vboxsf -o uid=`id -u www-data`,gid=`id -g www-data` /path/to/share /path/to/share
来源:https://stackoverflow.com/questions/13566201/can-i-modify-the-ownership-for-a-shared-folder-in-vagrant