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:余計なエラー処理を省いてかなり簡略化している