OpenBlockS266でSELinux その2

以前挑戦してあまりうまく行かなかったSELinux on OpenBlockS266 with Buildrootですが、原因は構築時にlibselinuxやlibsepolのライブラリの配置に失敗していたためでした。
で、BusyBoxSELinuxアプレットを組み込んだのにもかかわらず、lddでBusyBoxが参照する共有ライブラリを見てみると、

# ldd /bin/busybox 
/bin/busybox: is setuid
	libc.so.0 => /lib/libc.so.0 (0x30016000)
	ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x30000000)
# 

というように、libselinux.soなどを参照していなかったので、まともに動作していませんでした。
たとえばgetenforceを実行すると、

# getenforce
getenforce: getenforce() failed
# 

と、libselinuxに含まれる関数の呼び出しに失敗しています。


Buildrootでlibselinux、libsepolの構築手順を見直して修正し、構築し直すと、

# ldd /bin/busybox 
/bin/busybox: is setuid
	libselinux.so.1 => /lib/libselinux.so.1 (0x30016000)
	libc.so.0 => /lib/libc.so.0 (0x3004a000)
	libdl.so.0 => /lib/libdl.so.0 (0x300a8000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x300bb000)
	ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x30000000)
# getenforce 
Disabled
# 

と、libselinux.soが含まれ、getenforceも無事に動作しています(まだポリシーを読み込んでいないので"Disabled")。

つづいて、ポリシーの読み込みとか。

前と同じように、id:himainuさんの記事を参考に続けていきました。
あ、ちなみに主なプログラムのバージョンは以下の通りです。

  • Linux kernel: 2.6.24.7
  • SEEdit: 2.2.0.1
  • libselinux: 2.0.71
  • libsepol: 2.0.32
  • BusyBox: 1.13.3


SEEditの構築は、記事のまんま。

そしてポリシーのロード。

# load_policy 
security:  class memprotect not defined in policy
SELinux: policy loaded with handle_unknown=deny
audit(25.660:2): policy loaded auid=4294967295
# 

いろいろとメッセージが出たけど大丈夫か?

で、次にタイプを付与。

# restorecon -R /
/etc/selinux/seedit/contexts/files/file_contexts:  line 30 is missing fields, skipping
/etc/selinux/seedit/contexts/files/file_contexts:  line 31 is missing fields, skipping
/etc/selinux/seedit/contexts/files/file_contexts:  line 32 is missing fields, skipping
/etc/selinux/seedit/contexts/files/file_contexts:  line 33 is missing fields, skipping
/etc/selinux/seedit/contexts/files/file_contexts:  line 34 is missing fields, skipping
/etc/selinux/seedit/contexts/files/file_contexts:  line 35 is missing fields, skipping
....

う〜ん、スキップされまくってる。
で、lsでタイプを確認してみると、

# ls -laZ /
drwxr-xr-x   17 system_u:object_r:xattrfs_t           1024 Jan  1 09:00 .
drwxr-xr-x   17 system_u:object_r:xattrfs_t           1024 Jan  1 09:00 ..
drwxr-xr-x    2 system_u:object_r:xattrfs_t           1024 Mar 24  2009 bin
drwxr-xr-x    5 system_u:object_r:xattrfs_t           2048 Mar 24  2009 dev
drwxr-xr-x    7 system_u:object_r:xattrfs_t           1024 Jan  1 09:00 etc
drwxr-xr-x    3 system_u:object_r:xattrfs_t           1024 Mar 24  2009 home
drwxr-xr-x    3 system_u:object_r:xattrfs_t           1024 Mar 24  2009 lib
drwxr-xr-x    2 system_u:object_r:xattrfs_t           1024 Mar 24  2009 mnt
drwxr-xr-x    2 system_u:object_r:xattrfs_t           1024 Mar 24  2009 opt
dr-xr-xr-x   28 system_u:object_r:proc_t                 0 Jan  1 09:00 proc
drwxr-xr-x    2 system_u:object_r:xattrfs_t           1024 Mar 24  2009 root
drwxr-xr-x    2 system_u:object_r:xattrfs_t           1024 Mar 24  2009 sbin
drwxr-xr-x    6 system_u:object_r:security_t             0 Jan  1 09:00 selinux
drwxr-xr-x   10 system_u:object_r:sysfs_t                0 Jan  1 09:00 sys
drwxrwxrwt    2 system_u:object_r:tmpfs_t              160 Jan  1 09:00 tmp
drwxr-xr-x    6 system_u:object_r:xattrfs_t           1024 Mar 24  2009 usr
drwxr-xr-x    4 system_u:object_r:xattrfs_t           1024 Mar 24  2009 var
# 

マウントしているproc、selinux、sys、tmp以外はすべてsystem_u:object_r:xattrfs_tで、目的のタイプに設定されていない…


今日は眠いのでここまで。