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


42

ユーザーにDirectory1があり、File1 File2 CantBeDeletedFileが含まれているとします。ユーザーがCantBeDeletedFile を削除できないようにする方法を教えてください。

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

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

より具体的な説明。

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

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

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

回答:


40

(ユーザーの家に侵入するのは嫌いです。家でやりたいことは何でも許されるべきだと思いますが…とにかく…)

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

chown root:user Directory1
chmod 1775 Directory1

次に使用します:

chown root Directory1/CantBeDeletedFile

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


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


私も嫌いですが、ユーザーはLinuxの世界の初心者です。ランチャーを偶然削除した場合、技術サポートをスパムし始めます:)
bakytn

うまくいきます!どうすればいいかわかりません。chattrを使用するか、この方法で。途中でやるなら。ルートとしてディレクトリを削除できます。上位のソリューション(chattr)では、rootでさえフォルダーを削除できません。
bakytn

@bakytn:これは単なる予防策ですか、それとも実際にサポートコールを受けましたか?ほとんどの初心者は恐らく、彼らが知らないファイルを台無しにするのが怖すぎるからです。
ライライアン

@Lie Ryanは彼らがサポートを求めることを100%確信しています。しかし、はい、現在、それは単なる予防措置です。
-bakytn

遅かれ早かれ、トレーニングホイールを外す必要があります。自転車に乗ることを習得していなければ、事故は目を見張るものになります。私が最初に最も近い壁に移動して、あなたの頭を強打、あなたが『誤って』 ThisDesktopFileを削除した場合、おそらく」オンラインヘルプwithcopious補充し、スパムを缶詰、答えに同意するハード行うその後、(運のために)それに対して3回、とcp /here/is/the/master/ThisDesktopFile $HOME。署名します:BOfH」
フォンブランド

63

ファイルをi属性で不変にします。

chattr +i file.desktop

詳細についてはman chattr、を参照してください。


8
前述のマニュアルページから推測することができなかったため、このメモを追加しますchattr。ext2/ ext3 / ext4ファイルシステムでのみ機能します。
マナトワーク

これはとてもクールです!動いた!ありがとうございます!エレガントなソリューションですが、1つの制限があります。rootでさえ、最初に変更可能にしないとこれらのファイルを削除できません。しかし、これは実際にはとてもクールです。どの回答を受け入れるかわからなかった。より一般的な方法を受け入れましたが、速度は
遅くなりました-bakytn

@manatworkは少なくともXFSでも動作します。他のファイルシステムもこれらの属性をサポートしていると思います。
ルスラン

このコマンドを「元に戻す」には、次の操作を実行しますchattr -i file.desktop
GreenRaccoon23

1
Linuxのzfsでこれをテストしたところ、うまくいきました。バックアッププログラムbaculaにフォルダを無視するよう指示するために使用されるファイルの削除を防止したかった。
drescherjm

2

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

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


0

シンプルな

chmod -i filename

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

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

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

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