Guides, HowTos and Tips for Technology Geeks - The Geek Stuff

LinuxやFreeBSDなどのUnix系OSでは3つの権限と3つのユーザタイプでファイルやディレクトリのアクセス制御を実現する任意アクセス制御を採用している。こうしたOSを使用する場合には最初に理解すべきメカニズムといえる。UNIX / Linux: Beginners Guide to File and Directory Permissions ( umask, chmod, read, write, execute )にこのあたりの仕組みが簡潔にまとまっている。LinuxやFreeBSDを使い始めたばかりのユーザはチェックしておきたい内容。紹介されている内容は次のとおり。

基本の任意アクセス制御

3つの権限(read、write、execute)と3つのユーザタイプ(owner、group、others)の表でファイルとディレクトリのアクセスを制御する。ファイルとディレクトリで3つの権限は意味が異なる。ls(1)コマンドにオプション-lを指定した場合、「-rw-r--r--」部分がパーミッションを表現しており、2目の文字から3文字づつがそれぞれユーザ自身、グループのユーザ、その他のユーザに対応している。3文字の先頭から順にread、write、executeを表している。

ls(1)コマンドに-lオプションを指定した場合の出力の例

ファイルパーミッション 意味
read ファイルの内容を読む権限
write ファイルへ書き込む権限
execute ファイルを実行ファイルとして実行する権限
ディレクトリパーミッション 意味
read ディレクトリ下にあるファイルやディレクトリのリストを閲覧する権限
write ディレクトリ下に新しくファイルやディレクトリを作成する権限
execute ディレクトリ下に移動する権限

アクセス設定の変更

アクセス設定の変更はchmod(1)コマンドで実行する。1つ目の引数が設定するパーミッション、2つ目以降が対象のファイルやディレクトリになる。read、write、exeuteにそれぞれ4、2、1が割りあてられているため、与えたい権限を足した数を指定する。指定されない権限は剥奪される。たとえば「644」は「owner=6, group=4, others=4」であり「owner=4+2 group=4, others=4」だから、ユーザには読み込み(read=4)と書き込み(write=2)の権限が与えられ、グループとその他のユーザには読み込み(read=4)の権限のみが与えられることになる。

パーミッション 割り当てられる数値
read 4
write 2
execute 1
パーミッションの変更例 意味
chmod 644 filename ユーザに読み込みと書き込みを許可、それ以外のユーザには読み込みのみを許可。
chmod 540 filename ユーザに読み込みと実行を許可、グループのユーザには読み込みのみを許可、それ以外のユーザには何も許可しない。
chmod 604 filename ユーザに読み込みと書き込みを許可、グループのユーザには何も許可しない、それ以外のユーザには読み込みのみを許可。

デフォルトのアクセス権限とマスク

ファイルとディレクトリのデフォルト設定は666と777になっている。これにマスク値と呼ばれる値を引いたものが実際に作成されるファイルやディレクトリのデフォルト設定になる。たとえばマスク値が022なら、ファイルの設定は666のそれぞれを-0, -2, -2した644となり、ディレクトリは755となる。マスク値はumask(1)コマンドで変更できる。引数になにも指定せずにumask(1)コマンドを実行すると、現在設定されているマスク値が表示される。

種類 デフォルト値
デフォルトファイルパーミッション 666
デフォルトディレクトリパーミッション 777
デフォルトマスク 022
適用されるファイルパーミッション 644
適用されるディレクトリパーミッション 755
# umask                   現在のマスク値の表示
022
# mkdir testdir01
# touch testfile01
# ls -l
total 2
drwxr-xr-x  2 daichi  wheel  512  4月  7 13:22 testdir01
-rw-r--r--  1 daichi  wheel    0  4月  7 13:22 testfile01
# umask 077               マスク値を077へ変更
# mkdir testdir02
# touch testfile02
# ls -l
total 4
drwxr-xr-x  2 daichi  wheel  512  4月  7 13:22 testdir01
drwx------  2 daichi  wheel  512  4月  7 13:22 testdir02
-rw-r--r--  1 daichi  wheel    0  4月  7 13:22 testfile01
-rw-------  1 daichi  wheel    0  4月  7 13:22 testfile02
#

任意アクセス制御は基本的なメカニズム。ただし、ユーザアカウントが乗っ取られるとそのユーザの権限でさまざまな設定が変更できてしまうため、LinuxやFreeBSDには起動時にアクセス権限を設定してシステム運用時には変更できないようにした強制アクセス制御のメカニズムが実装されている。最近では任意アクセス制御と強制アクセス制御の両方を組み合わせたアクセス制御機能の実装も進められている。