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を表している。
ファイルパーミッション | 意味 |
---|---|
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には起動時にアクセス権限を設定してシステム運用時には変更できないようにした強制アクセス制御のメカニズムが実装されている。最近では任意アクセス制御と強制アクセス制御の両方を組み合わせたアクセス制御機能の実装も進められている。