有什么方法可以防止从用户拥有的目录中删除某些文件?


42

假设用户具有Directory1并且其中包含File1 File2 CantBeDeletedFile 如何使用户永远不会被删除CantBeDeletedFile

如果更改Directory1的所有权并删除写许可权,则用户将无法删除任何文件。他们也将无法添加新文件等。

我只希望能够设置一些永远不会删除的文件。

更具体的描述。

我正在创建用户个人资料。我正在其桌面中创建应用程序启动器文件。因此,我想设置一些启动器文件(.desktop)并将其制成,以便用户只能启动它们,并且它们不能重命名或删除,只能启动。

当前,如果用户拥有包含任何文件的目录。他可以删除。

如果没有针对所有* nix的通用方法,则为Linux和ext4 FS。

Answers:


40

(我不喜欢入侵用户的房屋,我认为应该允许他们做与房屋有关的任何事情……但是无论如何……)

这应该在linux上起作用(至少)。我假设user已经是该小组的成员user。一种解决方案是更改目录的所有权Directory1并在目录上设置粘性位:

chown root:user Directory1
chmod 1775 Directory1

然后使用:

chown root Directory1/CantBeDeletedFile

现在,user由于粘性位¹ ,将无法删除此文件。将user仍然能够在添加/删除自己的文件Directory1。但是请注意,他们将无法删除,Directory1因为它将永远不会被清空。


1.在目录上启用粘滞位后,用户(所有者除外)只能删除目录中自己的文件。它用于/tmp权限为1777=的目录rwxrwxrwt


我也不喜欢,但是用户是Linux世界的新手。如果他们巧合地删除了启动程序,那么他们就开始对我们的技术支持进行垃圾邮件了:)
bakytn 2011年

谢谢作品!不知道我将如何进行。使用chattr或通过这种方式。如果在途中。我仍然可以将目录删除为根目录。使用高级解决方案(chattr),即使root也无法删除该文件夹。
bakytn 2011年

@bakytn:这只是预防措施还是您实际上得到了支持电话?因为大多数新手可能会太害怕以至于弄乱他们不知道的文件。
Lie Ryan

@Lie Ryan 100%确保他们会寻求支持。但是,是的,目前这只是预防措施。
bakytn11年

早晚要拆下辅助轮……如果他们没有学会骑脚踏车,那将是一场意外。我同意这个答案,可能还辅以大量的在线帮助和罐装垃圾邮件:“如果您“不小心”删除了ThisDesktopFile,请先走到最近的墙上,用力撞它3次(以防万一),然后再做cp /here/is/the/master/ThisDesktopFile $HOME。 :BOfH“
vonbrand

63

使用i属性使文件不可变。

chattr +i file.desktop

请参阅man chattr参考资料。


8
我添加此注释是因为我无法从提到的手册页中推断出它:chattr仅适用于ext2 / ext3 / ext4文件系统。
manatwork's

太酷了!有效!谢谢你,先生!优雅的解决方案,但有一个局限性。即使root用户也无法在不首先使其可变的情况下删除这些文件。但这实际上很酷。不确定要接受哪个答案。接受更通用的方式,但速度
较慢

@manatwork至少也可以在XFS上使用,我想其他一些文件系统也支持这些属性。
Ruslan

要“撤消”此命令,只需执行chattr -i file.desktop
GreenRaccoon23 '17

1
我刚刚在Linux的zfs上对此进行了测试,并且它起作用了。我想防止删除用于指示备份程序bacula忽略该文件夹的文件。
drescherjm

2

我认为没有办法防止使用Unix文件权限删除单个文件,但是我可以想到一种解决方法:编写一个守护程序,在删除该守护程序时将其替换。inotify-tools如果您使用的是Linux,则非常适合此类事情。

您可以通过以下几种方法来替换已删除的项目:将新项目复制到位,或者将真实文件保存在安全的位置,然后将链接复制到用户目录中。对于链接,可以使用符号链接或硬链接。我将从符号链接开始,但是一些(很少)程序不能正确处理符号链接。如果发现用户遇到这样的程序,请改用硬链接。


0

一个简单的

chmod -i filename

会“保护”该文件不被删除。

rm filename
rm: remove write-protected regular file 'filename'?

您仍然可以删除它,但是至少您必须对所做的事情有足够的把握。

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.