Powered by SmartDoc

パーミッション

パーミッションとは

パーミッション(7)はユーザに対するファイルやディレクトリへのアクセス権限のことで、ユーザをオーナ(所有者)、グループのユーザ、その他のユーザの三つのグループに分け、それぞれに対して次に示す三つの権限をファイルやディレクトリに付加し、ファイルやディレクトリ操作時に参照される。これら三つの権利の組み合わせ例を表7.1[パーミッションの例]に示す。

読み出し権r(read)
ファイルやディレクトリを読み出す権利。
書き込み権w(write)
ファイルやディレクトリへの書き込み権利。
実行権x(execute)
ファイルを実行する権利とディレクトリを参照する権利。
パーミッションの例
文字表記 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コマンド確認・設定できる。

  1. permission :許可、許容、免許という意味

パーミッションの操作

パーミッションやファイル・ディレクトリのオーナなどの操作は次のコマンドを使う。

chmod
ファイル、ディレクトリのアクセス権を変更する
chown
ファイル、ディレクトリのオーナを変更する
chgrp
ファイル、ディレクトリのグループを変更する
umask
ファイル、ディレクトリ作成時にアクセス権設定の値を決定

chmodコマンド

chmodはCHange MOdeの略でファイルやディレクトリのモード(パーミッション)を変更するコマンドで、モードを変更できるのはファイルやディレクトリの所有者(オーナー)とスーパーユーザのrootだけである。

書式とオプション

chmodコマンドの書式
$ chmod [オプション] モード 対象ファイルやディレクトリ
R
ディレクトリに対して再帰的にモード設定を適用する
v
冗長な出力

モードの指定

数値でモード指定

モードを3ビットの2進数と見なし、-のときが0,-以外のときは1とし、1けたの8進数に変換する。

表7.2[モードと8進数]は実際に設定されるパーミッションのみを示したものである。

モードと8進数
モード 数値 権限
rwx 7 すべての権利
rw- 6 読み書き
r-x 5 読み込み(参照)、実行
r-- 4 読み込み
--- 0 権利無し

たとえば、ディレクトリsample1のパーミッションをオーナーにはすべての権限(7)、グループには読み出し(5)、その他のユーザには何も権限を与えない(0)場合には次のように指定する。

chmodの使用例
$ 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の使用例
$ chmod go+x test2

chownコマンド

chownはCHange OWNerの略で、ファイルやディレクトリのオーナ、グループを変更するコマンドで権限のあるファイルやディレクトリに対してのみ操作できる。一般的に管理者ユーザrootが使用する。

書式とオプション

chownコマンドの書式
$ chown [オプション] 新しい所有者名[.新しいグループ名] ファイルまたはディレクトリ

基本的には所有者(オーナ)を変更するコマンドだが、同時にグループも変更できる。

-c
実際に変更があった場合の動作を表示する
-f
エラーがあっても表示しない

使用例

  1. 拡張子.txtのファイルのオーナをsakabeにする。
  2. 拡張子.cのファイルのオーナをsakabe、グループをuserに変更する。
chownの使用例
$ chown sakabe *.txt
$ chown sakabe.user *.c

umaskコマンド

umaskコマンドはファイルやディレクトリを新規に作成するときのモードを決定する値(umask値)を設定・表示するシェルのビルトイン・コマンドである。

書式とオプション

umaskコマンドの書式とオプションは以下の通り。

umaskコマンドの書式
$ umask [マスク値]

コマンド名のみで実行すると現在のumask値が表示される。この値はディストリビューションなどにより異なり、022や002が一般的な値である。

ファイルやディレクトリ作成時にはumask値と666および777との排他的論理和によって得られる値がそれぞれのパーミッションとして設定される。umask値が022の時、666および777との排他的論理和を求めると644と755になる。

666 110 110 110 022 000 010 010 644 110 100 100 (7.1)

使用例

umask値の表示と変更方法は次の通り。

umaskコマンド
$ umask  <- umask値の確認
$ umask 077 <- umask値を077に設定

umask値を077に変更すると新規作成されたファイルとディレクトリのパーミッションは600(rx- --- ---)と700(rwx --- ---)となる。

SUID、SGID、スティッキービット

ファイルやディレクトリにはrwx以外に特殊な権限を設定できる。

SUID
Set User IDの略で、プログラムの実行ユーザIDをファイルのオーナにする機能。通常、プログラムの実行ユーザIDはそれを起動したユーザのIDとなるがSUIDが設定されている場合、ファイルのオーナのIDで実行される。lsコマンドの出力はオーナの実行権にsが表示される。
SGID
Set Group IDの略で、SUIDと同様の機能でプログラムの実行ユーザIDをグループIDにする機能。
スティッキービット
ディレクトリに設定するとそのディレクトリに作られたファイルはオーナ以外は削除できなくなる。lsコマンドの出力ではその他ユーザの実行権の部分にtが表示される。

chmodコマンドを使ってSUIDを設定する例を図7.8[SUIDを設定]に示す。

SUIDを設定
$ chmod 4755 test.sh
$ chmod u+s test.sh

演習

既存のディレクトリやファイルのパーミッションやオーナなどを変更し、それらを参照したり開こうとするとどうなるかをいろいろと試してみよ。

  1. ホームディレクトリの現在のパーミッションを文字および8進数で表現する。
  2. スーパユーザrootのホームディレクトリ(/root)のパーミッションを文字および8進数で表現しなさい。
  3. スーパユーザのホームディレクトリにアクセスするとどうなるか確認しなさい。
  4. ホームディレクトリのパーミッションをグループのユーザとその他のユーザが参照できるように変更しなさい。
  5. ホームディレクトリにある全てのディレクトリのパーミッションをオーナ以外のユーザに対して全て無効にしなさい。
  6. 次の内容を入力したファイルtest.shをカレントディレクトリ作り、./test.shと実行するとどうなるか。
    #!/bin/sh
    date
    cal
    
  7. ファイルtest.shに実行権を付加し、./test.shを実行するとどうなるか。
  8. 現在のumask値を調べなさい。