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

时间:2012-11-01 00:03:14

标签: centos virtualization virtualbox chmod vagrant

当我访问我的vagrant vm时,我可以更改vagrant用户文件夹之上和之外的文件和文件夹的权限,以及vagrant用户文件夹中的文件的权限。但无法更改vagrant用户文件夹下的文件夹权限。无论是以vagrant用户还是root用户身份登录,我都会遇到同样的问题。

对于改变vagrant用户文件夹中的权限是否存在某种限制? vagrant用户文件夹不与主机操作系统共享,但capistrano部署文件夹和docRoot是共享的。

访客是CentOS 6,主机是OS X 10.7。 Vagrant是1.0.5。 Virtualbox是4.2.1。

7 个答案:

答案 0 :(得分:86)

共享文件夹的格式会在不同版本的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']

答案 1 :(得分:17)

我的问题可能与您有关。

我在游民中有一个centos vm作为访客,win7作为主持人。

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

如果我发现有用的话,

会报告回来。 在这里讨论谷歌小组:

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

更新1:我还读到您无法在共享文件夹中创建符号链接。

更新2: 似乎我无法在创建虚拟框后更改其权限。 但是在VagrantFile中,您可以将共享文件夹的权限设置为套件:I.E。

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

这里我设置了适合我们的所有者,群组和权限。

我希望这会有所帮助。

答案 2 :(得分: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

答案 3 :(得分: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 lockfile(/ var / lock / apache2)或PHP websocket文件(/var/run/php5-fpm.sock)]和webserver的权限。
  • 使用其他VM(HyperV,VMware)代替VirtualBox。其他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 SechresetJeremy Kendall更好地描述了这些答案。

答案 4 :(得分:4)

从主机而不是来宾更改权限。 VirtualBox不允许从guest虚拟机操作系统更改共享文件的权限。

TLDR;问题不在于访客上的用户没有访问主机文件的权限。问题是主机上的virtaul box进程的执行用户没有权限在主机中写入文件。有两组权限。必须像任何其他操作系统一样设置访客权限。您还必须确保运行的guest虚拟机操作系统的虚拟框进程具有该文件夹的权限。如果该进程只具有读访问权限,那么任何访客用户将能够做的最多就是阅读。

答案 5 :(得分:2)

暂时不能发表评论,但要扩展MDeSilva对Vagrant 1.7.2的回答:

可能对一些人来说很明显,但是小组和老板应该在引号中。

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

答案 6 :(得分:0)

对于Vagrant 1.7.2 像这样编辑Vagrant文​​件,

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