この節では、ファイルのセキュリティを構成する機能について説明します。
各ファイルには、セキュリティのレベルを指定する 3 つのユーザークラスがあります。
ユーザー – ファイルまたはディレクトリの所有者。通常はファイルを作成したユーザー。ファイルの所有者は、ファイルの読み取り権、書き込み権 (変更する権利)、または実行権 (コマンドの場合) を与えるユーザーを決定できる
グループ – グループのメンバー
その他 –ファイルまたはグループの所有者以外のすべてのユーザー
ファイルのアクセス権を割り当てたり変更したりできるのは、そのファイルの所有者かスーパーユーザーだけです。
次の表に、各ユーザークラスに与えることができるファイルのアクセス権を示します。
表 16–1 ファイルのアクセス権
記号 |
アクセス権 |
説明 |
---|---|---|
r |
読み取り |
ファイルの内容を開いて読み込むことができる |
w |
書き込み |
ファイルに対して書き込み (内容の変更)、追加、または削除を行うことができる |
x |
実行 |
ファイル (プログラムまたはシェルスクリプトの場合) を実行できる。または、exec(2) システムコールのいずれかを使用してプログラムを実行できる |
- |
拒否 |
ファイルの読み込み、書き込み、または実行を行うことができない |
これらのファイルアクセス権は、通常のファイルと同様にデバイス、ソケット、名前付きパイプ (FIFO) などの特殊ファイルにも適用できます。
シンボリックリンクには、そのリンクが指すファイルのアクセス権が適用されます。
次の表に、各ユーザークラスに与えることができるディレクトリのアクセス権を示します。
表 16–2 ディレクトリのアクセス権
記号 |
アクセス権 |
説明 |
---|---|---|
r |
読み取り |
ディレクトリ内のファイルを一覧表示できる |
w |
書き込み |
ディレクトリに対してファイルまたはリンクの追加または削除を行うことができる |
x |
実行 |
ディレクトリ内のファイルを開いたり、実行したりできる。また、ディレクトリを作成し、その下にサブディレクトリを作成できる |
ディレクトリとそのサブディレクトリ内のファイルを保護するには、ファイルのアクセス権を制限して、そのディレクトリに対するアクセスを拒否します。ただし、スーパーユーザーはシステム上のすべてのファイルとディレクトリにアクセスできます。
実行可能ファイルと公共ディレクトリには、3 種類の特殊なアクセス権を設定できます。これらのアクセス権を設定すると、その実行可能ファイルを実行するユーザーは、そのファイルの所有者 (またはグループ) のユーザー ID を持つことができます。
特殊なアクセス権はセキュリティ上の問題を引き起こすため、設定するときは十分な注意が必要です。たとえば、スーパーユーザー権限を取得するには、ユーザー ID (UID) を root に設定してプログラムを実行します。また、すべてのユーザーは、所有するファイルに対して特殊なアクセス権を設定できるため、これもセキュリティ上の問題の原因となります。
setuid や setgid アクセス権を使用して、不正にスーパーユーザー権限が取得されていないかどうかシステムを監視する必要があります。これらのアクセス権を使用しているファイルをすべて検索して表示する方法については、setuid アクセス権が設定されているファイルを検索する方法 を参照してください。このようなプログラムの所有権が、root や bin ではなく、一般ユーザーになっているものが疑わしいと考えられます。
ユーザー ID 設定 (setuid) のアクセス権を実行可能ファイルに設定すると、このファイルを実行するプロセスには、その実行可能ファイルを実行しているユーザーではなく、ファイルの所有者 (通常は root) に基づいてアクセス権が与えられます。この特殊なアクセス権を使用すると、通常は所有者しか利用できないファイルやディレクトリにアクセスできます。たとえば次に示すように、passwd コマンドは root の setuid アクセス権が設定されているので、ユーザーは root ID の権限でパスワードを変更できます。
-r-sr-sr-x 3 root sys 104580 Sep 16 12:02 /usr/bin/passwd |
この特殊なアクセス権は、プロセスの実行が終了したあとでも、高度な知識のあるユーザーは setuid プロセスによって与えられたアクセス権を維持する手段を見つけることができるため、セキュリティ上の危険が存在します。
プログラムから予約済み UID (0 – 99) で setuid アクセス権を使用しても、実効 UID は正しく設定されない場合があります。シェルスクリプトを代わりに使用するか、setuid アクセス権では予約済み UID を使用しないようにしてください。
グループ ID 設定 (setgid) のアクセス権は setuid に似ていますが、プロセスの実効グループ ID (GID) はファイルのグループ所有者に変更され、ユーザーにはそのグループに与えられたアクセス権に基づくアクセス権が与えられます。/usr/bin/mail コマンドには次のように setgid アクセス権が設定されています。
-r-x--s--x 1 root mail 63628 Sep 16 12:01 /usr/bin/mail |
setgid アクセス権がディレクトリに適用されると、このディレクトリ内で作成されたファイルは、生成するプロセスが所属するグループではなく、ディレクトリが所属するグループに含まれることになります。ディレクトリに対する書き込み権および実行権を持つユーザーは、そのディレクトリにファイルを作成できます。ただし、作成したファイルの所有権は、ユーザーのグループではなく、ディレクトリを所有するグループに割り当てられます。
setuid や setgid アクセス権を使用して、不正にスーパーユーザー権限が取得されていないかどうかシステムを監視する必要があります。これらのアクセス権を使用しているファイルをすべて検索して表示する方法については、setuid アクセス権が設定されているファイルを検索する方法 を参照してください。このようなプログラムのグループ所有権が、root や bin ではなく、一般ユーザーになっているものが疑わしいと考えられます。
「スティッキビット」は、ディレクトリ内のファイルを保護するアクセス権ビットです。ディレクトリにスティッキビットが設定されている場合、そのファイルを削除できるのはその所有者、ディレクトリの所有者、またはスーパーユーザーだけです。この特殊なアクセス権により、ユーザーは /tmp などの公共ディレクトリから他のユーザーのファイルを削除できなくなります。
drwxrwxrwt 7 root sys 400 Sep 3 13:37 tmp |
TMPFS ファイルシステム上で公共ディレクトリを設定するときには、スティッキビットを手動で設定してください。
ファイルやディレクトリを作成するときには、デフォルトのアクセス権が設定されます。デフォルトのアクセス権は、/etc/profile ファイル、またはユーザーの .cshrc、 .login ファイル内の umask 設定によって決定されます。デフォルトでは、システムはテキストファイルのアクセス権を 666 に設定してユーザー、グループ、その他のユーザーに読み取り権と書き込み権を与え、ディレクトリまたは実行可能ファイルに対しては 777 を設定します。
umask コマンドによって割り当てられる値は、デフォルトから差し引かれます。この処理には、chmod コマンドでアクセス権を与えるのと同じ方法でアクセス権を拒否する効果があります。たとえば、chmod 022 コマンドはグループとその他のユーザーに書き込み権を与えますが、umask 022 コマンドはグループとその他のユーザーの書き込み権を拒否します。
次の表に、典型的な umask の設定とその設定が実行可能ファイルに与える影響を示します。
表 16–3 各セキュリティレベルの umask 設定
セキュリティレベル |
umask 設定 |
許可されないアクセス権 |
---|---|---|
緩やか (744) |
022 |
グループとその他のユーザーによる w |
中程度 (740) |
027 |
グループによる w、その他のユーザーによる rwx |
中程度 (741) |
026 |
グループによる w、その他のユーザーによる rw |
厳しい (700) |
077 |
グループとその他のユーザーによる rwx |
umask 値の設定の詳細については、umask(1) のマニュアルページを参照してください。