整理でもしておこう。
どうしても、後回し後回し・・・になってしまうからなぁ。
RHEL5.1 上で今回は学習。
インストールしたパッケージは以下。
■. selinux-policy-2.4.6-104.el5.src.rpm
apolの挙動を追っかけるとともに、policy.confを見てみたかったので・・・。入れてみました。
■.setool-gui, setool
こちらは、学習用に入れてみました。
■.selinux-policy-devel
お題目上、これを入れておかないわけには行かないでしょう。
まずは、RHEL5.x上でのTypeEnforceファイルの作成=>ポリシーモジュールのロードの概要を追ってみようかと。
0.前準備
0-1 作業ディレクトリ作成
※selinux-policy-develパッケージが入っている必要がある。本パッケージ導入により、/usr/share/selinux以下にdevelディレクトリが生成される。今回は、rootのホームディレクトリ(/root)以下で作業を行うこととする。
~]# cd /usr/share/selinux/devel/
devel]# ls
Makefile apache_extra.pp example.if include tmp
apache_extra.fc apache_extra.te example.pp policygentool
apache_extra.if example.fc example.te policyhelp
devel]# mkdir /root/mypolicy
devel]# cp Makefile /root/mypolicy/
devel]# cd /root/mypolicy/
mypolicy]#
0-2.sample(というか、現状のパッケージによるポリシー本体の記述)確認用に、selinux-policy-2.4.6-104.el5.src.rpmと、rpm-buildパッケージを入れる。
んで、BUILDしてみよう。
※これ自体は、モジュール作成を行うにあたっては不要だが、分からなくなったときのサンプルが多量にあることを期待して・・・(基本、前例が欲しいタイプ)。
~]# cd /usr/src/SPEC/
SPECS]# rpmbuild -bp selinux-policy.spec
SPECS]# ls ../BUILD/
serefpolicy-2.4.6
SPECS]# cd ../BUILD/serefpolicy-2.4.6/
serefpolicy-2.4.6]# ls
COPYING Makefile Rules.monolithic config policy tmp
Changelog README VERSION doc policy.conf
INSTALL Rules.modular build.conf man support
※上記は、policy.confをmakeした後のディレクトリツリー。直後であれば、tmpディレクトリやpolicy.confファイルは存在していないです。念のため。
1. policy モジュールfile 概要
ここで、まず基本的なモジュールファイルの中身を確認してみる。
====
serefpolicy-2.4.6]# cd policy/modules/services
services]# ls
(出力略)
dante.te ktalk.fc portslave.fc sendmail.if xserver.te
dbskk.fc ktalk.if portslave.if sendmail.te zebra.fc
dbskk.if ktalk.te portslave.te setroubleshoot.fc zebra.if
dbskk.te ldap.fc postfix.fc setroubleshoot.if zebra.te
dbus.fc ldap.if postfix.if setroubleshoot.te
====
このディレクトリには、各サービス毎に以下のようなファイルが配置されている。
hoge.if --インターフェースファイル
hoge.fc ---ファイルコンテキストファイル
hoge.te ---TypeEnforceファイル(allowルールを具体的に定義するもの)
このうち、.fcファイルについては別途用途を探ってみたので機会があれば。
今回は、teファイルの中を覗いてみよう。何が・・・シンプルかな。あまりタイプが多く無い方がシンプルだろうか??ともかく短いファイルを・・・探してみる。
===
services]# ls -lS *.te
(略)
-rw-r--r-- 1 root root 834 11月 30 2006 publicfile.te
===
ほほう。親しみの持てるサイズ。少し中身を覗いてみる。
===
services]# grep -v ^# publicfile.te | grep -v ^$
policy_module(publicfile,1.0.0) // (1) モジュール名とバージョンの定義
type publicfile_t; // ---<2 定義> ここから
type publicfile_exec_t;
init_system_domain(publicfile_t,publicfile_exec_t)
role system_r types publicfile_t;
type publicfile_content_t;
files_type(publicfile_content_t)// ---<2 定義> ここまで
// <(3)ルール作成本体>ここから
allow publicfile_t self:capability { dac_override setgid setuid sys_chroot };
allow publicfile_t publicfile_content_t:dir r_dir_perms;
allow publicfile_t publicfile_content_t:file r_file_perms;
files_search_var(publicfile_t)
libs_use_ld_so(publicfile_t)
libs_use_shared_libs(publicfile_t)
// <(3)ルール作成本体>ここまで
// <(4)オプショナルルール>
optional_policy(`
daemontools_ipc_domain(publicfile_t)
')
optional_policy(`
ucspitcp_service_domain(publicfile_t, publicfile_exec_t)
')
==
このうち、optional_policyについてはもう少し後ほど整理してみよう。audit2allow の-Rオプションで生成される出力・・・に似てる・・・ように見えるが、1から書いたことが無いので追うのはまた別途として・・・。
更に、audit2allowコマンド(audit2allow -i <SELinuxの出力したエラーメッセージ>.txt -m hogeによる出力など)から予想したポリシーファイルの書き方はこんな感じ?
---------
policy_module(<モジュール名>,<version>) (1)お約束。バージョンアップ時はバージョンを上げましょう。
##(2)require
require {
type <既存のタイプ名>;
attribute <属性名>[,<属性名>];
// タイプ定義や、ルールの中でしようされるタイプ・属性をrequire で呼び出す。
}
##(3)定義
type hogehoge_t[,<属性>];
##(4)ルール定義(何は何に**出来る・・・のallow行が中心)
allow fuga_t hoge_t:file { read,write };
こんな感じか。アウトラインが見えたので、第二弾に少し譲りましょう。
ああ。コマンドだけだと楽なんだけどね。少し閑話休題。

コメントする