如何防止文件所有者更改/删除自己的文件? Linux CentOS

这不是你的标准“权限如何工作”的问题!

我想答案可能会涉及ACL,但我不知道如何。

我已经搞乱了标准的权限,GUID,粘滞位等不起作用。

我想要的:用户将上传文件。 用户将能够更改文件的权限以允许执行。 但是一旦创build,用户将无法更改文件的内容。 用户将无法删除该文件。

请帮忙! 我已经把我的头发撕了好几个小时了!

编辑:

感谢您的答案,但到目前为止,他们似乎没有解决如何自动为新创build的文件这项工作。

可能的scheme

find -mtime -1 -exec chattr +i '{}' \+ 

第二种可能的解

 inotifywait -m -e create --format %f . 

现在我只需要弄清楚pipe道chattr。

你可以尝试使用“chattr”

例:

 [email protected]:~$ sudo chattr +i plik.txt [email protected]:~$ rm plik.txt rm: remove write-protected regular empty file `plik.txt'? y rm: cannot remove `plik.txt': Operation not permitted [email protected]:~$ chattr -i plik.txt chattr: Operation not permitted while setting flags on plik.txt 

使用属性

 sudo chattr +i /path/to/file 

删除“不可变”的标志

 sudo chattr -i /path/to/file 

这将阻止您更改文件的权限。 所以你需要一些方法来(以root用户身份)添加执行权限,或者根据用户的要求添加任何内容 而且,默认情况下不添加属性; 你必须要做些什么来做到这一点。

我会把这个作为一个练习留给读者。

SELinux可能是解决这个问题的一种方法 – 将所有用户的独特types与“能力降低”联系起来。 设置SELinux策略,允许在这个目录中创build文件,但不能修改等。理论上 – 应该可以工作。 请参阅Gentoo SELinux教程 ,特别是pice:

 allow auditd_t <type>:file { <permission> }; 

然后查看更多可用的权限

使用inotify或您select的其他观察机制来查找和定位上传目录中的新文件,并将它们移动到一个新的目录中,对于这个目录,初始用户没有权限。