Samba共享权限拒绝用户写入文件,但仍显示


12

非常奇怪的问题...

Samba远程共享:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

使用root在本地安装命令:

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

根完全可以读/写/ cd:

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

但是,如果我切换到普通用户并执行相同的操作,则会得到以下信息:

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

我可以ll并且我可以看到它仍然写入了文件:

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

我什至rm没问题:

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

我尝试了不同的安装选项。uid=501不会改变任何东西。尝试过,nounix但是根本不起作用,使用root或shawn用户看不到任何东西。


这个Q看起来几乎是相同的问题:unix.stackexchange.com/questions/71896/…
slm

问题不完全相同。
虾车2013年

我说差不多8)。该评论更直接地指向我,将常见的Q和A链接在一起以供将来的访问者使用,但是我认为您可以查看一下。
slm

Answers:


7

注意:我只是在猜测,我不是桑巴舞大师。

Samba / CIFS(至少在这里使用它的方式)不会在服务器和客户端之间复制凭据。由于force user服务器上的指令,所有操作都以用户erpm在服务器上执行。但是,由于客户端和服务器都在运行unix系统,因此它们自动协商了CIFS POSIX扩展名。这使unix权限看起来可以工作到一定程度,但是仅在服务器允许的范围内有效,并且您遇到了unix权限要求的内容与服务器允许的内容不同的情况。

您会注意到所有文件都显示为用户ID501。这就是它们在服务器上的uid。

当您尝试创建或删除文件时,这需要对该目录具有写权限。所有访问都映射到服务器上的单个用户,因此写权限归结为是否erpm允许写入服务器上的该目录。答案是肯定的。

运行时touch,它将创建文件,然后更改其修改时间。更改文件的修改时间需要所有权,这在客户端由通用文件系统代码测试。

如果运行strace touch test,您会注意到then open调用(创建文件)成功,然后该utimes调用(或者在Linux上是utimensat系统调用)无法设置时间。

这实际上有点奇怪,因为utimes 应该成功,因为touch它使用NULL参数调用(意思是“将时间戳设置为当前时间”),并且应该允许任何可能写入文件的调用方使用它,不仅对所有者而言,就像设置任意时间戳一样。我怀疑这utimensat实际上是在进行基于权限的检查,并确定该权限表明您无法写入该文件,即使文件系统无论实际的权限如何都允许进行写操作。

当服务器端使用非root用户的权限运行时,CIFS POSIX扩展的主要优点是继承了可执行位,并且可能会保留组所有权。如果使用forceuidmount选项将用户所有权映射到单个客户端用户,可能会减少混乱。


3
非常感谢您的全面答复。我最终尝试了username=guest,defaults,noperm,这完全解决了这个问题。我不知道在这个答案上可以接受什么答案,因为这username=guest,defaults,noperm可能不是最佳答案,而且我没有更多时间尝试您的答案。再次感谢你!
虾车2013年

@shrimpwagon感谢您的更新。这解决了我的问题...我早就忘记了在安装时必须使用默认值和noperm。
马修(马修)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.