Linux Samba、CIFS和删除文件
因此,我在服务器a上有一个Samba共享。我将该共享装载到另外两个服务器B和C上。其思想是B和C需要将临时文件写入单个位置,以便多个后台处理作业(也在B和C上运行)可以访问同一个文件池 后台处理完成后,他们会删除正在处理的文件。当我在删除文件后列出共享的目录时,原始文件名现在是Linux Samba、CIFS和删除文件,linux,samba,cifs,Linux,Samba,Cifs,因此,我在服务器a上有一个Samba共享。我将该共享装载到另外两个服务器B和C上。其思想是B和C需要将临时文件写入单个位置,以便多个后台处理作业(也在B和C上运行)可以访问同一个文件池 后台处理完成后,他们会删除正在处理的文件。当我在删除文件后列出共享的目录时,原始文件名现在是cifs79、cifs78等。它们占用的空间与原始文件相同,因此我假设它们是原始文件,只是重命名了 问题是这些文件不会消失,除非我重新启动samba(我不打算这样做)。我是否缺少一个可以立即删除文件的简单配置参数 我使用以
cifs79
、cifs78
等。它们占用的空间与原始文件相同,因此我假设它们是原始文件,只是重命名了
问题是这些文件不会消失,除非我重新启动samba(我不打算这样做)。我是否缺少一个可以立即删除文件的简单配置参数
我使用以下命令创建了我的共享:
mount -t cifs //10.251.251.251/uploads ./uploads -o username=samba_user,noexec
文件以-rw------
的形式进入共享,并在更改名称后保持这种方式
下面是完整的smb.conf
文件:以及运行smbstatus
的结果:
更多信息: 如果我从安装了共享的框中手动创建文件,我可以创建、编辑和删除文件,没有问题。如果我启动一个IRB(交互式ruby)会话,我可以使用ruby创建/删除文件。似乎是应用程序本身创建了具有奇怪权限的文件。虽然应用程序和我的IRB会话是以同一用户身份运行的,但它们应该拥有相同的权限来执行任何操作
谢谢你的帮助 您有权访问samba服务器的完整配置吗?我知道一个常见的习惯用法是将samba配置为执行某些操作,而不是从要删除的服务器命令中删除文件,以便在整个网络上实现“垃圾桶/回收站”样式的功能。重命名原始目录中的文件有点不寻常,但仍有可能 R/W列确实表示RDONLY,但在我的配置中,我的read only=no 这并不意味着不允许客户端打开(文件“r”),即以只读方式打开文件,即使允许客户端写入文件 看起来Samba必须保留B删除的文件,因为A仍然有一个oplock。oplock应该在不久后过期,之后samba可能会删除重命名的文件 这与NFS实现 fd=打开/创建临时文件 删除文件 使用临时文件(因为您尚未关闭它) 闭合fd
你得到了.nfs。。。目录中的文件。基本上我认为这是权限问题,配置文件似乎没问题。 您是否尝试过查看/var/log/samba/*日志 关于smb.conf文件:
[global]
force create mode = 0644
force directory mode = 0744
0744不是“强制目录模式”的通用模式,可能是一种输入错误,通常如果您向文件夹授予读取权限,并且希望将执行位设为flag,则使用755、750或700。此选项使所有文件夹至少设置了这些位。“强制创建模式”很好
[uploads]
create mask = 0655
directory mask = 755
由于您使用noexec挂载它,我猜“创建掩码”的正确值应该是666或644,“目录掩码”的正确值应该是755
我将ssh连接到服务器,并运行类似以下内容:
find /tmp/uploads -type f -print0 | xargs -0 chmod 644
find /tmp/uploads -type d -print0 | xargs -0 chmod 755
chown "$SMBUSER:$SMBUSER_GROUP" -r /tmp/uploads/
这属于serverfault,我已投票将其移到那里,但请检查smbstatus。我敢打赌,您的程序无法关闭该文件。以下是smbstatus的输出:R/W列确实显示RDONLY,但在我的配置中,我有
readonly=no
,并且正在连接(转换)的用户拥有samba服务器上的共享目录。。。