Blog TOPページ B[d]C TOPページ B[d]C Blog TOPページ Profile(準備中)

SELinux policy記述概要など1

| コメント(0)

整理でもしておこう。
どうしても、後回し後回し・・・になってしまうからなぁ。
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 };
こんな感じか。アウトラインが見えたので、第二弾に少し譲りましょう。
ああ。コマンドだけだと楽なんだけどね。少し閑話休題。

コメントする

他サイト検索

カスタム検索

このブログ記事について

このページは、sickが2009年5月 6日 00:02に書いたブログ記事です。

ひとつ前のブログ記事は「Line6 Variax600と、Pod X3 Live連携」です。

次のブログ記事は「SELinux policy記述概要など2」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。