どのリンクがハードリンクの作成に影響しますか?ファイルの所有権自体は重要ですか?
ユーザーalice
が、ファイルtarget.txt
へのハードリンクをディレクトリtarget-dir
に作成するとします。
target.txt
とtarget-dir
の両方でalice
に必要な権限は何ですか?target.txt
がユーザーbill
によって所有され、target-dir
がユーザーchad
によって所有されている場合、何か変更されますか?この状況をシミュレートして、ext4
ファイルシステムに次のフォルダー/ファイル構造を作成しようとしました:
#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct 1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct 1 11:40 target-dir
source-dir:
-r--r--r-- 1 bill bill 0 Oct 1 11:29 target.txt
target-dir:
-rw-rw-r-- 1 alice alice 0 Oct 1 11:40 dummy
alice
はtarget.txt
へのソフトリンクを作成できますが、ハードリンクを作成できません。
#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
alice
がtarget.txt
を所有していて、権限が変更されていない場合、ハードリンクは成功します。ここで何が欠けていますか?
ハードリンクを作成するには、alice
がwrite+execute
に対するtarget-dir
権限をすべての場合に必要とします。 target.txt
に必要な権限はさまざまです。
fs.protected_hardlinks = 1
の場合、alice
にはtarget.txt
の所有権または少なくともread+write
の権限が必要です。fs.protected_hardlinks = 0
の場合、すべての権限のセットで実行できます。 000でも大丈夫です。同様の質問に対するこの回答 には、この質問に回答するための欠けている情報がありました。
から http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [鉱山を強調]:
ハードリンク:
システムファイルと同じパーティションにユーザーが書き込み可能なディレクトリがあるシステムでは、長年にわたるセキュリティ問題がハードリンクベースのチェック時間と使用時間の競合であり、世界中で書き込み可能なディレクトリで最も一般的に見られます/ tmpのように。この欠陥を悪用する一般的な方法は、特定のハードリンクをたどるときに特権の境界を越えることです(つまり、ルートプロセスは別のユーザーが作成したハードリンクをたどります)。さらに、管理者が実際にシステムを完全にアップグレードしないように、潜在的に脆弱なsetuid/setgidファイルをユーザーが「固定」できるという問題が存在します。
解決策は、ユーザーが既に既存のファイルの所有者である場合、またはユーザーが既存のファイルへの読み取り/書き込みアクセス権を持っている場合にのみ、ハードリンクの作成を許可することです。
alice
には少なくともtarget.txt
に対する読み取り権限とtarget-dir
に対する書き込み+実行権限が必要です。
これで、パーミッション構造は3つに分かれたセットとして機能します。
したがって、所有権の質問は、alice
に必要なアクセス許可のセットが次のいずれであるかにのみ影響します。
alice
が所有者ユーザーの場合、必要な権限は「ユーザー」の部分にある必要があります。alice
がそれを所有するグループの一部である場合、必要な権限は「グループ」の部分にある必要があります。alice
がそれを所有しておらず、それを所有するグループの一部でもない場合、必要な権限は「その他」の部分にある必要があります。