投稿からrmが読み取り専用ファイルを削除できるのはなぜですか?私が知っている限り、rm
ファイルを削除するには、そのディレクトリへの書き込み権限だけが必要です。ただし、所有者とグループが他のファイルを簡単に削除できる動作を理解するのは難しいです。
私は次を試しました
mtk:私のユーザー名
abc: 新しいユーザーを作成しました。
$ ls -l file
-rw-rw-r-- 1 mtk mtk 0 Aug 31 15:40 file
$ sudo chown abc file
$ sudo chgrp abc file
$ ls -l file
-rw-rw-r-- 1 abc abc 0 Aug 31 15:40 file
$ rm file
$ ls -l file
<deleted>
私はこれが許されてはならないと思います。ユーザーは自分が所有するファイルのみを削除できる必要がありますか?誰かがこれが許される理由を明らかにできますか?これを避ける方法は?親ディレクトリへの書き込み権限のみを制限すると、誤ってファイルが削除されるのを防ぐことができると想定できます。
ベストアンサー1
これが許可される理由は、ファイルの削除が実際に実行する操作に関連しています。概念的には、rm
作業はディレクトリから名前エントリを削除することです。これがファイルの名前だけであればファイルにアクセスできなくなることがあるので、その時点でファイルが占めたアノードとスペースを回復できるという事実はほとんど付随的である。この事実は、このコマンドによって呼び出されるシステムコールの名前でも暗黙的に示されますrm
。unlink
そして、ディレクトリから名前エントリを削除するのは基本的に作業です。このディレクトリにしたがって、このディレクトリは書き込み権限が必要なディレクトリです。
次のシナリオを使用すると、心がより楽になりますか?ディレクトリがあるとします。
/home/me # owned and writable only by me
/home/you # owned and writable only by you
私が所有するファイルがあり、その中に2つのハードリンクがあります。
/home/me/myfile
/home/you/myfile
/home/you/myfile
最初にハードリンクがどのようにそこに到達したか気にしないでください。たぶんroot
そこに置くことができます。
この例のアイデアは、ハードリンクを削除できる必要があることです/home/you/myfile
。結局はめちゃくちゃだあなたの目次。あなた内部に存在するものと存在しないものを制御することが可能でなければなりません/home/you
。削除を実行するときに/home/you/myfile
実際にファイルを削除するのではないことに注意してください。リンクを1つだけ削除しました。
ファイルを含むディレクトリに固定ビットが設定されている場合(表示t
)ls
するファイルを削除するには、ファイルの所有者である必要があります(ディレクトリを所有していない場合)。固定ビットは通常/tmp
。