パーミッション(7)はユーザに対するファイルやディレクトリへのアクセス権限のことで、ユーザをオーナ(所有者)、グループのユーザ、その他のユーザの三つのグループに分け、それぞれに対して次に示す三つの権限をファイルやディレクトリに付加し、ファイルやディレクトリ操作時に参照される。これら三つの権利の組み合わせ例を表7.1[パーミッションの例]に示す。
文字表記 | 8進数表記 | 意味 |
---|---|---|
rwx | 7 | すべての権利がある |
rw- | 6 | 読み書きの権利があり、実行はできない |
r-x | 5 | 読み込みと実行あるいは参照の権利があり、書き込みの権利はない |
r - - | 4 | 読み込みの権限のみ |
- - - | 0 | 権限なし |
表7.1[パーミッションの例]の8進数はパーミッションの3文字を3桁の2進数と見なし、r、w、xの文字を1、-を0に置き換え、1桁の8進数に変換した値である。この8進数はlsコマンドでは表示されないが、パーミッション設定コマンド(chmod)で使用できる。
新規に作成されるファイルやディレクトリのパーミッションはumask値(一般的には022)とファイルは666、ディレクトリは777との排他的論理和で決まる。umask値022の場合、新規ファイルとディレクトリのパーミッションはそれぞれ644(rw-r--r--)、755(rwxr-xr-x)となる。umask値はumaskコマンド確認・設定できる。
パーミッションやファイル・ディレクトリのオーナなどの操作は次のコマンドを使う。
chmodはCHange MOdeの略でファイルやディレクトリのモード(パーミッション)を変更するコマンドで、モードを変更できるのはファイルやディレクトリの所有者(オーナー)とスーパーユーザのrootだけである。
$ chmod [オプション] モード 対象ファイルやディレクトリ
モードを3ビットの2進数と見なし、-のときが0,-以外のときは1とし、1けたの8進数に変換する。
表7.2[モードと8進数]は実際に設定されるパーミッションのみを示したものである。
モード | 数値 | 権限 |
---|---|---|
rwx | 7 | すべての権利 |
rw- | 6 | 読み書き |
r-x | 5 | 読み込み(参照)、実行 |
r-- | 4 | 読み込み |
--- | 0 | 権利無し |
たとえば、ディレクトリsample1のパーミッションをオーナーにはすべての権限(7)、グループには読み出し(5)、その他のユーザには何も権限を与えない(0)場合には次のように指定する。
$ chmod 750 sample1
文字でモードを指定するときはユーザを表7.3[ユーザを示す記号]の1文字でモードの追加は+、削除は-で、モードは表7.4[モードを示す記号]に示す1文字を使う。
文字 | 意味 |
---|---|
u | 所有者(オーナ) |
g | グループのユーザ |
o | その他のユーザ |
a | すべてのユーザ(ugoと同じ) |
文字 | モード |
---|---|
r | 読み取り |
w | 書き込み |
x | 実行またはディレクトリアクセス |
s | 実行時にユーザID、グループIDを設定 |
t | スティッキービット |
u | 所有者で現在のアクセス権 |
g | グループで現在の悪世間 |
o | その他ユーザで現在のアクセス権 |
たとえば、ファイルtest2のパーミッションをグループ(g)、その他のユーザ(o)に実行権(x)を追加したい場合は次のように記述する。
$ chmod go+x test2
chownはCHange OWNerの略で、ファイルやディレクトリのオーナ、グループを変更するコマンドで権限のあるファイルやディレクトリに対してのみ操作できる。一般的に管理者ユーザrootが使用する。
$ chown [オプション] 新しい所有者名[.新しいグループ名] ファイルまたはディレクトリ
基本的には所有者(オーナ)を変更するコマンドだが、同時にグループも変更できる。
$ chown sakabe *.txt $ chown sakabe.user *.c
umaskコマンドはファイルやディレクトリを新規に作成するときのモードを決定する値(umask値)を設定・表示するシェルのビルトイン・コマンドである。
umaskコマンドの書式とオプションは以下の通り。
$ umask [マスク値]
コマンド名のみで実行すると現在のumask値が表示される。この値はディストリビューションなどにより異なり、022や002が一般的な値である。
ファイルやディレクトリ作成時にはumask値と666および777との排他的論理和によって得られる値がそれぞれのパーミッションとして設定される。umask値が022の時、666および777との排他的論理和を求めると644と755になる。
(7.1) |
umask値の表示と変更方法は次の通り。
$ umask <- umask値の確認 $ umask 077 <- umask値を077に設定
umask値を077に変更すると新規作成されたファイルとディレクトリのパーミッションは600(rx- --- ---)と700(rwx --- ---)となる。
ファイルやディレクトリにはrwx以外に特殊な権限を設定できる。
chmodコマンドを使ってSUIDを設定する例を図7.8[SUIDを設定]に示す。
$ chmod 4755 test.sh $ chmod u+s test.sh
既存のディレクトリやファイルのパーミッションやオーナなどを変更し、それらを参照したり開こうとするとどうなるかをいろいろと試してみよ。
#!/bin/sh date cal