我正在为学校开发一个文件服务器项目,并使用 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/