第5回 Referenceポリシーの作成と動作テスト

古田 真己
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
2006/6/17

 FC5におけるポリシーソースのインストール方法

 FC5では、RPMファイルがなくなってしまいポリシーソースが得られません。そこで、今回解説したポリシーモジュールの作成方法で/rootや/srcなどにポリシーのソースを記述したファイルを置いて、全体のソースツリーなしでモジュールとしてコンパイルや追加ができる環境が整えられています。従ってFC4と同じような全体のソースツリーが欲しい場合にはSRPMから抜き出すしか方法がありません。

 また、ソースを取り出すために必要なselinux-policy-XXX.src.rpmに以下のようなクセがあるため、いろいろ面倒な気がしておっくうになってしまい、ただでさえ難しいとされているSELinuxのポリシー設定のハードルがさらに高くなってしまっています。

  • SPECファイルに%buildの項目がない
  • %installのステップでインストール後のファイルを用意して整えるようになっている

 FC5においてポリシーソースをインストールするには、次のような形で行うとよいでしょう。

1.ポリシーのSRPMの取得

 selinux-policy-XXX.src.rpmを取得し、/usr/src/redhat/SOURCEディレクトリに展開します。

[root@localhost ~]# cd /usr/src/redhat/SOURCES
[root@localhost ~]# rpm2cpio selinux-policy-XXX.src.rpm |cpio -ivmd

2.selinux-policy.specファイルの修正

 specファイルにはselinux-develパッケージの作成用に、166行目のような記述があるので、これを利用します。166行目の最後にソースインストール用のターゲット「install-src」を追加します。

(前略)
164 # Install devel
165 make clean

166 make NAME=targeted TYPE=targeted-mcs DISTRO=%{distro} DIRECT_INITRC=y MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT PKGNAME=%{name}-%{version} POLY=%3 install-headers install-docs install-src

167 make NAME=strict TYPE=strict-mcs DISTRO=%{distro} DIRECT_INITRC=y MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT PKGNAME=%{name}-%{version} POLY=%3 install-headers install-docs install-src

168 make NAME=mls TYPE=strict-mls DISTRO=%{distro} DIRECT_INITRC=y MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT PKGNAME=%{name}-%{version} POLY=%3 install-headers install-docs install-src
(後略)
FC5:selinux-policy-2.2.38-1.fc5のselinux-policy.specの例

3.rpmbuildコマンドでビルド・インストール

 /usr/src/redhat/SOURCESディレクトリでrpmbuild -bi selinux-policy.specを実行するとvar/tmp/serefpolicy-buildroot以下にソースが展開されます。

[root@fc5 ~]# vi selinux-policy.spec
[root@fc5 ~]# rpmbuild -bi selinux-policy.spec
[root@fc5 ~]# cd /var/tmp/serefpolicy-buildroot/etc/selinux
[root@fc5 ~]# cp -rpdfv targeted/src /etc/selinux/targeted
[root@fc5 ~]# cp -rpdfv strict/src /etc/selinux/strict
[root@fc5 ~]# cp -rpdfv mls/src /etc/selinux/mls

 新しくなったaudit2allowによる設定方法

 SELinuxの拒否ログから許可するためのポリシーモジュールを作成できるようになりました。ポリシーモジュール作成の実行例を見てみましょう。ただし、セキュリティを考慮せずに、ただ許可するためだけのルールを作成する点は以前のバージョンと同じなので注意して使う必要があります。

[root@fc5 ~]# ausearch -m AVC|audit2allow -M audit_error
Generating type enforcement file: audit_error.te
Compiling policy
checkmodule -M -m -o audit_error.mod audit_error.te
semodule_package -o audit_error.pp -m audit_error.mod

******************** IMPORTANT ***********************

In order to load this newly created policy package into the kernel,
you are required to execute

semodule -i audit_error.pp

[root@fc5 ~]# ls -l audit_error.*
-rw-r--r-- 1 root root 1152 May 20 21:03 audit_error.mod
-rw-r--r-- 1 root root 1168 May 20 21:03 audit_error.pp
-rw-r--r-- 1 root root238 May 20 21:03 audit_error.te

[root@fc5 ~]# semodule -i audit_error.pp
[root@fc5 ~]# semodule -l
audit_error 1.0

 この例の基となったauditのログも掲載しておきます。

[root@fc5 ~]# ausearch -m AVC
----
time->Sat May 20 21:02:51 2006
type=AVC msg=audit(1148126571.190:50): avc:denied{ sendto } forpid=2033 comm="auditd" name="log" scontext=root:staff_r:staff_t:s0-s15:c0.c255 tcontext=system_u:system_r:syslogd_t:s0-s15:c0.c255 tclass=unix_dgram_socket
type=AVC msg=audit(1148126571.190:50): avc:denied{ write } forpid=2033 comm="auditd" name="log" dev=tmpfs ino=4278 scontext=root:staff_r:staff_t:s0-s15:c0.c255 tcontext=system_u:object_r:devlog_t:s0 tclass=sock_file

 また、モジュール生成時に作られたteファイルは以下のとおりです。

module audit_error 1.0;

require {
     class sock_file write;
     class unix_dgram_socket sendto;

     type devlog_t;
     type staff_t;
     type syslogd_t;
};
allow staff_t devlog_t:sock_file write;
allow staff_t syslogd_t:unix_dgram_socket sendto;

3/4

Index
Referenceポリシーの作成と動作テスト
  Page1
ドメイン名を考える
  Page2
実行ファイルのタイプを考える
インターフェイスを考える
モジュールの作成
ログの再確認と修正
Page3
FC5におけるポリシーソースのインストール方法
新しくなったaudit2allowによる設定方法
  Page4
SELinuxのこれからの展開


Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間