$HOME
ディレクトリを静かにさまよう。
$ whoami
> user
$ pwd
> /home/user
しかし、何かがあなたを悩ませています。 それは小さな岩がブーツに落ちるようなものです。 靴を脱いで、何が問題なのかを確認します。
$ ls -lah ./left-shoe
---------- 1 root root 4 May 30 13:20 little-rock
変です。 彼はここにいますが、まるで彼があなたのものではないかのようです。 彼は
root
、ロック・テイマーによって残され、彼だけが彼の運命を決定します。
# bash -c "echo 'You stay here' > /home/user/left-shoe/little-rock"
# chmod 0000 /home/user/left-shoe/little-rock
あなたはポケットに手を伸ばし、すぐに彼を
sudo
呼びます。 突然、あなたは強さの急上昇を感じ(昨夜「グラディエーター」を見ているため)、あなたの強さをテストするために電話を延期することにしました。
$ rm -f ./left-shoe/little-rock
$ ls -lah ./left-shoe/little-rock
ls: cannot access little-rock: No such file or directory
震えている手を見て、理解しようとしています。これは本当に起こりましたか? はい 本当にやりました。 ロックテイマーなし。 しかし、どのように?
あなたのブーツの中の小さな小石は、彼を待ち望んでいました。 彼の生まれ変わりからわかるように、誰も彼に許可を持っていませんでした(
--- --- ---
)。 読み取り値、エントリ、誰(所有者、グループ、その他)からのアクションもありません。
キャッチ
ここで起こったことは、ロックテイマーがあなたが
$HOME
いるときあなた自身よりもさらに強力であることを忘れたことです。 そして、ここに理由があります。
ファイルを使用して何かを実行できるようにするには、最初にディレクトリでファイルを見つける必要があります。 ディレクトリの内容のリストは、実行フラグによって制御されます。 ユーザーがこのディレクトリで実行する権限を持っている場合、その内容を見ることができます。 また、ディレクトリの実行フラグは、このフォルダー内のファイルの
inode
記述子へのアクセスを提供します。これは、削除プロセスによってファイルが切り離されるため、このコンテキストでは重要です。
次に、削除プロセス。 ファイルの名前変更または移動には、
write()
システムコールは含まれません。 実際には、ファイルを削除するための権限は必要ありません。また、所有者が誰であるかは気にしません。 唯一の要件は、親ディレクトリへの書き込み許可(および親ディレクトリの実行フラグ)を持つことです。
$HOME
ディレクトリは、ユーザーの観点からこれらの要件の両方を自然に満たしています。
アンチトリック
Rock Teimerが部外者に小石を触らせたくない場合は、次のようにします。
# chattr +i /home/user/left-shoe/little-rock
この操作により、ファイルの不変性が保証され、とりわけファイルの削除が防止されます。 マニュアルからの抜粋:
属性 'i'を持つファイルは変更できません。削除または名前変更できません。このファイルへのリンクを作成できず、データを書き込むことができません。 CAP_LINUX_IMMUTABLEを所有するスーパーユーザーまたはプロセスのみが属性を設定または削除できます。