web-dev-qa-db-ja.com

ルートが所有するディレクトリの所有権を変更する

非特権ユーザーとして、EXT4ファイルシステムに必要なすべての権限(rwx)がある場合、コンテンツとファイルの所有権を変更することができます(例:vim fileおよび:w!)rootが所有していても、変更する権利がなくても(root:rootおよび0644)。

そのディレクトリが私の非特権ユーザーが所有するディレクトリ内にある場合、rootが所有するディレクトリでそれはどういうわけか可能ですか?

1
manifestor

ディレクトリの所有者は、必要に応じてディレクトリの内容を変更できます。ディレクトリの所有者が書き込みを許可されていないファイルがディレクトリにある場合でも、ディレクトリの所有者はそのファイルを削除して、同じ名前で新しいファイルを作成できます。

より一般的には、ディレクトリへの書き込み権限がある場合、そのディレクトリ内のファイルを削除して作成できます。したがって、ファイルへの書き込み権限がない場合にファイルに書き込むのではなく、既存のファイルを削除して同じ名前で新しいファイルを作成することにより、そのディレクトリ内のファイルを変更できます。

ディレクトリparentを所有していて、その中にrootが所有するサブディレクトリchildが含まれていて、childに対する書き込み権限がない場合、ファイルを変更することはできません。 childで。ただし、childの名前を変更し、childという名前の新しいサブディレクトリを作成できます。このサブディレクトリは自分が所有するため、必要なものをすべて含めることができます。

これが、ファイル制御を検証するセキュリティチェック(OpenSSHが秘密鍵ファイルに対して行うサニティチェックなど)がルートまでのディレクトリチェーン全体を検証する理由です。同様に、ファイルを実行するためのSudo権限をユーザーに与える場合、ファイルへのパス全体をrootで制御する必要があります。たとえば、ホームディレクトリの下にあるプログラムを実行するための権限をユーザーに付与しないでください。 (一方で、setuidはパスではなくファイル自体に添付されるため、setuidルートプログラムはどこでも問題ありません。)ディレクトリパスの中間ステップを制御する人は、実際のコンテンツを編集することなく、自分のコンテンツを置き換えることができます。ファイル、ただしパスのポイントでディレクトリの名前を変更します。

私はあなたの述べた前提を再現することができません。

ルートが所有するファイルを含む、私が所有するディレクトリ:

$ ls -ld mydir mydir/file2
drwxrwxr-x 2 user1 user1 4096 Jan  5 13:52 mydir
-rw-rw-r-- 1 root  root     0 Jan  5 13:52 mydir/file2

root内のmydirのファイルの所有権を主張しようとしました:

$ chown user1 mydir/file2
chown: changing ownership of 'mydir/file2': Operation not permitted
0
DopeGhoti