我正在构建一个开发环境,其中主机环境 (OSX) 中的文件夹安装在运行 Ubuntu 来宾的 VirtualBox VM 中。
我们的经验是,简单的 VirtualBox 共享目录太慢,因此我们通常通过在来宾中将目录作为 NFS 挂载来实现这一点。从主机环境进行实时编辑是一项要求。
这样做的问题是chown
和等操作chgrp
会失败,我们需要复制一些接近我们生产环境的东西(例如www-data
拥有 Apache 使用的文件)。
绑定文件系统看起来很有希望:
bindfs - 镜像或覆盖具有更改权限的本地目录
但似乎无法使用本机 unix 实用程序和系统调用来更改权限。这对我来说不起作用,因为我需要与提供盒子的现有配置管理系统(Salt、Puppet)集成。
就权限而言,是否有其他方法可以使 NFS 挂载看起来像常规目录?或者将目录安装到 VirtualBox VM 中的另一种选择?
编辑:这是安装的输出:
192.168.34.1:/Users/$me/src/states /etc/apps/state type nfs (rw,vers=3,addr=192.168.34.1)
192.168.34.1:/Users/$me/src/apps on /srv/apps type nfs (rw,vers=3,addr=192.168.34.1)
当我说更改权限“失败”时,我的意思是我收到“不允许操作”错误。
例如:
$ ls -l /srv/www
total 8
drwxrwxr-x 4 501 dialout 136 May 31 16:20 default_vhost
drwxrwxr-x 5 501 dialout 170 May 31 16:20 default_vhost_ssl
$ chown root /srv/www/*
chown: changing ownership of `/srv/www/default_vhost': Operation not permitted
chown: changing ownership of `/srv/www/default_vhost_ssl': Operation not permitted
答案1
只有root可以使用chown
。无论是否使用 NFS,您都需要chown
以 root 身份运行。
默认情况下,NFS将本地root用户映射到远程用户nobody
。这使得chown
无法使用,您必须在服务器上运行它。如果客户端 root 可以在 NFS 文件系统上拥有 root 权限,请使用该no_root_squash
选项导出文件系统。也就是说,在服务器上,在 中/etc/exports
,您应该有类似的内容。
/Users/$me/src/states 192.168.34.2(no_root_squash,async)