TOMOYO Linux on AKI-H8/3069F その2
前回、なんとなく /proc/ccs 以下が見えるようになっていました。
で、今回は /sbin/ccs-initを追加して、ポリシーをロードするところまでやろうとしましたが、結構ハマりました。
まず、uClinuxのデフォルトで入っているシェルは、「sash」と言うものですが、こいつがリダイレクトを扱えない…
そのため、/sbin/ccs-init シェルスクリプト内でポリシーをリダイレクトを使って/proc/ccs以下に書き込めない。
しょうがないので、「sash」の代わりに「nwsh」と言うものを使うように変更。
これも、簡単にはコンパイルできず、uClibc/.configを修正(UCLIBC_HAS_GLOB=y を追加)しないといけない。
できた! ということで、ccs-init*1とポリシーファイルを配置して再起動。
... VFS: Mounted root (nfs filesystem) readonly. Freeing unused kernel memory: 52k freed (0x565000 - 0x571000) Calling /sbin/ccs-init to load policy. Please wait.
ここで反応なし。
調べてみると、「nwsh」でシェルスクリプトを実行すると「exec() of failed: Unknown error 2」とかでて、まともに動作しない… orz
しょうがないので、ccs-initをCで書いてバイナリにしてやる!
すると、
... VFS: Mounted root (nfs filesystem) readonly. Freeing unused kernel memory: 52k freed (0x565000 - 0x571000) Calling /sbin/ccs-init to load policy. Please wait. SAKURA: 1.6.7 2009/04/01 TOMOYO: 1.6.7 2009/04/01 Mandatory Access Control activated. Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| Akizukidenshi/AE-3068 (aki3069net) port. For further information check: http://www.uclinux.org/ init: Failed to open /etc/inittab.# # ls -la /proc/ccs/ -rw------- 1 0 0 0 query -rw------- 1 0 0 0 system_policy -rw------- 1 0 0 0 domain_policy -rw------- 1 0 0 0 exception_policy -r-------- 1 0 0 0 self_domain -rw------- 1 0 0 0 .domain_status -rw------- 1 0 0 0 .process_status -rw------- 1 0 0 0 meminfo -rw------- 1 0 0 0 profile -rw------- 1 0 0 0 manager -r-------- 1 0 0 0 .updates_counter -r-------- 1 0 0 0 version -rw-rw-rw- 1 0 0 0 .execute_handler dr-xr-xr-x 22 0 0 0 .. dr-xr-xr-x 2 0 0 0 . # cat /proc/ccs/domain_policy <kernel> use_profile 0 <kernel> /bin/init use_profile 0 <kernel> /bin/init /bin/sh use_profile 0 <kernel> /bin/init /bin/sh /bin/hostname use_profile 0 <kernel> /bin/init /bin/sh /bin/mount use_profile 0 <kernel> /bin/init /bin/sh /bin/cat use_profile 0 <kernel> /bin/init /bin/sh /bin/ls use_profile 0 #
おぉ、ちゃんとドメインができて動いてますねぇ。
それでは今度は学習モードにして動かしてみます(MAC_FOR_FILE と MAC_FOR_NETWORK)。
... VFS: Mounted root (nfs filesystem) readonly. Freeing unused kernel memory: 52k freed (0x565000 - 0x571000) Calling /sbin/ccs-init to load policy. Please wait. SAKURA: 1.6.7 2009/04/01 TOMOYO: 1.6.7 2009/04/01 Mandatory Access Control activated. TOMOYO-WARNING: UDP connect to 192.168.1.7 2049 denied for <kernel> TOMOYO-WARNING: Access 'execute(do_execve) /bin/init' denied for <kernel> TOMOYO-WARNING: UDP connect to 192.168.1.7 2049 denied for /bin/init TOMOYO-WARNING: Access 'read(open) /dev/null' denied for /bin/init TOMOYO-WARNING: Access 'execute(do_execve) /bin/sh' denied for /bin/init TOMOYO-WARNING: UDP connect to 192.168.1.7 2049 denied for /bin/sh TOMOYO-WARNING: Access 'read(open) /etc/rc' denied for /bin/sh TOMOYO-WARNING: Access 'execute(do_execve) /bin/hostname' denied for /bin/sh TOMOYO-WARNING: Access 'execute(do_execve) /bin/mount' denied for /bin/sh TOMOYO-WARNING: UDP connect to 192.168.1.7 2049 denied for /bin/mount TOMOYO-WARNING: Access 'read(open) /etc/fstab' denied for /bin/mount TOMOYO-WARNING: Access 'execute(do_execve) /bin/cat' denied for /bin/sh TOMOYO-WARNING: UDP connect to 192.168.1.7 2049 denied for /bin/cat TOMOYO-WARNING: Access 'read(open) /etc/motd' denied for /bin/cat Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| Akizukidenshi/AE-3068 (aki3069net) port. For further information check: http://www.uclinux.org/ init: Failed to open /etc/inittab.TOMOYO-WARNING: Access 'read/write(open) /dev/console' denied for /bin/init # ls /proc/ccs/ TOMOYO-WARNING: Access 'execute(do_execve) /bin/ls' denied for /bin/sh query exception_policy profile system_policy self_domain manager domain_policy meminfo version # cat /proc/ccs/domain_policy TOMOYO-WARNING: Access 'read(open) /proc/ccs/domain_policy' denied for /bin/cat <kernel> use_profile 1 allow_network UDP connect 192.168.1.7 2049 allow_execute /bin/init <kernel> /bin/init use_profile 1 allow_network UDP connect 192.168.1.7 2049 allow_read /dev/null allow_execute /bin/sh allow_read/write /dev/console <kernel> /bin/init /bin/sh use_profile 1 allow_network UDP connect 192.168.1.7 2049 allow_read /etc/rc allow_execute /bin/hostname allow_execute /bin/mount allow_execute /bin/cat allow_execute /bin/ls <kernel> /bin/init /bin/sh /bin/hostname use_profile 1 <kernel> /bin/init /bin/sh /bin/mount use_profile 1 allow_network UDP connect 192.168.1.7 2049 allow_read /etc/fstab <kernel> /bin/init /bin/sh /bin/cat use_profile 1 allow_network UDP connect 192.168.1.7 2049 allow_read /etc/motd allow_read /proc/ccs/domain_policy <kernel> /bin/init /bin/sh /bin/ls use_profile 1 #
ちゃんと学習モードも動いているようです。
NFS rootで動作しているので、NFSファイルシステムへアクセスする度にUDP connectがあるのがよく分かりますね。
*1:余計なエラー処理を省いてかなり簡略化している