我将Trellis用于WordPress开发。效果很好,只是我发现很难更改已同步文件夹中的文件(或目录)权限。

通常我对默认权限设置没有问题。但是,有时我需要授予对同步主目录(NFS)的某些子目录的写许可权。

这是Vagrantfile,它使用Ansible剧本作为VM的主要配置(I使用VirtualBox)。我不是Ruby程序员,也没有使用过Ansible,但从外观上看,以下是Vagrantfile设置文件权限的部分:

if Vagrant::Util::Platform.windows? and !Vagrant.has_plugin? 'vagrant-winnfsd'
    wordpress_sites.each_pair do |name, site|
        config.vm.synced_folder local_site_path(site), remote_site_path(name, site), owner: 'vagrant', group: 'www-data', mount_options: ['dmode=776', 'fmode=775']
    end
    config.vm.synced_folder ANSIBLE_PATH, ANSIBLE_PATH_ON_VM, mount_options: ['dmode=755', 'fmode=644']
    config.vm.synced_folder File.join(ANSIBLE_PATH, 'bin'), bin_path, mount_options: ['dmode=755', 'fmode=755']
else
    if !Vagrant.has_plugin? 'vagrant-bindfs'
        fail_with_message "vagrant-bindfs missing, please install the plugin with this command:\nvagrant plugin install vagrant-bindfs"
    else
        wordpress_sites.each_pair do |name, site|
            config.vm.synced_folder local_site_path(site), nfs_path(name), type: 'nfs'
            config.bindfs.bind_folder nfs_path(name), remote_site_path(name, site), u: 'vagrant', g: 'www-data', o: 'nonempty'
        end
        config.vm.synced_folder ANSIBLE_PATH, '/ansible-nfs', type: 'nfs'
        config.bindfs.bind_folder '/ansible-nfs', ANSIBLE_PATH_ON_VM, o: 'nonempty', p: '0644,a+D'
        config.bindfs.bind_folder bin_path, bin_path, perms: '0755'
    end
end


如何更改此文件,以便在需要时可以控制对特定文件和文件夹的权限。由于更改主机上的vagrant同步文件夹中的权限不会反映在虚拟机上,因此我至少必须能够通过更改Vagrantfile然后重新进行设置来做到这一点。

如何我可以轻松实现这一点,并在将来进行重新配置时继续存在吗?

评论

您的Vagrantfile很大,也许最好将其相关部分复制到帖子中

更新为CODE

#1 楼

该Vagrantfile分为两部分,一部分用于Windows主机的安装(上半部分),另一部分用于UNIX主机的安装(下半部分),但是本质上是相同的-只是使用不同的插件。

您可以从config.vm.synced_folderconfig.bindfs.bind_folder命令中看到它们使用适当的权限设置了适当的目录。

要添加具有不同权限的新目录,只需将它们添加到列表中即可。请注意,File.join('a','b')只是将路径转换为a/b,但这是一种更好的方法,因为它是平台无关的(在Windows上,它也可以处理\样式路径)。

因此,例如,如果要授予/tmp/needswrite文件夹更多的权限,您可以简单地将以下两行添加到其适当的位置:Windows配置:

config.vm.synced_folder File.join(ANSIBLE_PATH, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), mount_options: ['dmode=777', 'fmode=777']


Unix配置:

config.bindfs.bind_folder File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), perms: '0777'


例如,将其权限设置为777而不是默认的755

请注意,在Windows配置中,您必须从ANSIBLE_PATHANSIBLE_PATH_ON_VM,而在Unix配置上,bindfs将重新安装,因此您需要将它们与相同的目录名称匹配。

您还可以与用户和组一起玩:

Windows配置:

config.vm.synced_folder File.join(ANSIBLE_PATH, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), owner: 'new-owner', group: 'new-group', mount_options: ['dmode=755', 'fmode=755']


Unix配置:

config.bindfs.bind_folder File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), u: 'new-owner', g: 'new-group', perms: '0777'


这里我们将其设置为使用用户new-owner和组new-group