ディレクトリのパーミッション
ファイルのパーミッション
r そのファイルを参照できるw そのファイルに書き込みできる
x そのファイルを実行できる
ディレクトリのパーミッション
r そのディレクトリを ls できるw そのディレクトリの中でファイルを作成・消去できる
x そのディレクトリの中および、その管理ファイルにアクセスできる
ファイルのパーミッションは常識的なものですが、ディレクトリパーミッションについてはすんなりと受け入れがたいものです。しかし、inodeのディレクトリ取り扱いが見てみると、なる程と受け入れることが可能です。
ファイルもディレクトリもinodeベースで構造は同じものです。ファイルそのもの管理はファイルのinodeが行い、その中身はinodeにひもずくデータブロックに収められます。ディレクトリにもinodeが割り当てられ、そこからひもずくデータブロックに、このディレクトリ下のファイル/ディレクトリが、管理情報として収められています。
ファイルを作成すると、そのファイルのinodeがつくられるのはもちろん。同時にそのディレクトリのデータブロックに、このファイルのinodeおよびファイル名等が収められます。ファイルを削除すれば、おなじように、ファイルのinodeが削除され、同時にディレクトリのデータブロック上のこのファイルに関する情報も削除されます。
[kitamura@localhost test]$ ls -l drwxrwxr-x 2 kitamura kitamura 4096 dir [kitamura@localhost dir]$ ls a b [kitamura@localhost dir]$ cat a aaa [kitamura@localhost dir]$ cat b bbbディレクトリのパーミッションで-rとすると、ディレクトリのデータブロックが見えないと言うこと。すなわちlsできないことを意味します。しかしファイルの削除、およびファイルの中を読み書きすることは可能なのです。
[kitamura@localhost test]$ ls -l d-wx-wx--x 2 kitamura kitamura 4096 dir <- 読み込みパーミッション削除 [kitamura@localhost dir]$ ls ls: cannot open directory .: 許可がありません [kitamura@localhost dir]$ echo ccc > c [kitamura@localhost dir]$ cat c cccディレクトリのパーミッションで-wとすると、lsで見えますが、ディレクトリのデータブロックに書き込めないということで、削除とか新規作成ができないことになります。もちろんファイルの中を読み書きすることは可能です。
[kitamura@localhost test]$ ls -l dr-xr-xr-x 2 kitamura kitamura 4096 dir <- 書き込みパーミッション削除 [kitamura@localhost dir]$ ls a b c [kitamura@localhost dir]$ cat a aaa [kitamura@localhost dir]$ echo ddd > d bash: d:許可がありませんそしてxは、ディレクトリの読み書きはでき、そのファイルの中身がみれない。となりそうですが、ディレクトリ/ファイルの中身を読み書きできるか。ということのようです。
[kitamura@localhost test]$ ls -l drw-rw-r-- 2 kitamura kitamura 4096 dir <- 実行パーミッション削除 [kitamura@localhost dir]$ ls ls: cannot open directory .: 許可がありません [kitamura@localhost dir]$ echo ddd > d bash: d: 許可がありません [kitamura@localhost dir]$ cat a cat: a: 許可がありませんディレクトリのinodeブロックに設定されている(ファイルならファイル自身の実態)各ファイルのinode情報(実効/読み込み/書き込み)にかかる処理ができないこと。