tomoyotitle.png

ドメインポリシー構文

file execute

このディレクティブは、指定されたパス名の実行を許可します。

以下の例では /bin/ls の実行を許可しています:

file execute /bin/ls

参照:

file read

このディレクティブは、指定されたパス名を読み込みモードでオープンすることを許可します。

以下の例では /proc/meminfo の参照を許可しています:

file read proc:/meminfo

参照:

file write

このディレクティブは、指定されたパス名を書き込みモードでオープンすることを許可します。

以下の例では /dev/null への書き込みを許可しています:

file write /dev/null

参照:

file append

このディレクティブは、指定されたパス名を追記モードでオープンすることを許可します。

以下の例では /var/log/auth.log への追記を許可しています:

file append /var/log/auth.log

参照:

file getattr

このディレクティブは、指定されたパス名の属性情報を取得することを許可します。

以下の例では /dev/null の属性情報の取得を許可しています:

file getattr /dev/null

参照:

file create

このディレクティブは、指定されたファイルを指定されたパーミッションで作成することを許可します。

以下の例では /var/lock/subsys/crond の作成を許可しています:

file create /var/lock/subsys/crond 0644

参照:

file unlink

このディレクティブは、指定されたパス名を削除することを許可します。

以下の例では /var/lock/subsys/crond の削除を許可しています:

file unlink /var/lock/subsys/crond

参照:

file chown

このディレクティブは、指定されたパス名の所有者を指定されたユーザIDに変更することを許可します。

以下の例では /dev/sda の所有者のユーザIDを 0 に設定することを許可しています:

file chown /dev/sda 0

参照:

file chgrp

このディレクティブは、指定されたパス名のグループを指定されたグループIDに変更することを許可します。

以下の例では /dev/audio のグループのグループIDを 92 に設定することを許可しています:

file chgrp /dev/audio 92

参照:

file chmod

このディレクティブは、指定されたパス名のパーミッションを指定された数値に変更することを許可します。

以下の例では /dev/mem のパーミッションを 0644 に設定することを許可しています:

file chmod /dev/mem 0644

参照:

file mkdir

このディレクティブは、指定されたパス名のディレクトリを指定されたパーミッションで作成することを許可します。

以下の例では /tmp/logwatch.\*/ というパターンに一致するディレクトリの作成を許可しています:

file mkdir /tmp/logwatch.\*/ 0755

参照:

file rmdir

このディレクティブは、指定されたディレクトリを削除することを許可します。

以下の例では /tmp/logwatch.\*/ というパターンに一致するディレクトリの削除を許可しています:

file rmdir /tmp/logwatch.\*/

参照:

file mkfifo

このディレクティブは、指定されたFIFOを指定されたパーミッションで作成することを許可します。

以下の例では /dev/initctl という名前のFIFOの作成を許可しています:

file mkfifo /dev/initctl 0644

参照:

file mksock

このディレクティブは、指定されたソケットを指定されたパーミッションで作成することを許可します。

以下の例では /dev/log という名前のソケットの作成を許可しています:

file mksock /dev/log 0755

参照:

file mkblock

このディレクティブは、指定されたブロックデバイスを指定されたパーミッションおよびメジャー番号/マイナー番号で作成することを許可します。

以下の例では /dev/loop0 というブロックデバイスの作成を許可しています:

file mkblock /dev/loop0 0600 7 0

参照:

file mkchar

このディレクティブは、指定されたキャラクタデバイスを指定されたパーミッションおよびメジャー番号/マイナー番号で作成することを許可します。

以下の例では /dev/console というキャラクタデバイスの作成を許可しています:

file mkchar /dev/console 0755 5 1

参照:

file truncate

このディレクティブは、指定されたパス名を切り詰めたり伸長したりすることを許可します。

以下の例では /etc/mtab を切り詰めることを許可しています:

file truncate /etc/mtab

参照:

file symlink

このディレクティブは、指定されたシンボリックリンクを作成することを許可します。

以下の例では /dev/cdrom というシンボリックリンクの作成を許可しています:

file symlink /dev/cdrom

参照:

file link

このディレクティブは、1番目に指定されたパス名と2番目に指定されたパス名とでハードリンクを作成することを許可します。

以下の例では /etc/mtab~\$ というパターンに一致するパス名と /etc/mtab~ というパス名とでハードリンクを作成することを許可しています:

file link /etc/mtab~\$ /etc/mtab~

参照:

file rename

このディレクティブは、1番目に指定されたパス名から2番目に指定されたパス名にリネームすることを許可します。

以下の例では /etc/mtab.tmp というパス名を /etc/mtab というパス名にリネームすることを許可しています:

file rename /etc/mtab.tmp /etc/mtab

参照:

file ioctl

このディレクティブは、指定されたパス名に対して指定されたコマンド番号の ioctl 要求を行うことを許可します。 ioctl のコマンド番号については、対象となるモジュールの ioctl 機能の説明を参照してください。

以下の例ではソケットに対して、 0x8915 番の ioctl 要求( SIOCGIFADDR 要求)を行うことを許可しています:

file ioctl socket:[\$] 0x8915

以下の例では /dev/null に対して 10000 ~ 20000 番の ioctl 要求を行うことを許可しています:

file ioctl /dev/null 10000-20000

参照:

file mount

このディレクティブは、指定されたデバイス/ファイルシステムタイプ/マウントオプションで指定されたマウントポイントにマウントすることを許可します。

構文は file mount $DEVICE $MOUNTPOINT $FILESYSTEM $OPTIONS です。 $FILESYSTEM がデバイスファイルを必要とする場合、 $DEVICE にはデバイスファイルを指定します。 $OPTIONS は16進数(または8進数/10進数)の整数です。 $FILESYSTEM には以下の値も指定できます:

以下の例では / ディレクトリの再マウントを許可しています:

file mount any / --remount 0x0

以下の例では ext3 ファイルシステムとしてフォーマットされた /dev/hdc を /var/www/ ディレクトリにマウントすることを許可しています:

file mount /dev/hdc /var/www/ ext3 0xF

以下の例では /dev/shm/ ディレクトリに tmpfs ファイルシステムをマウントすることを許可しています:

file mount none /dev/shm/ tmpfs 0xE

参照:

file unmount

このディレクティブは、指定されたパス名をアンマウントすることを許可します。

以下の例では /mnt/cdrom/ ディレクトリをアンマウントすることを許可しています:

file unmount /mnt/cdrom/

参照:

file chroot

このディレクティブは、指定されたパス名を新しい / ディレクトリに設定することを許可します。

以下の例では /var/empty/sshd/ を新しい / ディレクトリに設定することを許可しています:

file chroot /var/empty/sshd/

参照:

file pivot_root

このディレクティブは、1番目に指定されたパス名を新しい / ディレクトリに設定し、古い / ディレクトリを2番目に指定されたパス名へと移動させることを許可します。

この機能は通常、 initrd/initramfs が使用していた / ディレクトリからハードディスクが使用する / ディレクトリへと切り替えるために1回だけ呼ばれます。この機能は通常、 TOMOYO Linux が有効にされるよりも前に呼び出されるため、このディレクティブが必要になることは滅多にありません。

以下の例では /proc/ を新しい / ディレクトリに設定し、古い / ディレクトリを /proc/ccs/ に移動させることを許可しています:

file pivot_root proc:/ proc:/ccs/

参照:

misc env

このディレクティブは、指定された環境変数名を参照することを許可します。多くのプログラムは環境変数により動作が変化します。

以下の例では LD_PRELOAD という環境変数名を参照することを許可しています:

misc env LD_PRELOAD

capability

このディレクティブは、( POSIX ではない)ケイパビリティを使用することを許可します。

構文を以下の表に示します:

構文

意味

capability use_kernel_module

create_module(2), init_module(2) および delete_module(2) の使用を許可

capability use_packet

PACKET ソケットの使用を許可

capability use_route

ROUTE ソケットの使用を許可

capability SYS_KEXEC_LOAD

kexec_load(2) の使用を許可

capability SYS_NICE

nice(2) および setpriority(2) の使用を許可

capability SYS_PTRACE

ptrace(2) の使用を許可

capability SYS_REBOOT

reboot(2) の使用を許可

capability SYS_SETHOSTNAME

sethostname(2) および setdomainname(2) の使用を許可

capability SYS_TIME

stime(2), settimeofday(2) および adjtimex(2) の使用を許可

capability SYS_VHANGUP

vhangup(2) の使用を許可

以下の例では SYS_REBOOT ケイパビリティの使用を許可しています:

capability SYS_REBOOT

ipc signal

このディレクティブは、指定されたドメインに対して指定された番号のシグナルを送信することを許可します。

指定されたドメインとその子孫ドメインに対して許可されます。そのため、 <kernel> ドメインを指定した場合、全てのドメインに対して許可されるようになります。また、 0 番のシグナルは常に許可されます。また、送信元プロセスのドメインと送信先プロセスのドメインが同じ場合も常に許可されます。

以下の例では <kernel> /sbin/init /etc/rc.sysinit /sbin/udevadm およびその子孫ドメインに対して 10 番のシグナルを送信することを許可しています:

ipc signal 10 <kernel> /sbin/init /etc/rc.sysinit /sbin/udevadm

network inet

このディレクティブは、インターネットドメインのネットワークソケットを用いた操作を許可します。

IPv4 および IPv6 アドレスを指定できます。

構文を以下の表に示します:

構文

意味

network inet stream bind $ADDRESS $PORT

TCPソケットを指定されたアドレスおよびポート番号にバインドすることを許可します。

network inet stream listen $ADDRESS $PORT

TCPソケットが指定されたアドレスおよびポート番号で接続要求を待つことを許可します。

network inet stream accept $ADDRESS $PORT

TCPソケットが指定されたアドレスおよびポート番号からの接続要求を受け入れることを許可します。

network inet stream connect $ADDRESS $PORT

TCPソケットが指定されたアドレスおよびポート番号へ接続することを許可します。

network inet dgram bind $ADDRESS $PORT

UDPソケットを指定されたアドレスおよびポート番号にバインドすることを許可します。

network inet dgram recv $ADDRESS $PORT

UDPソケットが指定されたアドレスおよびポート番号からのデータを受信することを許可します。

network inet dgram send $ADDRESS $PORT

UDPソケットが指定されたアドレスおよびポート番号へデータを送信することを許可します。

network inet raw bind $ADDRESS $PROTOCOL

指定されたプロトコル番号のIPソケットを指定されたアドレスにバインドすることを許可します。

network inet raw recv $ADDRESS $PROTOCOL

指定されたプロトコル番号のIPソケットが指定されたアドレスからのデータを受信することを許可します。

network inet raw send $ADDRESS $PROTOCOL

指定されたプロトコル番号のIPソケットが指定されたアドレスへデータを送信することを許可します。

以下の例ではIPアドレス 202.221.179.11 のポート 80 番に対して接続要求を送信することを許可しています:

network inet stream connect 202.221.179.11 80

参照:

network unix

このディレクティブは、UNIXドメインのネットワークソケットを用いた操作を許可します。

構文を以下の表に示します:

構文

意味

network unix stream bind $ADDRESS

STREAM ソケットを指定されたアドレスにバインドすることを許可します。

network unix stream listen $ADDRESS

STREAM ソケットが指定されたアドレスで接続要求を待つことを許可します。

network unix stream accept $ADDRESS

STREAM ソケットが指定されたアドレスからの接続要求を受け入れることを許可します。

network unix stream connect $ADDRESS

STREAM ソケットが指定されたアドレスへ接続することを許可します。

network unix dgram bind $ADDRESS

DATAGRAM ソケットを指定されたアドレスにバインドすることを許可します。

network unix dgram recv $ADDRESS

DATAGRAM ソケットが指定されたアドレスからのデータを受信することを許可します。

network unix dgram send $ADDRESS

DATAGRAM ソケットが指定されたアドレスへデータを送信することを許可します。

network unix seqpacket bind $ADDRESS

SEQPACKET ソケットを指定されたアドレスにバインドすることを許可します。

network unix seqpacket listen $ADDRESS

SEQPACKET ソケットが指定されたアドレスで接続要求を待つことを許可します。

network unix seqpacket accept $ADDRESS

SEQPACKET ソケットが指定されたアドレスからの接続要求を受け入れることを許可します。

network unix seqpacket connect $ADDRESS

SEQPACKET ソケットが指定されたアドレスへ接続することを許可します。

以下の例では /tmp/.X11-unix/X0 および \000/tmp/.X11-unix/X0 へのバインドを許可しています:

network unix stream bind /tmp/.X11-unix/X0
network unix stream bind \000/tmp/.X11-unix/X0

参照:

use_group

このディレクティブは、グループに対して定義されたアクセス許可を参照します。グループに対するアクセス許可は例外ポリシーで定義されています。

以下の例では /dev/null の参照を許可しています:

例外ポリシーでの指定:

acl_group 2 file read /dev/null

ドメインポリシーでの指定:

use_group 2

use_profile

このディレクティブは、ドメインに対して適用されるプロファイル番号を指定します。

以下の例ではドメインに対してプロファイル 3 を割り当てています:

use_profile 3

task auto_execute_handler

このディレクティブは、このディレクティブが割り当てられたドメインからのプログラムの実行要求がこのディレクティブで指定されたプログラムによって処理されるようになります。このドメインでプログラムの実行要求が発生すると、要求されたプログラムの代わりにこのディレクティブで指定されたプログラムが実行されます。そして、このディレクティブで指定されたプログラムが要求されたプログラムを実行すべきかどうかを判断し、実行すべきと判断した場合だけ要求されたプログラムが実行されます。

以下の例では /usr/sbin/check-and-exec というプログラムが要求されたプログラムの代わりに実行されます:

task auto_execute_handler /usr/sbin/check-and-exec

task denied_execute_handler

このディレクティブは、このディレクティブが割り当てられているドメインからのプログラムの実行要求がポリシーによって拒否された場合に、要求されたプログラムの代わりにこのディレクティブで指定されたプログラムが実行されるようになります。このディレクティブは強制モードが割り当てられている状態でポリシーによって拒否された場合のみ機能することに注意してください。ポリシーによって拒否されたとしても、強制モードではない限りプログラムの実行要求は受け入れられます。アクセス制御モードに関わらず別のプログラムを実行させたい場合には、 task auto_execute_handler を(必要であれば keep_domain と組み合わせて)使ってください。

以下の例では、プログラムの実行要求がポリシーによって拒否された場合に /bin/true というプログラムが要求されたプログラムの代わりに実行されます:

task denied_execute_handler /bin/true

task manual_domain_transition

このディレクティブは、アプリケーションがこのディレクティブで指定されたドメイン名を /proc/ccs/self_domain インタフェースに書き込むことにより、そのドメインへと遷移するようになります。これは、プログラムの実行要求を伴わずに権限を分割するために使用することができますが、アプリケーションからドメイン遷移を行うべきタイミングにこのインタフェースへの書き込みを行うようにアプリケーションを修正することが必要になります。

以下の例では、 /proc/ccs/self_domain に対して <kernel> //apache /www.tomoyo00.com というドメイン名を書き込むことにより、そのドメインへと遷移することを示しています:

task manual_domain_transition <kernel> //apache /www.tomoyo00.com

task auto_domain_transition

このディレクティブは、指定された条件に一致した場合にこのディレクティブで指定されたドメイン名に自動的に遷移するようになります。これは、プログラムの実行要求を伴わずに権限を分割するために使用することができます。

以下の例では、プロセスのUIDが0ではなくなった時点で <kernel> //non-root-session ドメインへと自動的に遷移することを示しています:

task auto_domain_transition <kernel> //non-root-session task.uid!=0

quota_exceeded

このディレクティブは、ドメインに対するアクセス許可の数がプロファイルの max_learning_entry で指定された数に達したために、学習モードにおいて自動的に追加できなかったアクセス許可があることを示しています。

transition_failed

このディレクティブは、プログラムの実行要求に対してドメイン遷移を行わないまま処理を継続したことを示しています。

これは、強制モードが割り当てられない限り TOMOYO が原因でアクセス拒否が発生しないようにするために、強制モードではない場合にはドメイン遷移に失敗してもプログラムの実行要求を受け入れるようにしているために発生します。ドメイン遷移が失敗する原因としては、ドメイン名が長すぎたか、ドメインを作成するためのメモリを割り当てられなかったかのどちらかです。この問題を修正するには、ドメイン遷移を抑制するか、 TOMOYO が使ってよいメモリ使用量の上限を増やしてください。