概要
POSIX ACL(アクセスコントロールリスト)は、ファイルシステムオブジェクトに対する従来のパーミッション概念の拡張として使用できます。 ACLを使用すれば、従来のパーミッション概念で許されていた以上のパーミッションを柔軟に定義できます。
POSIX ACLという用語は、このACLが真のPOSIX(Portable Operating System Interface)規格であることを示唆しています。 ドラフト規格のPOSIX 1003.1eとPOSIX 1003.2cは、いくつかの理由で白紙に戻されました。 それにもかかわらず、UNIXファミリに属している多くのシステムに見られるACLは、これらのドラフト規格に基づいており、この章で説明するファイルシステムACLの実装も同様にこの2つの規格に従っています。 これらの規格については、http://wt.xpilot.org/publications/posix.1e/を参照してください。
従来のLinuxファイルパーミッションの基本については、18.2項 「ユーザとアクセス権」を参照してください。 より高度な機能としては、setuid、setgid、およびsticky bitがあります。
特定の状況では、アクセス権の制約が強すぎることがあります。 したがって、Linuxは、特定のアクションが実行できるように、現在のユーザとグループのID(身分とその権限)を一時的に変更できるようにする追加の設定項目を用意しています。 たとえば、passwdプログラムでは、一般に/etc/passwdにアクセスする際にrootユーザのパーミッションが必要です。 このファイルには、ユーザのホームディレクトリ、ユーザとグループのIDなどの重要情報が含まれます。 したがって、このファイルへのアクセスをすべてのユーザに許可することは危険が大きいので、一般ユーザはpasswdを変更できません。 setuidを使用すれば、この問題を解決することができます。setuid (ユーザIDの設定)は、特定のユーザIDでマークされたプログラムの実行をシステムに指示するための特殊なファイル属性です。次のpasswdコマンドを参照してください。
-rwsr-xr-x 1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd
sという文字が表示されていて、ユーザパーミッションでsetuidビットがセットされていることを示しています。 setuidビットによって、passwdコマンドを実行するすべてのユーザは、rootで実行できます。
setuidビットはユーザに適用されます。 ただし、グループにもsetgidビットという同等のプロパティがあります。 この属性がセットされているプログラムは、どのユーザがそのプログラムを起動したかにかかわりなく、そのプログラムと共に保存されているグループIDを使用して動作します。 したがって、setgidビットがオンになっているディレクトリ内では、新しく作成されるすべてのファイルとサブディレクトリは、そのディレクトリが所属しているグループに対して割り当てられます。 次のサンプルディレクトリについて考えてみます。
drwxrws--- 2 tux archive 48 Nov 19 17:12 backup
sという文字が表示されていて、グループパーミッションでsetgidビットがセットされていることを示しています。 ディレクトリの所有者とarchiveグループのメンバは、このディレクトリにアクセスできます。 このグループのメンバでないユーザは、それぞれ適切なグループに「マップ」されます。 すべての書き込みファイルの有効なグループIDは、archiveになります。 たとえば、グループIDarchiveで実行されるバックアッププログラムは、ルート権限なしにこのディレクトリにアクセスできます。
sticky(スティッキー)ビットもあります。 このビットは、実行可能プログラムとディレクトリのどちらに所属しているかにより意味が異なります。このビットがプログラムに所属している場合、このようにマークが付けられたファイルは、使用するたびにハードディスクにアクセスする必要がないようにRAMにロードされます。現在のハードディスクは十分高速なので、この属性はほとんど使用されなくなっています。このビットをディレクトリに割り当てた場合、各ユーザが他のユーザのファイルを削除することが防止されます。 一般的な使用例として、/tmpと/var/tmpの各ディレクトリを挙げることができます。
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp