Linux dropfolder,用户无法删除文件

Linux dropfolder,用户无法删除文件

我正在为学校开发一个文件服务器项目,并使用 samba 来共享文件夹。我一直在研究文件夹权限,但似乎无法弄清楚如何创建仅用于放置的文件夹。这就是我想要实现的:

  • 所有者(服务器帐户):完全控制(chmod number 7xx)
  • 组(登录 samba 服务器的用户):仅放置(删除)文件,这意味着不要打开/编辑/删除文件夹中的文件(chmod number x?x)
  • 其他:无权访问(chmod number xx0)

我尝试了很多不同的 chmod 设置,但从未获得想要的结果。这可能吗?我在 Google 上搜索了很多,但找不到最终的答案。

也许有一种方法可以在将文件放入文件夹时设置文件权限?

如果您需要有关 samba 配置或其他任何信息,请询问!

感谢您的帮助!

答案1

尝试此过程。

创建共享文件夹并赋予正确权限:

  mkdir /pathYouWant/share
  chmod 770 /pathYouWant/share

这使得其他人无法访问。

  chmod +t /pathYouWant/share

这种模式,根据chmod 手册页

   The  restricted  deletion  flag  or  sticky  bit is a single bit, whose
   interpretation depends on the file type.  For directories, it  prevents
   unprivileged  users  from  removing or renaming a file in the directory
   unless they  own  the  file  or  the  directory

正如 Marty Fried 所说,在共享文件夹中创建的文件应该具有正确的权限,这可以通过以下方式实现samba 共享掩码smb.conf

  create mask = 440
  directory mask = 550

delete readonly除非选项设置为是,否则 Windows 程序不应尝试删除只读文件。

  delete readonly = no

此外,如果您想隐藏共享文件夹中的所有文件:

  veto files = /*/
  delete veto files = no

根据 samba 手册这些指令:

如果用户尝试删除包含被否决文件的目录,会发生什么情况?这时,删除否决文件选项就派上用场了。如果将此布尔选项设置为是,则用户可以删除目录中的常规文件和被否决文件,并且目录本身将被删除。如果将选项设置为否,则用户无法删除被否决的文件,因此目录也不会被删除。从用户的角度来看,目录看起来是空的,但无法删除。

经过这样的配置,唯一剩下的问题是用户仍然可以删除他/她自己的文件,即使他/她看不到它(我们不清楚为什么)。

因此我们决定遵循 the_Seppi 的建议来完成任务,并且 Bram Driesen 编写了一个将文件所有权更改为主机的脚本。

incron每当有文件被放入文件夹时,他就会触发该脚本,然后作为设置指南。

答案2

不幸的是,你的问题不是那么容易解决的。如果用户在目录中有写权限,他也可以删除文件。即使他不能删除它们,他仍然可以用零填充文件,这将是删除数据,而不是删除文件系统节点。


我曾经使用过的一个想法:

您创建一个 cronjob,它递归地删除目录树中每个文件的写权限(例如 中的每个文件/home/guest)。

请注意,您不能简单地使用chmod g-w -R /home/guest。这也会从目录中删除写入位,从而无法将新文件放入其中。因此,您需要遍历每个文件并删除其组写入位。

cronjob 执行的间隔由您决定 - 当时我将其设置为 10 分钟。我不了解您的环境,因此无法给您建议。

不幸的是,我不再有这个脚本了,所以你必须编写一些 bash 脚本才能让它工作。但说真的,我怀疑这是一种有效的方法。

答案3

我们可以修改文件和文件夹,但不能删除。

要删除属性,请运行以下命令:

对于文件:

sudo chattr -R -a file.txt

对于目录:

sudo chattr -R -a dir1/

相关内容