linuxのファイルシステムのパーミッションに関して、未だに理解が浅い。こりゃあいかんと言うことでちょっと調べてまとめてみた。
まず、大前提としてuserとgroupとotherがあり、触るファイルのオーナーとグループによってそれぞれに設定されたパーミッションが適応される。ここは問題ない。
で、パーミッションにはrとwとxがあり、それぞれ以下のような意味になる。ここで、ディレクトリとファイルで意味が違うので注意が必要。
【ディレクトリ】
x → 移動可能
これがあれば、この中にあるファイルを利用できるr → リスト取得可能
これがあれば、この中にあるファイルの名前を知れる
(opendirは可能)w → ファイル構成書換可能
これがあれば、この中のファイルを削除・作成できる【ファイル】
x → 実行可能
これがあれば、このファイルを実行できるr → 読み込み可能
これがあれば、このファイルを読み込めるw → 書き込み可能
これがあれば、このファイルを書き換えられる
まず、ディレクトリのrが落とし穴。読み込み可能なので、この権限があれば中のファイルを開けると思い込みがちだが、中のファイルを利用するための権限はxである。rだけが指定されている場合は、readdirやTAB補完は可能(lsは不可)であるが、中のファイルをcatすることはできない。中のディレクトリに潜ることもできないので、実質このディレクトリ以下の利用はできないことになる。
逆に、xだけが指定されている場合は、ディレクトリの中身の一覧を得ることは出来ないが、中のファイルのcatはできてしまう。直接PATHを指定をすれば、ファイルに触るのは自由ということになる。
落とし穴の二つ目は、ファイルのw。このwは、変更不可を表すのだが、削除不可は表していない。ファイルの削除を表しているのは、ディレクトリのwである。ファイルのパーミッションが777であっても、ディレクトリにw権限がなければ、ファイルの削除はできない。
ここで厄介なのは逆の場合で、ファイルにw権限がなくてもディレクトリにw権限がある場合。ファイルにはw権限がないので、touch等による情報の変更はできない。しかし、ディレクトリにw権限があるので、削除をして再作成をすることはできる。よって、viで:w!による強制書き込みやopenによる新規作成、FTPによる上書き等をすると、簡単にこのファイルを書きかえることができてしまう。このとき、再作成を行うのでファイルのオーナーは変更されることになる。
・・・と、この辺りまで試行錯誤しながら調べてみた。オレも詳しくないので、間違ってたら指摘PLZですm(_ _)m。