无法更改vagrant主目录中文件夹的权限

59

当我通过ssh登录到我的vagrant虚拟机时,我可以更改vagrant用户文件夹之上和之外的文件和文件夹的权限,但无法更改vagrant用户文件夹下的文件夹的权限。不管是用vagrant用户还是root用户登录,我都有同样的问题。

是否存在一些限制来更改vagrant用户文件夹中的权限呢?vagrant用户文件夹没有与主机操作系统共享,但capistrano部署文件夹和docRoot是共享的。

客户机为CentOS 6,主机为OS X 10.7。Vagrant版本为1.0.5。Virtualbox版本为4.2.1。

7个回答

93
共享文件夹的格式在不同版本的Vagrant中会有所变化。请参见Fabio的答案: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_folder已被替换为config.vm.synced_folder

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


如果您对Vagrant版本、share_folder和synced_folder命令有更多信息,请进行评论。我没有在每个Vagrant版本上测试每个语句,并且找不到清晰的文档。我确实发现了这个相关的Vagrant pull问题:https://github.com/mitchellh/vagrant/pull/1029 - Greg Elin
这需要得到更多的点赞。对于较新版本的:mount_options,几乎没有任何文档记录;我只能通过反复尝试来找出正确的用法。 - Amelia
为什么要将组设置为httpd +权限更改,而不是仅将所有者设置为httpd(而不是vagrant)? - SamGoody
这个解决方案在我的 Vagrant 1.6.5 版本中不起作用。 将所有者和组更改为 www-data 后,客户机操作系统中的所有者和组仍然是 vagrant。 - Tyguy7
显然它仍然显示vagrant用户和组,但它确实作为所选用户和组运行,解决了我的问题。 - Tyguy7
显示剩余4条评论

17

我的问题可能与你的有关。

我在vagrant中有一个centos虚拟机作为客户端,Win7作为宿主机。

我无法实际更改与宿主机共享的任何文件夹的虚拟机权限。

如果发现任何有用的信息,我会回报的。

在此处讨论:

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

更新1:我也看到了不能在共享文件夹中创建符号链接。

更新2:似乎在创建后无法更改虚拟机中的权限。但是,在VagrantFile中,您可以将共享文件夹的权限设置为适当的值:例如:

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

我已经设置了适合我们的所有者、组和权限。

希望这可以帮到您。


1
似乎在创建虚拟机后无法更改VirtualBox中的权限。但是,在VagrantFile中,您可以将共享文件夹的权限设置为适当的内容:例如,config.vm.share_folder "v-data", "/export", "/export",:owner=> 'vagrant',:group=>'httpd',:extra => 'dmode=775,fmode=775' - Jamie.Good
6
您可以运行 vagrant reload 命令来应用这些更改到 Vagrantfile 文件。 - Jon Burgess
7
我更喜欢使用“dmode=775,fmode=664”。 - wik
我也是,除了使用Ansible运行Django数据库迁移之外,我需要使Django的manage.py可执行。由于没有办法仅更改该文件的权限,因此我不得不使用['dmode=775', 'fmode=777'] - Phil Gyford

9
在Vagrant 1.2.7中,使用版本2的Vagrantfiles,因此语法与之前的回答略有不同。以下是我在CentOS 6.2上使用的窍门。我发现在我的情况下,使用相对路径作为源最有效。它指向共享文件夹。
``` config.vm.synced_folder "./", "/vagrant", owner: 'vagrant', group: 'apache', extra: 'dmode=775,fmode=775' ```
正如Jamie所述,你仍然需要在创建之前配置它,因此在编辑覆盖的Vagrantfile后使用`vagrant reload`。

6

VirtualBox无法更改同步文件夹的所有者/权限。

您可以在Vagrant文件中更改它(如其他人所回答的)。
考虑更改所有者而不是组。
还要考虑,如果这样做使您的服务器可以写入文件,则您的服务器很可能被称为www-data,而不是httpd。使用ps aux | grep nginx [或apache / lighthttpd] 进行检查。

还有其他一些选项:

  • 更改访问共享文件的程序的所有者,而不是同步文件夹。
    例如,如果PHP需要写入文件,则将服务器和PHP更改为以vagrant身份运行。[在Apache中,在httpd.conf中完成。NGINX的用户在nginx.conf中设置,php-fpm的用户在php-fpm.conf或其包含的文件之一中设置。
    您需要更改Apache锁定文件(/var/lock/apache2)或PHP websocket文件(/var/run/php5-fpm.sock)的权限以及Web服务器。
  • 使用不同的VM(HyperV、VMware)代替VirtualBox。其他VM似乎没有此限制。
  • 使用RSyn来同步文件而不是使用默认同步。
    config.vm.synced_folder "/var/www/", type: "rsync"
  • 将所有权限设置为777。通常这是灾难性的,甚至不推荐。但在虚拟机上可能可行。在共享访问之前三思。
    config.vm.synced_folder "/var/www/", mount_options: ["dmode=777", "fmode=666"]

这些答案由Ryan SechrestJeremy Kendall更详细地描述。


5

不要从客户机更改权限,而是从主机端更改权限。VirtualBox不允许从客户机操作系统更改共享文件的权限。

太长不看版:问题并不在于您的客户机用户没有权限访问主机文件,而在于主机上的虚拟机进程执行用户没有权限写入主机中的文件。存在两组权限。必须像任何其他操作系统一样设置客户机权限。还必须确保运行客户机操作系统的virtualbox进程具有对该文件夹的权限。如果该进程只有读取访问权限,则任何客户机用户最多只能读取文件。


3
我一直遇到同样的问题,这并没有帮助,因为在Vagrant盒子上存在的用户在主机上不存在。 - RonnyKnoxville
这实际上帮了我很多。如果同步文件夹设置正确,它会有所帮助。 - SasaT
@JackalopeZero 问题不在于您的访客用户没有权限访问您的主机文件,而是虚拟机进程在主机上执行的用户没有写入文件的权限。有两组权限。访客权限必须像任何其他操作系统一样设置。您还必须确保运行访客操作系统的虚拟机进程具有对该文件夹的权限。如果该进程只具有读取访问权限,则任何访客用户能够做的最多只是读取。包括管理员用户。 - Stewart

2

目前我不能评论,但是想对MDeSilva在Vagrant 1.7.2方面的回答进行扩展:

对于一些人来说可能很明显,但是组和所有者应该用引号括起来。

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

虽然Vagrant通常用作开发环境,但这并不意味着需要更改权限。在Web服务器(这里是apache)组作为“group”设置的情况下,“dmode=755”和“fmode=644”通常足够了。 - domdambrogia

0

对于 Vagrant 1.7.2 版本,需要像这样编辑 Vagrant 文件:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接