第5章 Linuxのアクセス制御リスト

目次

5.1. 従来のファイルパーミッション
5.2. ACLの利点
5.3. 定義
5.4. ACLの処理
5.5. アプリケーションでのACLサポート
5.6. 関連資料

概要

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/を参照してください。


5.1 従来のファイルパーミッション

従来のLinuxファイルパーミッションの基礎は、3.2項 「ユーザとアクセス権」 (↑起動)で説明されています。より高度な機能には、setuid、setgidおよびstickyビットがあります。

5.1.1 setuidビット

特定の状況では、アクセス権の制約が強すぎることがあります。したがって、Linuxは、特定のアクションが実行できるように、現在のユーザとグループのID(身分とその権限)を一時的に変更できるようにする追加の設定項目を用意しています。たとえば、passwdプログラムでは、一般に/etc/passwdにアクセスする際にrootユーザのパーミッションが必要です。このファイルには、ユーザのホームディレクトリ、ユーザとグループのIDなどの重要情報が含まれます。したがって、このファイルへのアクセスをすべてのユーザに許可することは危険が大きいので、一般ユーザはpasswdを変更できません。この問題に対する考えられる解決方法は、setuidメカニズムです。setuid (set user ID)は、特別なファイル属性であり、マークされたプログラムを特定のユーザIDで実行するようシステムに指示します。 passwdコマンドについて考えてみます。

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

sという文字が表示されていて、ユーザパーミッションでsetuidビットがセットされていることを示しています。setuidビットによって、passwdコマンドを実行するすべてのユーザは、rootで実行できます。

5.1.2 setgidビット

setuidビットはユーザに適用されます。ただし、グループにも同等のプロパティがあります。setgidビットです。この属性がセットされているプログラムは、どのユーザがそのプログラムを起動したかにかかわりなく、そのプログラムと共に保存されているグループIDを使用して動作します。したがって、setgidビットがオンになっているディレクトリ内では、新しく作成されるすべてのファイルとサブディレクトリは、そのディレクトリが所属しているグループに対して割り当てられます。次のサンプルディレクトリについて考えてみます。

drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

sという文字が表示されていて、グループパーミッションでsetgidビットがセットされていることを示しています。ディレクトリの所有者とarchiveグループのメンバは、このディレクトリにアクセスできます。このグループのメンバーでないユーザーは、適切なグループに「マップ」されます。書き込まれたすべてのファイルの有効なグループIDはarchiveです。たとえば、グループIDarchiveで実行されるバックアッププログラムは、ルート権限なしにこのディレクトリにアクセスできます。

5.1.3 sticky(スティッキー)ビット

sticky(スティッキー)ビットもあります。このビットは、実行可能プログラムとディレクトリのどちらに所属しているかにより意味が異なります。このビットがプログラムに所属している場合、このようにマークが付けられたファイルは、使用するたびにハードディスクにアクセスする必要がないようにRAMにロードされます。現在のハードディスクは十分高速なので、この属性はほとんど使用されなくなっています。このビットをディレクトリに割り当てた場合、各ユーザが他のユーザのファイルを削除することが防止されます。一般的な使用例として、/tmp/var/tmpの各ディレクトリを挙げることができます。

drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp