38

我使用vagrantchef在虚拟机中开发自己的博客。为了方便访问 wordpress 文件夹,我创建了一个共享文件夹。

基本上 wordpress 文件夹在我的主机上,并作为共享文件夹安装在 VM 中的 /var/www/wordpress 中。配置类似于:

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

vagrant:vagrant我的问题是,即使我在主机上更改它,我的 VM 中的所有权也始终存在。VM 中的所有权更改被忽略。

我不能chown用来将上传目录的所有权设置为www-data:www-data.

可以使用chmod并将访问限制更改为777,但这是一个非常丑陋的 hack。

这是我真正想要的。这可能吗?:

  • 开发:从我的主机访问共享文件夹。
  • 访问限制:在 VM 上,所有文件和文件夹都应具有适当且安全的所有权和访问限制。
4

5 回答 5

39

正如@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"
于 2012-11-26T16:39:01.067 回答
15

@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

于 2013-10-31T12:16:40.190 回答
8

您可以允许更改来宾内部的所有权:

config.vm.share_folder "foo", "/guest/path", "/host/path", {:extra => 'dmode=777,fmode=777'}
于 2012-11-26T15:55:06.903 回答
2

跟进@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 
于 2013-03-05T17:23:07.503 回答
2

正如其他答案所指出的那样,您可能应该使用ownerandgroup配置选项设置正确的所有者和组。

但是,有时这不起作用(例如,当目标用户仅在稍后在配置期间创建时)。在这些情况下,您可以重新挂载共享:

sudo mount -t vboxsf -o uid=`id -u www-data`,gid=`id -g www-data` /path/to/share /path/to/share
于 2019-01-23T16:46:16.730 回答