ファイル権限 わかりやすく
前回のレッスンでは、平らなディスクの上にファイルとフォルダーの木を立てました。けれども一台のコンピューターを何人かで使うと、その木には自分のファイルと他人のファイルが並んでぶら下がります。だれでも他人のファイルを開き、書き換え、消せるとしたら、すぐにめちゃくちゃになるでしょう。だれが何をしてよいかを決めるルールが必要です。
同じ木に多くの持ち主:ファイルごとに付く所有者の名札
クラス全員で学校のコンピューター一台を使う場面を考えてみます。ファイルの木には、私が作った発表資料も、友だちが出した課題も、コンピューター自身が使う設定ファイルも一緒にぶら下がっています。
ルールが何もなければ、だれでも私の発表資料を開いて書き換えたり丸ごと消したりできますし、設定ファイルをいじってコンピューターを起動できなくしてしまうこともあります。
そこでOSは真っ先に、すべてのファイルに所有者の名札を付けます。このファイルをだれが作り、だれのものかを、ファイルごとに書き留めておくのです。
三つのファイルを一つずつ押すと持ち主が現れます。自分のファイルは金色、友だちとシステムのファイルは薄い色で表示され、持ち主のいないファイルは一つもありません。
これで、どのファイルがだれのものかははっきりしました。ただ、持ち主がわかるだけでは足りません。
友だちが私の発表資料を開いて眺めるだけなのと、中身を書き換えたり消したりするのとでは、まったく別のことだからです。見るのはかまわなくても、書き換えまで許したくはないかもしれません。
そこで、一つのファイルに対してどこまでの行動を許すのかを、もっと細かく分ける必要があります。
三つの行動:読み取り、書き込み、実行
OSは、ファイルにできることをちょうど三つに分けます。読み取りはファイルの中身を見ること、書き込みは中身を書き換えたり消したりすることです。実行は、そのファイルがプログラムのときに動かして仕事をさせることです。
この三つは、それぞれ別々にオンとオフを切り替えられます。読み取りをオンにしたまま書き込みだけをオフにすれば、そのファイルは見ることはできても書き換えられません。
プログラムのファイルでも、実行がオフなら動かせません。
読み取り・書き込み・実行のスイッチを押して、オンとオフを切り替えます。最初は読み取りだけがオンで、見ることしかできないファイルです。オンは緑(許可)、オフは赤(遮断)になり、一つを変えても残りの二つはそのままです。
読み取り・書き込み・実行という三つのスイッチだけでも、かなり細かく調整できます。見ることは許して書き換えは止めることも、動かすことだけを許すこともできます。
けれども、まだ一つ抜けています。読み取りを許すとして、いったいだれに許すのでしょうか。持ち主だけなのか、世界中のだれにでもなのかで、意味はまるで変わります。
同じファイルでも、相手がだれかによって許す範囲を変えられなければなりません。
だれに?所有者、グループ、その他
OSは人を三つのまとまりに分けます。一つ目はファイルの持ち主である所有者、二つ目は同じチームとしてまとめられたグループです。同じ班の友だちを思い浮かべればよいでしょう。三つ目は、それ以外のすべての人、つまりその他です。
そして、先ほどの読み取り・書き込み・実行を、この三つのまとまりごとに別々に決めます。下の図の最初の状態がその一例で、所有者は三つともでき、グループは読み取りと実行だけ、その他は読み取りだけができます。
こうして権限は、だれ(三つの行)と何(三つの列)を組み合わせた一枚の表になります。
マスを押すたびに、許可(緑)と遮断(赤)が切り替わります。行は所有者・グループ・その他、列は読み取り・書き込み・実行なので、同じファイルでも相手ごとに違う権限を与えられます。
これで、同じファイルでも相手ごとに違う権限を与えられるようになりました。かなりきめ細かい秩序です。
ところが、ここで困ったことが一つ浮かびます。すべてのファイルが持ち主にしっかり鍵をかけられていたら、コンピューターに新しいプログラムを入れたり、パスワードを忘れた人のために設定し直したりするのは、だれの役目でしょうか。
どの錠でも開けられる特別な人がいなければ困りそうです。
管理者(ルート):ルールの上に立つ万能の鍵
その特別な人が管理者です。Linuxのようなシステムでは、ルートやスーパーユーザーと呼ばれます。管理者は、先ほどの権限の表を飛び越えます。どんなファイルでも読み、書き換え、実行できる万能の鍵を握っているわけです。
おかげで、新しいプログラムを入れ、壊れた設定を直し、忘れたパスワードを設定し直せます。
ただし、この鍵はそれだけ危険でもあります。管理者のまま命令を一つ間違えるだけで、システム全体が壊れることもあります。そのため、ふだんは一般のユーザーとして使い、本当に必要なときだけ管理者の権限を少し借ります。
まず一般のユーザーのまま、友だちの鍵付きファイルを開くと遮断(赤)されます。管理者に切り替えてもう一度開くと、万能の鍵で許可(緑)されます。
鍵のかかったファイルは、一般のユーザーには閉じたままで、管理者には開きました。この万能の鍵があるからこそ、だれかがコンピューターの面倒を見て、直すことができます。
同時に、なぜむやみに管理者のまま過ごしてはいけないのかも見えてきます。その鍵の前では、どの錠も力を失うからです。
権限という秩序は、一般のユーザーを柵の内側に置き、管理者には柵を越える力を与えながら、その力を慎重に使うように組み立てられています。
まとめ:だれ掛ける何、そしてその上の管理者
一枚にまとめると、こうなります。何人もで使う木を守るため、OSはすべてのファイルに所有者の名札を付け、小さな表を一つぶら下げます。
表の横は「何を」、つまり読み取り・書き込み・実行で、縦は「だれが」、つまり所有者・グループ・その他です。マスごとに、許可なら緑、遮断なら赤で示します。
そして、この表全体の上に万能の鍵を持った管理者が立っています。一般のユーザーは表が許す範囲でしか動けず、管理者は表を飛び越えて何でもできます。前回の整った木が、何人もで安全に分け合える木になりました。
表には、所有者・グループ・その他にできることが緑と赤で整理されています。下のボタンで管理者に切り替えると、万能の鍵が表全体を一度に許可(青)に変えます。
ところが、ここで妙な隙間が一つ見えてきます。前に見たとおり、OSはプログラムがハードウェアやディスクにじかに触れないよう壁を立てていました。
それなら、私のプログラムは、読み取りを許されたファイルでさえ、どうやって開くのでしょうか。じつはプログラムは自分ではファイルを開けません。OSに開いてくれるよう頼む必要があります。
次のレッスンでは、プログラムがOSに仕事を頼む公式の窓口、システムコールを扱います。この表を見て権限を確かめる仕事も、まさにその窓口で行われます。