这不是您的标准问题“权限如何工作”!
我认为答案可能涉及 ACL,但我不知道具体如何。
我已经尝试过标准权限、guid、粘滞位等,但不起作用。
我想要的是:用户将上传文件。用户将能够更改文件的权限以允许执行。但一旦文件创建,用户将无法更改文件的内容。并且用户将无法删除该文件。
请帮帮我!我已经为此烦恼了好几个小时了!
编辑:
感谢您的回答,但到目前为止他们似乎还没有解决如何让新创建的文件自动完成这项工作。
可能的解决方案:
find -mtime -1 -exec chattr +i '{}' \+
第二种可能的解决方案:
inotifywait -m -e create --format %f .
现在我只需要弄清楚如何将其传送到 chattr。
答案1
您可以尝试使用“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
答案2
使用属性
sudo chattr +i /path/to/file
删除“不可变”标志
sudo chattr -i /path/to/file
不过,这会阻止您更改文件的权限。因此,您需要某种方式(以 root 身份)根据用户请求添加执行权限或其他权限。此外,默认情况下不会添加属性;您必须输入一些可以执行此操作的内容。
我将把这部分留给读者作为练习。
答案3
SELinux 可能是解决该问题的一种方法 - 将唯一类型与具有此“降低的能力”的所有用户关联。设置 SELinux 策略以允许这些用户类型在此目录中创建文件,但不允许修改等。理论上 - 应该有效。请参阅Gentoo SELinux 教程,特别是关于:
allow auditd_t <type>:file { <permission> };
然后查看更多可用权限
答案4
使用 inotify 或您选择的其他监视机制来查找和定位上传目录中的新文件并将其移动到新目录中,而初始用户对该目录没有权限。