ユーザーがディレクトリを削除できないようにするにはどうすればよいですか?


9

「chattr + i DIRNAME」を試してみましたが、すばらしいのですが、chatrの後で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は削除できません。
Nils

回答:


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

OK、これの何が悪いのか教えてみましょう:すべてのユーザーは、アクセス許可のquestionためにディレクトリ内のすべてのファイルへのすべてのアクセス権を持っています777。それは

  • 新しいグループを作成する groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • ファイルにアクセスする必要があるユーザーを新しいグループに追加します。 usermod -G group user

ここで重要なトリックは、ディレクトリの所有者が、それを削除しようとするどのユーザーとも異なることです。


2
このディレクトリの場所にも依存します。質問グループの誰かが質問ディレクトリを含むディレクトリに対してrwx権限を持っている場合、それを削除できます。
Laurentiu Roescu

親ディレクトリにフラグsudo chmod o+t ..を設定するために追加を追加しtます。このtフラグは、ユーザーが所有していないファイルの削除を禁止します。正確にそれを行うtために一般的に使用さ/tmpれます。UserAは、UserBが所有するファイルを削除できません。
ジッピー

または、もう一度、正しい所有権と許可ビットをディレクトリに配置します。
ジッピー

Dockerコンテナーでは機能しません。:(
カービー

13

「.protected」ファイルを作成し、ルートとして実行します

chattr +i .protected

その後.protected、このディレクトリ内以外のすべてのファイルを削除できます。したがって、他のユーザーがディレクトリを削除することはできません。


シンプルで効果的。すばらしい答えです。
2016年

Dockerコンテナーでは機能しません。:(
カービー

1
それを削除するには、「chattr -i [filename]」を使用して不変の属性を削除します。
emeraldhieu

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.