パーミッションって何?


前回はCGIのしくみについて、大まかに説明したよね。
CGIもHTMLと同じようにサーバーにファイルをアップロードして誰でもページ(ファイル)を見れるようにしないといけないよね。
ただ、通常HTMLっていうのはホームページとしてみんなに見てもらうだけなので、読み取りさえできればいいよね。
けれど、CGIではファイルを書いたりできるという特徴があったので、
単にファイルをアップロードするだけじゃなくて、書き込みができるようにしないといけないんだ。
単に書き込みができるというファイルをアップロードすると、誰でもファイルをいじれてしまうよね。
だから、誰が書き込みができて、誰は書き込みができないというような細かい設定をしないといけないんだ。
そして、このような誰が書き込みができるかという権限をパーミッションと言って
CGI用のファイルをアップロードするときには、このパーミッションというものを設定しないといけないんだ。
じゃあ、実際にそれぞれのファイルについてパーミッションの設定とはどういうものかを交えながら解説していくね。
※パーミッションというのは難しいかもしれないけれど、長ったらしい言葉を短く使えるようにした単なる単語。
 簡単に書くと、
 パーミッション=誰がどんな操作をできるのかという情報
 なので、よくわからない人は上のように置き換えて呼んでいってね。

じゃあ、実際にパーミッションについてちょっとだけ詳しく説明してみるね。
(このパーミッションの考え方はCGIに特別な考え方ではなく、同一マシンを複数の人間で操作する場合に使用するもので、
サーバーというのはみんなで一つのマシンを操作することから、同じようにパーミッションという考え方が使われるんだ)
まず、ファイルを操作することができる人を3つに分けてみよう。
まずは、ファイルの持ち主(ファイルをアップロードした人)がいるよね。
次に、同じマシンを操作できる人(同じサーバー上の人)がいるね。
そして、今挙げた2つ以外に該当する人の3つに分けられるんだ。
このままだと、ちょっと文章が長くなるので

ファイルの持ち主=オーナー
同じマシンを操作できる人=
グループ
2つ以外に該当する人=
その他

として考えていこう。

次に、それぞれの人ができる操作について考えてみよう。
ファイルというのは、「読む」「書く」「実行する」の3つの操作があるんだ。

パーミッションを表で表す
まずは、あるファイルに対してさっきの"操作をする人""操作"を縦と横で表にしてみよう。

あるファイルのパーミッション(誰がどの操作をできるか)

  オーナー グループ その他
読む ×
書く × ×
実行 × ×

このようにすると、ファイルに対する操作がわかりやすいよね。
じゃあ、実際にファイルに対する操作をこんな表で設定しているのかというとそうではないんだ。
このままだと便利だけど、
コンピューターに表を見せるわけにはいかないので何とかしてこれをコマンド(単なる文字列)に変換しないといけないんだ。
どうやって表を1つの文字列で表せばいいだろう。

パーミッションを文字列で表す
まず、もっとも簡単な方法として、
読む=r, 書く=w, 実行=x, 操作不可=-
と決めて、[読む][書く][実行]の順でそれぞれの人に対して設定をすると、
上の表は以下のようになるんだ。

オーナー グループ その他
rwx r-- ---

ちょっと難しいかな?
例えばオーナーであれば[読む][書く][実行]の全ての操作ができるよね。
なので、値としては[rwx]となるんだ。
また、グループは[読む]だけが可能でそれ以外は操作できないので[r--]となるんだ。
同じようにその他は操作は全くできないので[---]となるよね。
これらを順に並べると、

    rwxr-----    →    rwxr----(色を消しただけ)

という文字列だけで表すことができたね。

 

パーミッションを数字で表す
じゃあ、最後にパーミッションを数字で表してみよう。
ちょっと難しいかもしれないけれど、もう一度最初の表を使ってみよう。
ただし、今回は●という記号の替わりに数字を使ってみるね。
使う数字は、
    [読む]の場合は"4"
    [書く]の場合は"
2"
    [実行]の場合は"
1"
という決まりに従って書いていこう。
このそれぞれの数字についてなぜこうなるのかというのは難しいのでとりあえずは覚えておくだけでいいよ、
というか覚えなくてもこんなもんなんだくらいでもいいかな。
一応後で少しだけ解説するけど、必要なときに覚えると思うから今はなんとなくでいいので読んでいこう。

  オーナー グループ その他
読む ×
書く × ×
実行 × ×

  オーナー グループ その他
読む 4 4 ×
書く 2 × ×
実行 1 × ×
合計 7 4 0

下の表では一番下に合計を出しているんだけれど、これこそが最終的にパーミッション値になる部分なんだ。
つまり、この表のパーミッション地は合計を左から表示した[740]ということになるんだ。
ちなみに、さっきのパーミッションを文字で表したときと比べると、

    rwxr-----    →    740

という風になるんだ。
これで、パーミッションを数字であらわすことができたよね。

じゃあ、最後になぜパーミッションを数字で表すときに
    [読む]の場合は"4"
    [書く]の場合は"
2"
    [実行]の場合は"
1"
とするのかについて簡単に説明するね。
まず、設定するからには設定の情報を見てどのように設定されているかがわからなければならないね。
つまり、今の場合だと[740]という数字を見て、これがどのような設定なのかがわからないといけないね。
それはどういうことかというと、数字を見たらどのような操作が可能かがわからなければいけないということだね。

ここで、先ほどの数字を単純に
    [読む]の場合は"2"
    [書く]の場合は"2"
    [実行]の場合は"2"
として、全部を統一してみよう。
今回は簡単のためにオーナーの操作のみに注目するね。
※[---]の赤の部分のみに注目
例えば、オーナーの権限が[読む][書く]だけだとしよう。
その場合、オーナーの権限は数字で表すと[4]になるよね。(※2+2=4なので)
このように考えると簡単だけれど、
逆に[4]という数字を見て、どのような操作が可能かを読み取ることはできるかな?
[4]という数字は2+2ならどれでもいいので、
[読む][書く]かもしれないし、[読む][実行]かもしれないし、[書く][実行]かもしれないよね。
そうなったら、設定した後でその設定した数字が何を表しているのかがわからなくなってしまうね。

そこで、さっきの正しい数字で
    [読む]の場合は"4"
    [書く]の場合は"
2"
    [実行]の場合は"
1"
のようにして設定したとしよう。
すると、[読む][書く]というのは[6]となる(4+2)ので、
もし[6]という数字がわかればこれは[読む][書く]しかないんだ。
他の組み合わせでも全て違う値になるんだ。
    [読む][書く][実行]    = 7
    [読む][書く]            =
6
    [読む][実行]            =
5
    [書く][実行]            =
3
    [読む]                    =
4
    [書く]                    =
2
    [実行]                    =
1
※ちなみに、なぜこのような数値になるかなどの説明は2進数というものの解説も必要。
 今回はその説明は省かせてもらうね。またいつか説明しまーす。


 CGIの仕組み

転送モード