パーミッションの考え方

今回、パーミッションについて、深く学ぶ機会があったので、パーミッションの考え方をメモしておきます。

■パーミッションを決めるために考えなくてはいけないこと
◎プロセス(処理)にも所有者がいて、その所有者は一体誰なのか
◎ルートディレクトリ( / )から下層に向かってパーミションを考える

ちょっと分かりにくいかと思いますので、以下、具体例です。まず、今回担当したお仕事について書いておきます。

とあるサーバーがあります。このサーバーは、hosts.allowに書かれているIPアドレスでしかsshができません。そこで、ブラウザからこのサーバーにsshするIPアドレスを送信して、hosts.allowに登録できる仕組みを作ってね。但し、hosts.allowに登録する前に、毎回hosts.allowのバックアップをとっておいてちょーだい。バックアップファイルの置き場所は、とりあえず、/home配下にbackupっていうディレクトリ(フォルダ)を作ってそこにしてちょーだい。

※余談ですが、このIPアドレス登録画面を使用する人は複数人いますが、登録画面に行き着くまでにIDとPASSWORDでログインして個人認証を経なければなりません。追加されたhosts.allowは、毎日定刻になるとクーロン処理でまっさらな状態(登録件数0の状態)に戻ります。

要件については、だいぶはしょって書きましたが、パーミッションに関係ある部分で言うと、以下の様な感じです。

■今回の登場人物
◎hosts.allow
◎hosts.allowのバックアップをとり、ブラウザから受け取ったIPアドレスを書き込む処理を書いたphpファイル
 →設置は、/home/webservice/public配下にkoma.htmlという名前で。
◎バックアップファイルの置き場所である/home/backupディレクトリ

では、一番始めに書いた、「プロセスにも所有者がいて、その所有者は一体誰なのか」と、「ルートディレクトリ( / )から順番にパーミションを考えなくてはいけない」というのを以下に。

■プロセス(処理)にも所有者がいて、その所有者は一体誰なのかを考える
(1)koma.htmlを回す(実行する)のは、webサーバー(今回はapache)。
(2)hosts.allowに書き込みに行くのも、webサーバー(apache)。
(3)hosts.allowのバックアップを書き込みに行くのも、webサーバー(apache)。

◎(2)と(3)はkoma.htmlが実行されたときの処理だから、koma.htmlを実行したのがapacheならば、koma.htmlで行われる処理もapacheが行っているということになる。
◎要は、koma.htmlを実行するプロセスも、hosts.allowに書き込みに行くプロセスもバックアップを書き込みに行くプロセスも、apacheが所有者だということです。
(apacheがkoma.htmlを実行して、書き込んだりバックアップをとったりしてる、ということ)
■ルートディレクトリ( / )から順番にパーミションを考える
→なぜならば、プロセスの所有者は基本的に、処理に関わるディレクトリやファイルをルート( / )から下層に向かって探しに行くから。

◎今回の処理の流れ(どのプロセス(処理)もapacheが所有者)
koma.htmlを実行して登録画面の表示・IPアドレスの送信
↓
hosts.allowのバックアップをとり、hosts.allowに書き込む

上記のうち、koma.htmlを実行して登録画面を表示することろまでをみると以下のようになる。

◎koma.htmlは「/home/webservice/public/koma.html」にある。
クライアント(ブラウザ)側から、登録画面を表示してよ、とリクエストされる
↓
まず、/(ルート)にいって、lsしてhomeを探す
↓
homeを見つけたら、cdしてhomeに移動
↓
lsしてhomeの中にwebserviceがあるか確認
↓
webserviceがあれば、cdしてwebserviceに移動
↓
lsしてwebserviceの中にpublicがあるか確認
↓
publicを見つけたら、cdしてpublicに移動
↓
publicの中でlsしてkoma.htmlがあるか確認
↓
koma.htmlがあれば、中身を見てプログラムを回し登録画面をクライアントに返す。

★apache君が上記のように動けるよう、それぞれのディレクトリやkoma.htmlでパーミッションを決める必要があるのです。
★例えば、webserviceディレクトリは、apache君はcdできないよ、とか、lsできないよ、ってことになっているとダメな訳です。

あとは、apache君は、それぞれのディレクトリやkoma.htmlの、所有者なのかグループなのか、その他なのかを知れば、あとはパーミッションを決めるだけです。


以下のリンクは、「パーミッションのrやw、xは具体的に何を許可することになるのか」を書いた物です。
http://d.hatena.ne.jp/midori_kasugano/20091228/1261986710