北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

パーミッションは難しい

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。