tomoyotitle.png

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 に対して以下のアクセス許可が定義されています:

グループ 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 が指定されているドメインの内、ディレクトリの参照を許可する必要がある全てのドメインに対してそのアクセス許可を追加していく必要が生じますので注意してください。