我有一台带 Samba 共享的服务器,它通过 CIFS 安装在我的客户端计算机上/media/photos.
/media/photos
所有权是root:samba
,并且我的用户也是 samba 组的成员。在服务器上的 smb.conf 中我有:
force create mode = 0664
force directory mode = 2775
force security mode = 0664
force directory security mode = 2775
因此/media/photos
目录具有权限drwxrwxr-x
。我在此目录中创建的每个文件都有权限rw-rw-r--
我可以创建目录。我可以创建文件。我可以进入创建的目录并在那里创建文件。
我无法复制目录树。当我发出以下命令时:
cp -r /home/frank/photos/Tymek/ /media/photos
目录“Tymek”已创建,但其中没有文件。我收到类似以下消息
cp: cannot create regular file `/media/photos/Tymek/usg_10.bmp': Permission denied
即使我可以进入 Tymek 目录并毫无问题地创建文件。
这样的命令有效:
cp -r /home/frank/photos/Tymek/ /media/photos/
(末尾添加斜线)
但是 Nautilus 似乎使用第一种方法,它在复制整个目录时遇到了问题,而我需要它。
答案1
这可能会有所帮助,OS X 10.5 也曾遇到过类似的 Samba 问题,直到应用了一组神奇的 smb.conf 权限,才解决了同样的无权限问题。尝试用这些值替换/修改您的值:
create mask = 0664
force create mode = 0664
security mask = 0000
force security mode = 0664
directory mask = 0775
force directory mode = 0775
directory security mask = 0000
force directory security mode = 0775
我无法保证这一定能解决您的问题,但需要进行大量调整才能解决这些 Mac 客户端的相同问题。
答案2
听起来很像我遇到的问题。请检查当您复制仅包含文件而没有其他子文件夹的文件夹并且该文件夹在目标上不存在时,您是否会首先收到“权限被拒绝”但之后可以毫无问题地复制它。例如
$ mkdir testdir
$ touch testdir/somefile
$ rm -r /media/photos/testdir
$ cp -r testdir /media/photos
cp: cannot create regular file `/media/photos/testdir/somefile': Permission denied
$ cp -r testdir /media/photos
$ # same command works
这个问题已在Ubuntuforums:smbmount:无法创建常规文件。我以“xrat”的身份在那里发帖。我仍然认为这是一个错误(我只是还没有时间报告它)。添加noperm
到安装选项会有所帮助。但这是一个肮脏的解决方法。
更新2009-11-17:错误报告已找到。向发现者致敬瓦拉纳西。
如果您愿意深入研究,这里还有另一个建议:查看您的 Samba 服务器上的文件系统是否使用noatime
或挂载relatime
。这可能相关。我很想知道您的服务器是否也存在这种情况。
答案3
在旧版本的 Samba 下,文件权限用户和 Samba 用户之间存在差异。您使用的是哪个版本的 Samba?您是如何创建 Samba 用户帐户的?您在 CIFS 服务器上将 Samba 用户添加到了哪些 Samba 组?
最后,当您执行 cp -r 并且创建 Tymek 目录时,它是使用什么权限创建的?
答案4
当您挂载 CIFS 挂载时,它会使用您用于挂载的帐户的权限进行挂载。
这意味着权限来自服务器而不是本地的。
您挂载的帐户应在服务器端添加到 samba 组。
在 fstab 中或在挂载时设置 uid= 和 gid= 不会用本地权限覆盖服务器端权限。