ドメインポリシー構文
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 機能の説明を参照してください。
以下の例ではファミリーが2、タイプが2、プロトコルが17のソケット(UDP/IPv4ソケット)に対して、 0x8915 番の ioctl 要求( SIOCGIFADDR 要求)を行うことを許可しています:
file ioctl socket:[family=2:type=2:protocol=17] 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 には以下の値も指定できます:
- --bind
- --move
- --remount
- --make-unbindable
- --make-private
- --make-slave
- --make-shared
以下の例では / ディレクトリの再マウントを許可しています:
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 が有効にされるよりも前に呼び出されるため、このディレクティブが必要になることは滅多にありません。
以下の例では /sys/kernel/security/ を新しい / ディレクトリに設定し、古い / ディレクトリを /sys/kernel/security/tomoyo/ に移動させることを許可しています:
file pivot_root securityfs:/ securityfs:/tomoyo/
参照:
misc env
このディレクティブは、指定された環境変数名を参照することを許可します。多くのプログラムは環境変数により動作が変化します。
以下の例では LD_PRELOAD という環境変数名を参照することを許可しています:
misc env LD_PRELOAD
network inet
このディレクティブは、インターネットドメインのネットワークソケットを用いた操作を許可します。
IPv4 および IPv6 アドレスを指定できます。
構文を以下の表に示します:
構文 |
意味 |
---|---|
network inet stream bind $ADDRESS $PORT |
TCPソケットを指定されたアドレスおよびポート番号にバインドすることを許可します。 |
network inet stream listen $ADDRESS $PORT |
TCPソケットが指定されたアドレスおよびポート番号で接続要求を待つことを許可します。 |
network inet stream connect $ADDRESS $PORT |
TCPソケットが指定されたアドレスおよびポート番号へ接続することを許可します。 |
network inet dgram bind $ADDRESS $PORT |
UDPソケットを指定されたアドレスおよびポート番号にバインドすることを許可します。 |
network inet dgram send $ADDRESS $PORT |
UDPソケットが指定されたアドレスおよびポート番号へデータを送信することを許可します。 |
network inet raw bind $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 connect $ADDRESS |
STREAM ソケットが指定されたアドレスへ接続することを許可します。 |
network unix dgram bind $ADDRESS |
DATAGRAM ソケットを指定されたアドレスにバインドすることを許可します。 |
network unix dgram send $ADDRESS |
DATAGRAM ソケットが指定されたアドレスへデータを送信することを許可します。 |
network unix seqpacket bind $ADDRESS |
SEQPACKET ソケットを指定されたアドレスにバインドすることを許可します。 |
network unix seqpacket listen $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 manual_domain_transition
このディレクティブは、アプリケーションがこのディレクティブで指定されたドメイン名を /sys/kernel/security/tomoyo/self_domain インタフェースに書き込むことにより、そのドメインへと遷移するようになります。これは、プログラムの実行要求を伴わずに権限を分割するために使用することができますが、アプリケーションからドメイン遷移を行うべきタイミングにこのインタフェースへの書き込みを行うようにアプリケーションを修正することが必要になります。
以下の例では、 /sys/kernel/security/tomoyo/self_domain に対して <kernel> //apache /www.tomoyo00.com というドメイン名を書き込むことにより、そのドメインへと遷移することを示しています:
task manual_domain_transition <kernel> //apache /www.tomoyo00.com
quota_exceeded
このディレクティブは、ドメインに対するアクセス許可の数がプロファイルの max_learning_entry で指定された数に達したために、学習モードにおいて自動的に追加できなかったアクセス許可があることを示しています。
transition_failed
このディレクティブは、プログラムの実行要求に対してドメイン遷移を行わないまま処理を継続したことを示しています。
これは、強制モードが割り当てられない限り TOMOYO が原因でアクセス拒否が発生しないようにするために、強制モードではない場合にはドメイン遷移に失敗してもプログラムの実行要求を受け入れるようにしているために発生します。ドメイン遷移が失敗する原因としては、ドメイン名が長すぎたか、ドメインを作成するためのメモリを割り当てられなかったかのどちらかです。この問題を修正するには、ドメイン遷移を抑制するか、 TOMOYO が使ってよいメモリ使用量の上限を増やしてください。