Linuxのファイル/ディレクトリ権限を理解しようとしています。ユーザーは、次のコマンドを使用してディレクトリ内のファイルを一覧表示できます。
cd test
ls -l
上記のコマンドを実行しているユーザーには、テストディレクトリ内のすべてのファイルに対する読み取り、書き込み、または実行権限がない場合でも、テストディレクトリに対する読み取り権限があるため、そのファイルを一覧表示できます。
では、次のシナリオでは、ユーザーBが自分が所有するファイルの権限を変更できますが、親ディレクトリへの書き込み権限がないのはなぜですか?
ユーザーAはテストディレクトリを作成し、他のユーザーがここに書き込むことを許可します。
mkdir test
chmod o+w test
ユーザーBはテストフォルダにファイルを作成します。
cd test
touch b.txt
ユーザーAは、ディレクトリに対する他の人の書き込み権限を削除します。
chmod o-w test
ユーザーBは、権限がディレクトリの一部であり、ユーザーが自分が所有するファイルの親ディレクトリへの書き込み権限を持っていなくても、権限を正常に変更できます。
chmod g-r b.txt
chmod
ユーザーがファイル情報(権限など)を含むディレクトリを変更できず、失敗しないのはなぜですか?
答え1
ファイルのメタデータ(権限、所有権、タイムスタンプなど)を変更すると、ディレクトリが変更されるのではなく、ファイルのinodeが変更されます。これには、x
ディレクトリに対する権限(ファイルにアクセスするため)とファイルの所有権(ファイルを所有するユーザーのみが権限を変更できます)が必要です。
ファイルが持つことができることを覚えていれば直感的だと思います。ハードリンク複数のディレクトリにあります。このディレクトリには、inodeのテーブルマッピングファイル名が含まれています。ファイルが複数のディレクトリから複数の名前でリンクされている場合でも、権限、所有権などを含む inode です。これは、ファイルのメタデータがディレクトリではなくinodeにあることを示します。
ファイルの作成、名前変更、移動、または削除にはディレクトリの変更が含まれるため、そのディレクトリへの書き込み権限が必要です。