ファイルは、UNIX ファイルアクセス権と ACL を通して保護することができます。スティッキービットが設定されたファイルと、実行可能なファイルは、特殊なセキュリティー対策が必要です。
この表は、ファイルとディレクトリの監視と保護を行うコマンドについて説明したものです。
表 6–1 ファイルとディレクトリの保護を行うコマンド| コマンド | 説明 | マニュアルページ | 
|---|---|---|
| ディレクトリ内のファイルとファイル情報を表示します。 | ||
| ファイルの所有権を変更します。 | ||
| ファイルのグループ所有権を変更します。 | ||
| ファイルのアクセス権を変更します。記号モード (文字と記号) または絶対モード (8 進数) を使用して、ファイルのアクセス権を変更できます。 | 
従来の UNIX ファイルアクセス権では、次に示す 3 つのユーザークラスに所有権を割り当てることができます。
ユーザー – ファイルまたはディレクトリの所有者。通常はファイルを作成したユーザーです。ファイルの所有者は、そのファイルの読み取り、書き込み (ファイルを変更する)、または実行 (コマンドの場合) が行えるユーザーを決定できます。
グループ – ユーザーグループのメンバー。
その他 – ファイル所有者ではなくグループメンバーでもないその他の全ユーザー。
ファイルアクセス権の割り当てや変更が行えるのは、通常、そのファイルの所有者だけです。しかし、ファイルの所有権の変更は、管理権限のあるユーザー (スーパーユーザーなど) または役割 (Primary Administrator 役割など) によっても行えます。システムポリシーを上書きする方法については、例 6–2 を参照してください。
ファイルは、7 つの形式のいずれかになります。各形式は、次のように記号で示されます。
次の表に、各ユーザークラスに与えることができる、ファイルまたはディレクトリのアクセス権を示します。
表 6–2 ファイルとディレクトリのアクセス権| 記号 | アクセス権 | オブジェクト | 説明 | 
|---|---|---|---|
| r | 読み取り | ファイル | ファイルの内容を開いて読み込むことができます。 | 
| 
 | 
 | ディレクトリ | ディレクトリ内のファイルを一覧表示できます。 | 
| w | 書き込み | ファイル | ファイルの内容の変更またはファイルの削除を行えます。 | 
| 
 | 
 | ディレクトリ | ディレクトリに対してファイルまたはリンクを追加できます。また、ディレクトリ内のファイルまたはリンクの削除も行えます。 | 
| x | 実行 | ファイル | ファイルがプログラムまたはシェルスクリプトの場合、そのファイルを実行できます。また、exec(2) システム呼び出しの 1 つを使用してそのプログラムを実行することもできます。 | 
| 
 | 
 | ディレクトリ | ディレクトリ内のファイルを開いたり、実行したりできます。また、ディレクトリを作成し、その下にサブディレクトリを作成できます。 | 
| - | 拒否 | ファイルとディレクトリ | ファイルの読み込み、書き込み、または実行を行うことができません。 | 
これらのファイルアクセス権は、通常のファイルと特殊ファイル (デバイス、ソケット、名前付きパイプ (FIFO) など) の両方に適用されます。
シンボリックリンクには、そのリンクが指すファイルのアクセス権が適用されます。
ディレクトリとそのサブディレクトリ内のファイルは、そのディレクトリに対するファイルアクセス権を制限することで保護できます。ただし、スーパーユーザーはシステム上のすべてのファイルとディレクトリにアクセスできます。
実行可能ファイルと公開ディレクトリには、 3 種類の特殊なアクセス権 (setuid、setgid、およびスティッキービット) を設定できます。これらのアクセス権を設定すると、その実行可能ファイルを実行するユーザーは、そのファイルの所有者 (またはグループ) の ID を持つことができます。
特殊なアクセス権はセキュリティー上の問題を引き起こすため、設定するときは十分な注意が必要です。たとえば、ユーザー ID (UID) を 0 (root の UID) に設定するプログラムを実行すれば、ユーザーはスーパーユーザー権限を取得できます。また、すべてのユーザーは、所有するファイルに対して特殊なアクセス権を設定できるため、これもセキュリティー上の問題の原因となります。
setuid アクセス権や setgid アクセス権を不正に使用してスーパーユーザー権限が取得されていないか、システムを監視する必要があります。疑わしいアクセス権によって、管理プログラムの所有権が root や bin ではなく一般ユーザーに付与されていることが考えられます。この特殊なアクセス権を使用しているファイルをすべて検索し、リストする方法は、「特殊なファイルアクセス権が設定されたファイルを見つける方法」を参照してください。
setuid アクセス権を実行可能ファイルに設定すると、このファイルを実行するプロセスにはその実行可能ファイルを実行しているユーザーではなく、ファイルの所有者に基づいてアクセス権が与えられます。この特殊なアクセス権を使用すると、通常は所有者しか利用できないファイルやディレクトリにアクセスできます。
たとえば、passwd コマンドの setuid アクセス権によってユーザーはパスワードを変更できます。次に、setuid アクセス権のある passwd コマンドの例を示します。
| -r-sr-sr-x 3 root sys 28144 Jun 17 12:02 /usr/bin/passwd | 
この特殊なアクセス権は、プロセスの実行が終了したあとでも、高度な知識のあるユーザーは setuid プロセスによって与えられたアクセス権を維持する手段を見つけることができるため、セキュリティー上の危険が存在します。
プログラムから予約済み UID (0 から 99) で setuid アクセス権を使用しても、実効 UID は正しく設定されない場合があります。シェルスクリプトを使用するか、setuid アクセス権では予約済み UID を使用しないようにしてください。
setgidアクセス権は setuid アクセス権に似ています。プロセスの実効グループ ID (GID) はファイルを所有するグループに変更され、ユーザーにはそのグループに与えられたアクセス権に基づくアクセス権が与えられます。/usr/bin/mail コマンドには、次のように setgid アクセス権が設定されています。
| -r-x--s--x 1 root mail 67504 Jun 17 12:01 /usr/bin/mail | 
setgidアクセス権がディレクトリに適用されると、このディレクトリ内で作成されたファイルはディレクトリが所属するグループに含まれることになります。生成するプロセスが所属するグループに含まれるわけではありません。ディレクトリに対する書き込み権および実行権を持つユーザーは、そのディレクトリにファイルを作成できます。ただし、作成したファイルはユーザーのグループではなくディレクトリを所有するグループに割り当てられます。
setgidアクセス権を使用して不正にスーパーユーザー権限が取得されていないか、システムを監視する必要があります。疑わしいアクセス権によって、このようなプログラムへのグループアクセス権が、root や bin ではなく、意外なグループに与えられることがあります。このようなアクセス権を使用しているファイルをすべて検索し、一覧表示する方法は、「特殊なファイルアクセス権が設定されたファイルを見つける方法」を参照してください。
「スティッキービット」は、ディレクトリ内のファイルを保護するアクセス権ビットです。ディレクトリにスティッキービットが設定されている場合、そのファイルを削除できるのはその所有者、ディレクトリの所有者、または特権を持つユーザーだけです。特権を持つユーザーの例として、root ユーザーや Primary Administrator 役割が挙げられます。スティッキービットにより、ユーザーは /tmp などの公開ディレクトリからほかのユーザーのファイルを削除できなくなります。
| drwxrwxrwt 7 root sys 400 Sep 3 13:37 tmp | 
TMPFS ファイルシステム上で公開ディレクトリを設定するときには、スティッキービットを手動で設定してください。手順については、例 6–5 を参照してください。
ファイルやディレクトリを作成するときには、デフォルトのアクセス権が設定されます。このシステムデフォルトは変更が可能です。テキストファイルのアクセス権は 666 であり、すべてのユーザーに読み取り権と書き込み権を与えます。ディレクトリと実行可能ファイルのアクセス権は 777 で、すべてのユーザーに読み取り権、書き込み権、および実行権を与えます。一般にユーザーは、自分の /etc/profile ファイル、.cshrc ファイル、または .login ファイルを手動で指定し、システムのデフォルトに優先させます。
umask コマンドによって割り当てられる値は、デフォルトから差し引かれます。この処理には、chmod コマンドでアクセス権を与えるのと同じ方法でアクセス権を拒否する効果があります。たとえば、chmod 022 コマンドはグループとその他のユーザーに書き込み権を与えますが、umask 022 コマンドはグループとその他のユーザーの書き込み権を拒否します。
次の表に、代表的な umask の設定とその設定が実行可能ファイルに与える影響を示します。
表 6–3 各セキュリティーレベルの umask 設定| セキュリティーレベル | umask 設定 | 許可されないアクセス権 | 
|---|---|---|
| 緩やか (744) | 022 | グループとその他のユーザーによる w | 
| 中程度 (740) | 027 | グループによる w、その他のユーザーによる rwx | 
| 中程度 (741) | 026 | グループによる w、その他のユーザーによる rw | 
| 厳しい (700) | 077 | グループとその他のユーザーによる rwx | 
umask 値の設定の詳細については、umask(1) のマニュアルページを参照してください。
chmod コマンドを使用すると、ファイルのアクセス権を変更できます。ファイルまたはディレクトリの所有者、あるいはスーパーユーザーだけがそのアクセス権を変更できます。
chmod コマンドを使用して、次のどちらかのモードでアクセス権を設定できます。
絶対モード – ファイルアクセス権を表す数値を使用します。絶対モードを使用してアクセス権を変更するときは、3 つ 1 組のアクセス権を 8 進数で表します。絶対モードは、アクセス権の設定に一番多く使用されている方法です。
次の表に、絶対モードでファイルのアクセス権を設定するための 8 進数値を示します。これらの数字を 3 つ組み合わせて、所有者、グループ、その他のユーザーのファイルアクセス権をこの順に設定します。たとえば、値 644 は、所有者に対して読み取り権と書き込み権を設定し、グループとその他のユーザーに対しては読み取り専用権を設定します。
表 6–4 絶対モードによるファイルのアクセス権の設定| 8 進数値 | ファイルのアクセス権 | 設定されるアクセス権 | 
|---|---|---|
| 0 | --- | なし | 
| 1 | --x | 実行権のみ | 
| 2 | -w- | 書き込み権のみ | 
| 3 | -wx | 書き込み権と実行権 | 
| 4 | r-- | 読み取り権のみ | 
| 5 | r-x | 読み取り権と実行権 | 
| 6 | rw- | 読み取り権と書き込み権 | 
| 7 | rwx | 読み取り権、書き込み権、実行権 | 
次の表に、記号モードでファイルのアクセス権を設定するための記号の一覧を示します。記号では、アクセス権を設定または変更できる対象ユーザー、実行される操作、あるいは割り当てるまたは変更するアクセス権を指定できます。
表 6–5 記号モードによるファイルのアクセス権の設定| 記号 | 機能 | 説明 | 
|---|---|---|
| u | <対象ユーザー> | ユーザー (所有者) | 
| g | <対象ユーザー> | グループ | 
| o | <対象ユーザー> | その他のユーザー | 
| a | <対象ユーザー> | すべて | 
| = | オペレータ | 割り当て | 
| + | オペレータ | 追加 | 
| - | オペレータ | 削除 | 
| r | アクセス権 (アクセス権ビット) | 読み取り | 
| w | アクセス権 (アクセス権ビット) | 書き込み | 
| x | アクセス権 (アクセス権ビット) | 実行 | 
| l | アクセス権 (アクセス権ビット) | 強制ロック、setgid ビットはオン、グループ実行ビットはオフ | 
| s | アクセス権 (アクセス権ビット) | setuid または setgid ビットはオン | 
| t | アクセス権 (アクセス権ビット) | スティッキービットはオン、その他の実行ビットはオン | 
機能列に <対象ユーザー> <操作> <アクセス権> の順で、ファイルまたはディレクトリのアクセス権を変更する記号を指定します。
アクセス権を変更する対象となるユーザーを指定します。
実行する操作を指定します。
変更するアクセス権を指定します。
絶対モードまたは記号モードで、ファイルに特殊なアクセス権を設定できます。しかし、ディレクトリに setuid アクセス権を設定する場合と、ディレクトリからこのアクセス権を削除する場合は、記号モードを使用する必要があります。絶対モードでは、3 つ 1 組のアクセス権の左端に新しい 8 進数値を追加して、特殊なアクセス権を設定します。次の表に、ファイルに特殊なアクセス権を設定する 8 進数値を示します。
表 6–6 絶対モードによる特殊なファイルアクセス権の設定| 8 進数値 | 特殊なファイルアクセス権 | 
|---|---|
| 1 | スティッキービット | 
| 2 | setgid | 
| 4 | setuid |