web-dev-qa-db-ja.com

ユーザーが所有するディレクトリから特定のファイルが削除されるのを防ぐ方法はありますか?

ユーザーがDirectory1を持ち、それがFile1 File2 CantBeDeletedFileを含んでいるとしましょう。 CantBeDeletedFileを削除することは決してできませんか?

Directory1の所有権を変更して書き込み権限を削除すると、ユーザーはファイルを削除できなくなります。また、新しいファイルなどを追加することもできません。

削除されないファイルをいくつか設定できるようにしたいだけです。

より具体的な説明。

ユーザープロファイルを作成しています。 Desktopでアプリケーションランチャーファイルを作成しています。だから私はいくつかのランチャーファイル(.desktop)を設定し、ユーザーがそれらを起動することができるだけで、名前を変更したり削除したりできず、単に起動することができるようにしたいと思います。

現在、ユーザーがファイルを含むディレクトリを所有している場合。彼は削除できます。

すべての* nixに一般的な方法がない場合、それはLinuxおよびext4 FSです。

44
bakytn

(私はユーザーの家への侵入を嫌います。彼らは家でやりたいことは何でもできるようにすべきだと思います…しかしとにかく...)

これは(少なくとも)Linuxで動作するはずです。 userはすでにグループuserのメンバーであると想定しています。解決策は、Directory1の所有権を変更し、ディレクトリにスティッキービットを設定することです。

chown root:user Directory1
chmod 1775 Directory1

次に使用します:

chown root Directory1/CantBeDeletedFile

現在、スティッキービットのため、userはこのファイルを削除できません¹。 userは、Directory1で独自のファイルを追加/削除することができます。ただし、Directory1は空にならないため、削除できないことに注意してください。


1.スティッキービットがディレクトリで有効になっている場合、ユーザー(所有者以外)はディレクトリ内の自分のファイルのみを削除できます。これは、権限が/tmp = rwxrwxrwtである1777のようなディレクトリで使用されます。

42

i属性を使用してファイルを不変にします。

chattr +i file.desktop

見る man chattr 詳細については。

64
Keith

Unixファイルのアクセス許可を持つ個々のファイルの削除を防ぐ方法はないと思いますが、回避策は考えられます。削除されたときにそれを置き換えるデーモンを作成します。 inotify-toolsは、Linuxを使用している場合、この種のことには最適です。

削除したアイテムを置き換える方法はいくつかあります。新しいアイテムを所定の場所にコピーするか、実際のファイルを安全な場所に保管して、リンクをユーザーのディレクトリにコピーするだけです。リンクには、シンボリックリンクまたはハードリンクを使用できます。私はシンボリックリンクから始めますが、一部の(ごく少数の)プログラムがシンボリックリンクを正しく処理しません。ユーザーがこのようなプログラムに遭遇した場合は、代わりにハードリンクを使用してください。

2
Shawn J. Goff

シンプルな

chmod -i filename

そのファイルを削除から「保護」します。

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

削除することはできますが、少なくとも、自分が何をしているかについて十分に確認する必要があります。

0
fiatjaf