如何防止用户删除目录?


9

我尝试使用“ chattr + i DIRNAME”,它很棒,但是在chattr之后我无法在DIR中创建文件。还有什么可以防止用户删除目录的?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

更新:仅目录删除很重要,因此我仍然需要在其中删除文件


看看/tmp/var/tmp。虽然每个用户都可以在此处创建文件,但他/她只能删除自己的文件/目录,而不能删除目录itselv。
2012年

Answers:


3

那么简单的chown / chmod有什么问题呢:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

好的,让我告诉您这有什么问题:question由于777权限的原因,每个用户都可以访问目录中的每个文件。最好是

  • 创建一个新组 groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • 将必须有权访问文件的用户添加到新组: usermod -G group user

这里的重要技巧是目录的所有者与尝试删除该目录的任何用户都不相同。


2
它还取决于此目录的位置。如果问题组中的某人对包含问题目录的目录具有rwx权限,则可以将其删除。
Laurentiu Roescu 2012年

添加一个额外sudo chmod o+t ..设置以t在父目录上设置该标志。该t标志将不允许删除用户不拥有的文件。t通常用于/tmp精确地做到这一点。UserA无法删除UserB拥有的文件。
jippie 2012年

或者再次将正确的所有权和权限位放到目录中。
jippie 2012年

它在docker容器中不起作用。:(
Kirby

13

创建文件“ .protected”并以root用户身份执行

chattr +i .protected

然后,您可以删除.protected此目录中的所有文件,因此该目录不能被任何其他用户删除。


简单,有效。好答案。
伍格,

它在docker容器中不起作用。:(
Kirby

1
要删除它,请使用“ chattr -i [filename]”删除不可变属性。
emeraldhieu19年

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.