从 Ubuntu 挂载 Windows 共享时的写入权限

从 Ubuntu 挂载 Windows 共享时的写入权限

我认为我的开发环境已经接近按照我想要的方式设置好了,但还有最后一个问题。我在 Windows 7 x64 主机上运行 VirtualBox,开发环境位于 Ubuntu 12.04 客户机中。我想将项目文件保留在主机文件系统上 - 部分原因是当 Ubuntu 客户机未运行时我可以访问它们,但也是为了我可以使用 Tortoise 和其他基于 Windows 的工具(咳嗽我使用 Photoshop 制作了一些视频,这也在一定程度上简化了我的备份方案。

因此,我的 NTFS 驱动器上有一个文件夹“Rails”,我已从主机与专门为 Ubuntu 客户机创建的用户共享该文件夹。已设置挂载点,并使用凭证文件和选项将条目添加到 fstab (cifs) 中。iocharset=utf8,file_mode=0777,dir_mode=07‌​77此操作挂载正常,我的 Ubuntu 用户对内容具有读取和写入权限,但当我尝试启动 Rails 应用程序时,应用程序需要写入的任何文件(例如日志文件)都出现权限错误。这是怎么回事?

答案1

事实证明,我只是找错了地方——我忘记了 Windows 主机上的帐户需要在共享文件夹上设置正确的访问权限;它只有 和。Read & execute哎呀!添加解决了这个问题。所以这只是一个愚蠢的错误——但我也学到了更多关于WriteList folder contentsModifycifs 语法fstab弄清楚了如何以普通用户身份挂载,允许挂载点位于我的/home/user文件夹中。我的 fstab 中的最终挂载字符串如下所示(我的值已替换为 [tokens]):

//[server]/[share] /home/[user]/[folder] cifs credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0

因此,您只需要在安装后设置uidgid想要拥有共享上文件的用户和组 - 无需其他任何操作。我还将所需的 Windows 用户凭据放在我的 .config 目录下的单独文件中,并这样做chmod 400以阻止其他人读取它。

弄清楚这一切花了很长时间,因为 cifs 有上百万个参数可用,而且很多人似乎误解了它们——很多人建议使用file_mode/ dir_mode777(这听起来对我来说是个很糟糕的主意),并且使用不必要的参数,如nounixnopermrw和—— 这些参数都不是实现此功能所必需的。因此,虽然我的问题是由一个简单的错误引起的,iocharsetnoacl我将问题(和这个答案)留在这里;希望有人会觉得它有用!

编辑:由于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

相关内容