我认为我的开发环境已经接近按照我想要的方式设置好了,但还有最后一个问题。我在 Windows 7 x64 主机上运行 VirtualBox,开发环境位于 Ubuntu 12.04 客户机中。我想将项目文件保留在主机文件系统上 - 部分原因是当 Ubuntu 客户机未运行时我可以访问它们,但也是为了我可以使用 Tortoise 和其他基于 Windows 的工具(咳嗽我使用 Photoshop 制作了一些视频,这也在一定程度上简化了我的备份方案。
因此,我的 NTFS 驱动器上有一个文件夹“Rails”,我已从主机与专门为 Ubuntu 客户机创建的用户共享该文件夹。已设置挂载点,并使用凭证文件和选项将条目添加到 fstab (cifs) 中。iocharset=utf8,file_mode=0777,dir_mode=0777
此操作挂载正常,我的 Ubuntu 用户对内容具有读取和写入权限,但当我尝试启动 Rails 应用程序时,应用程序需要写入的任何文件(例如日志文件)都出现权限错误。这是怎么回事?
答案1
事实证明,我只是找错了地方——我忘记了 Windows 主机上的帐户需要在共享文件夹上设置正确的访问权限;它只有 和。Read & execute
哎呀!添加解决了这个问题。所以这只是一个愚蠢的错误——但我也学到了更多关于Write
List folder contents
Modify
cifs 语法并fstab
弄清楚了如何以普通用户身份挂载,允许挂载点位于我的/home/user
文件夹中。我的 fstab 中的最终挂载字符串如下所示(我的值已替换为 [tokens]):
//[server]/[share] /home/[user]/[folder] cifs credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0
因此,您只需要在安装后设置uid
您gid
想要拥有共享上文件的用户和组 - 无需其他任何操作。我还将所需的 Windows 用户凭据放在我的 .config 目录下的单独文件中,并这样做chmod 400
以阻止其他人读取它。
弄清楚这一切花了很长时间,因为 cifs 有上百万个参数可用,而且很多人似乎误解了它们——很多人建议使用file_mode
/ dir_mode
777(这听起来对我来说是个很糟糕的主意),并且使用不必要的参数,如nounix
、noperm
、rw
和—— 这些参数都不是实现此功能所必需的。因此,虽然我的问题是由一个简单的错误引起的,iocharset
但noacl
我将问题(和这个答案)留在这里;希望有人会觉得它有用!
编辑:由于Samba 的 cifs 实现中的一个错误如果您打算在共享上运行 SQLite 数据库,则还需要添加该nobrl
选项。基本上,当前的 Samba cifs Linux 客户端无法处理 SQLite 锁定数据库文件的方式。这不是一个好的解决方案,在多用户环境中几乎肯定是一个坏主意,但由于在我的情况下它是一个单用户共享,并且与客户端托管在同一台机器上(这应该可以消除网络延迟),所以我将使用它。
诺布尔
不要向服务器发送字节范围锁定请求。对于某些与 cifs 样式强制字节范围锁定不兼容的应用程序,这是必要的(大多数 cifs 服务器尚不支持请求建议字节范围锁定)。
fstab 条目现在如下所示:
//[server]/[share] /home/[user]/[folder] cifs nobrl,credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0