55

当我 ssh 进入我的 vagrant vm 时,我可以更改 vagrant 用户文件夹上方和外部的文件和文件夹的权限,以及 vagrant 用户文件夹内的文件的权限。但无法更改 vagrant 用户文件夹下文件夹的权限。无论是否以 vagrant 用户和 root 身份登录,我都有同样的问题。

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

来宾是 CentOS 6,主机是 OS X 10.7。流浪者是 1.0.5。Virtualbox 是 4.2.1。

4

7 回答 7

91

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

流浪者版本 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']

流浪版本 >=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']

于 2013-09-26T09:49:43.500 回答
17

我的问题可能和你有关。

我有一个 vagrant 中的 centos vm 作为访客,win7 作为主机。

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

如果我发现任何有用的东西会报告。在这里讨论谷歌组:

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

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

更新2: 似乎我无法在创建虚拟框后更改它的权限。但是在 VagrantFile 中,您可以将共享文件夹的权限设置为适合的内容:IE

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

在这里,我设置了所有者、组和对我们有用的权限。

我希望这有帮助。

于 2012-11-12T16:33:26.957 回答
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 所说,在创建之前vagrant reload配置它仍然是必要的,所以在你编辑完覆盖的 Vagrantfile 之后使用它。

于 2013-08-22T21:09:47.507 回答
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)] 和 webserver 的权限。
  • 使用不同的 VM(HyperV、VMware)而不是 VirtualBox。其他虚拟机似乎没有这个限制。
  • 使用 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更好地描述了这些答案。

于 2014-09-14T08:55:48.203 回答
4

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

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

于 2013-09-14T00:24:36.273 回答
2

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

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

group: "sync_group", owner: "sync_owner", mount_options: ['dmode=755, fmode=644']
于 2015-04-28T13:10:16.363 回答
0

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

group: sync_group, owner: sync_owner, mount_options: ['dmode=777', 'fmode=776']
于 2015-03-24T10:04:15.230 回答