next up previous contents
Next: 環境設定 Up: ユーザー管理 Previous: ホームディレクトリと配布ファイル

ファイルのパーミッション

ファイルに対して Unix では所有者やグループがあることを先に述べたが、 こうした所有者やグループがあることの目的は、それぞれのファイルについて アクセス制御が可能になっていることである。このアクセス権は、3つのユーザー クラスに対して独立に設定できるようになっている。ユーザークラスは、
u
user(所有者) ファイルやディレクトリの所有者
g
group(グループ) 所有者と同じグループに所属するユーザ
o
other(他人) 上記以外のユーザ
に分かれており、所有者は自分と同じグループのユーザにはファイルに対して 読み書きの権限を与え、他人に対しては読み込みのみの権限を与えるような ことが可能になっている。

アクセス権には通常次の3つが独立に設定出来る。

r
read 読み込み可能
w
write 書き込み可能
x
eXecute 実行可能(ディレクトリに対しては cd 可能)

通常、こうしたファイルのアクセス権の状態は、ls -l によって表示される。

-rw-------  1 kanayama  staff   280 Jul 12 20:54 .rhosts
-rw-r--r--  1 kanayama  staff   856 Jul 12 20:54 .shrc
-rw-rw-r--  1 kanayama  staff     0 Jul 14 17:34 test
この表示の第一フィールドに表示されている文字列がアクセス権の状態を 表し、全部で10文字の長さを持っており、最初の一文字目はディレクトリ あるいはファイル種別(- は通常ファイル、l はリンク、c・bは特殊なデバイス に関係するファイル)を表す他は3文字づつの集合が3回表れ、最初の3文字 は所有者に対する、次の3文字はグループに、最後の3文字は他人に対する 状態を表し、それぞれの3文字は read,write, execute の状態を表示している。

これらのアクセス権の設定に用いられるコマンドが chmod である。 通常使う際の書式は以下の通りである。

    chmod  [-R]  [-v]   mode   file[or directory]
ここで、-R オプションはchown,chgrpなどと同じく 再帰動作をする。-v オプションは設定されたファイル名を表示する。 mode の書式には2通りあり、一つは先のクラスとアクセス権の記号を 使って設定をする方法であり、今ひとつはオクテット(octet - octは8を意味する) で直接アクセス権のビットを変更する方法である。 前者の場合、一般にmode は以下のように書く。

    ユーザクラス+アクセス権
従って、group に対して、書き込み権限(w)を与えるときのmodeの指定は、


    g+w
となる。クラス、アクセス権は複数を同時に指定可能で、other,groupに対して 読み込み(r)と実行(x)の権限を与える場合には、

    og+rx
のように指定する。従って、test について上記の設定をする場合は、

    # chmod  og+rx  test
となる。ここで、modeの指定では空白を入れてはならない。

次にオクテット指定の場合には、modeは3桁の数字で指定し、一つの数字が 一つのクラスに対するアクセス権の設定に対応し、3桁の数字は左から順に 所有者、グループ、他人に対する設定に対応する。 数字は1,2,4がそれぞれ実行、書き込み、読み込みに対応し、それらの数の 和で状態が表される。以下に対応関係を掲げる。
記号表記 オクテット表記 計算式
rwx 7 1+2+4
rw 6 2+4
rx 5 1+4
r 4 4
xw 3 1+2
w 2 2
x 1 1
rrr
これらの指定が3つのクラスに対して指定するので、例えば で、 、の場合は、

    # chmod  754  test
のように指定することになる。

実はこれらの他に更に特殊なモードがあり、それぞれ SetUID, SetGID, Stickyビットと呼ばれるモードがある。特に重要なものがSetUIDビットで、 これは実行ファイルに対して用いられると、ファイルを実行した人の権限 で実行するのではなく、ファイルの所有者の権限で実行する事が出来る ようになる。つまり、root所有の実行ファイルに対してこれが設定されてい ると、一般ユーザであってもrootの権限で動いてしまう訳である。従って、 すぐに分かるように SetUIDビットはシステムのセキュリティにとって非常に 危険な仕組みであるので、注意して管理する必要がある。

これらの特殊ビットを設定する際には、オクテット指定を用い、それぞれ 以下のオクテットを使う。

SetUID
4000
SetGID
2000
Sticky
1000
実際には、以下のように指定する。

    # chmod   4555   /bin/mailq
    # ls -l /bin/mailq
    -r-sr-xr-x  5 root  wheel  290448 Jun 22 12:13 /usr/bin/mailq



Noriyo Kanayama