Chapter 11: アクセス許可のグループ化
11.1. acl_group と use_group
例外ポリシーの acl_group ディレクティブとドメインポリシーの use_group ディレクティブはポリシーの管理を強力かつ容易に行う方法を提供します。
/usr/lib/tomoyo/init_policy
を実行することにより作成されたデフォルトの例外ポリシーには以下のようなエントリが含まれています:
initialize_domain /sbin/modprobe from any initialize_domain /sbin/hotplug from any initialize_domain /sbin/init from any initialize_domain /sbin/udevd from any initialize_domain /usr/bin/dbus-daemon from any initialize_domain /usr/sbin/crond from any initialize_domain /usr/sbin/gpm from any initialize_domain /usr/sbin/logrotate from any initialize_domain /usr/sbin/sshd from any path_group ANY_PATHNAME / path_group ANY_PATHNAME /\* path_group ANY_PATHNAME /\{\*\}/ path_group ANY_PATHNAME /\{\*\}/\* path_group ANY_PATHNAME \*:/ path_group ANY_PATHNAME \*:/\* path_group ANY_PATHNAME \*:/\{\*\}/ path_group ANY_PATHNAME \*:/\{\*\}/\* path_group ANY_PATHNAME \*:[\$] path_group ANY_DIRECTORY / path_group ANY_DIRECTORY /\{\*\}/ path_group ANY_DIRECTORY \*:/ path_group ANY_DIRECTORY \*:/\{\*\}/ number_group COMMON_IOCTL_CMDS 0x5401 acl_group 0 file read /etc/ld.so.cache acl_group 0 file read proc:/meminfo acl_group 0 file read proc:/sys/kernel/version acl_group 0 file read /etc/localtime acl_group 0 file read /usr/share/locale/locale.alias acl_group 0 file read proc:/self/\* acl_group 0 file read proc:/self/\{\*\}/\* acl_group 0 file read /lib/lib\*.so\* acl_group 0 file read /usr/lib/lib\*.so\* acl_group 0 file read /lib64/lib\*.so\* acl_group 0 file read /lib/ld-2.\*.so acl_group 0 file ioctl @ANY_PATHNAME @COMMON_IOCTL_CMDS acl_group 0 file read @ANY_DIRECTORY acl_group 0 file getattr @ANY_PATHNAME
acl_group ディレクティブを用いてグループ 0 に対して以下のアクセス許可が定義されています:
- ほとんどの共有ライブラリを参照する許可
- 自プロセスに関する情報を参照する許可
- 一般的な ioctl 要求を行う許可
- 任意のディレクトリを参照する許可
- 任意のファイルおよびディレクトリの属性を取得する許可
グループ 0 に対して定義されているアクセス許可は use_group 0 という指定が行われている全てのドメインに対して適用されます。デフォルトのグループ番号は 0 であるため、デフォルトで全てのドメインに対して適用されます。上記の設定はデフォルトで許可しても問題がないと考えられているものですが、より厳密に制御したい場合には削除してください。
11.2. アクセス許可の分割
個々の acl_group 行は、グループ番号によってグループ化されます。グループ番号を用いることで、アクセス許可が与えられるドメインの範囲を制御することができます。グループ番号を用いることで、共通するアクセス許可をグループ化することができ、ドメインポリシーを単純化することができます。例えば、例外ポリシーで以下のようなグループを定義することができます:
acl_group 0 file read /etc/passwd acl_group 0 file read /home/\{\*\-.\*}/\* acl_group 0 file write /dev/null acl_group 1 file read /etc/passwd acl_group 1 file read /etc/shadow acl_group 1 file create /etc/shadow.\$ 0600 acl_group 1 file write /etc/shadow.\$ acl_group 1 file rename /etc/shadow.\$ /etc/shadow acl_group 2 file read /usr/lib/xulrunner-1.9.2/libmozjs.so acl_group 2 file read /usr/lib/xulrunner-1.9.2/libxpcom.so acl_group 2 file read /usr/lib/xulrunner-1.9.2/libxul.so
use_group ディレクティブはドメインポリシーの中で使用します。以下のエントリがあるドメインを考えます:
use_group 2
このドメインは、 xulrunner パッケージの共有ライブラリファイルを参照することができます。 use_group ディレクティブは全てのドメインに1個ずつ存在しており、それぞれのドメインはグループ番号で参照されるアクセス許可を利用することができます。
特定のドメインに対して、ディレクトリの参照を許可したくない場合には、 acl_group 0 からそのアクセス許可を削除するか、あるいはそのアクセス許可を含まない別の acl_group を定義するようにします。なお、 acl_group 0 から削除した場合、 use_domain 0 が指定されているドメインの内、ディレクトリの参照を許可する必要がある全てのドメインに対してそのアクセス許可を追加していく必要が生じますので注意してください。