第4回 ReferenceポリシーをEnforcingモードで動かそう

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

 Fedora Core 5がリリースされました。皆さんはもうインストールしましたか?

 第3回「Referenceポリシーを設定してみよう」では新しく採用されるReferenceポリシーでのモジュールの動作を確認するところまで行いました。今回は、実際にモジュールを使える状態に持っていき、さらに独自のモジュールを作成してみましょう。

 また、2006年3月に米メリーランド州ボルチモアで開催された「SELinux Symposium」の様子についてお伝えします。

 モジュール構造の確認

 Referenceポリシーの大きな特徴は、ポリシー全体をモジュール化したことです。これは後からポリシーを開発する場合の手間の軽減や、ニーズに応じてモジュールの組み込み/取り外しが行えるという運用上の柔軟性をもたらします。

 各ポリシーは起動時にあらかじめ読み込まれるベースモジュール(必要なポリシーがいくつか合わさったもの)と、必要に応じて選択できるアプリケーションごとのポリシーモジュールに分けて作成するようになっています。

図1 モジュールの構成イメージ

 前回は可能な限りすべてのポリシーをポリシーモジュールとして分割したうえで、ベースモジュールの上にuserdomain.ppのみを組み込んだ様子を確認しました。ベースモジュールに含まれたものは、corecommands、mls、teminal、filesystem、domain、kernel、devices、files、selinux、corenetworkの10個のモジュールです。これはデフォルトの/etc/selinux/refpolicy/src/policy/policy/modules.confの記述に従っています。

図2 前回のモジュール構成

 ベースモジュールとポリシーモジュールは、それぞれ「*.te」「*.if」「*.fc」というファイルから構成されます。/etc/selinux/refpolicy/src/policy/policy/modules/の下には、「Admin」「Services」「Apps」「System」「Kernel」というディレクトリがあり、それぞれの関係を図にすると以下のようになります。

図3 モジュールのレイヤ構造
Admin、Services、Appsは各アプリケーション別の設定、SystemとKernelはカーネルやコンソールなど基本的な動作に必要な基礎設定をつかさどる(前回試したuserdomain.ppはSystemレイヤに属する)

 KernelレイヤとSystemレイヤが動作に必要な最小限度のセットとなります。実際に使用可能なシステムを構築するためにはmodules.confを編集し、2つのレイヤに属するポリシーをすべてベースモジュールに含める必要があります。

 前回ベースモジュールに組み込んだ10個のモジュールはいずれもKernelレイヤに属するものでした。実は2006/1/24版のKernelレイヤには合計12個のポリシーがあります。システムをきちんと動作させるためには、Kernelレイヤのモジュールだけでももっと多くのモジュールが必要ですし、さらにSystemレイヤのモジュール(合計24個)も必要になります。

 ベースモジュールの設定を変更する

 SELinuxのポリシーを記述し、有効にするためには、以下のようなステップを踏むのがよいと思います。順に説明します。

 早速動作に必要な設定作業を始めましょう。SELinuxのポリシーは前回から引き続き2006/1/24版のReferenceポリシーを使い、モードをPermissiveにした環境での作業を前提とします。前回設定した「Runlevel3で起動させるサービス」がここで生きてきます。

acpid
0:off
1:off
2:off
3:on
4:on
5:on
6:off
anacron
0:off
1:off
2:on
3:on
4:on
5:on
6:off
auditd
0:off
1:off
2:on
3:on
4:on
5:on
6:off
avahi-daemon
0:off
1:off
2:off
3:on
4:on
5:on
6:off
crond
0:off
1:off
2:on
3:on
4:on
5:on
6:off
cups
0:off
1:off
2:on
3:on
4:on
5:on
6:off
cups-config-daemon
0:off
1:off
2:off
3:on
4:on
5:on
6:off
haldaemon
0:off
1:off
2:off
3:on
4:on
5:on
6:off
httpd
0:off
1:off
2:on
3:on
4:on
5:on
6:off
irqbalance
0:off
1:off
2:on
3:on
4:on
5:on
6:off
messagebus
0:off
1:off
2:off
3:on
4:on
5:on
6:off
network
0:off
1:off
2:on
3:on
4:on
5:on
6:off
ntpd
0:off
1:off
2:off
3:on
4:off
5:on
6:off
postfix
0:off
1:off
2:on
3:on
4:on
5:on
6:off
readahead_early
0:off
1:off
2:on
3:on
4:on
5:on
6:off
sshd
0:off
1:off
2:on
3:on
4:on
5:on
6:off
syslog
0:off
1:off
2:on
3:on
4:on
5:on
6:off
tomcat5
0:off
1:off
2:on
3:on
4:on
5:on
6:off
xfs
0:off
1:off
2:on
3:on
4:on
5:on
6:off
Runlevel3で起動させるサービス

 前述のKernelレイヤ、Systemレイヤに含まれるものに加え、この表にあるもので対応しているサービスはすべてベースモジュールに組み込みます。また、サービス以外の管理用コマンド(rpm、prelink、dmesgなど)も組み込んでおいた方がよいので、Adminレイヤも組み込みます。従って作成されるmodules.confは以下のようになります。

--- modules.conf.old 2006-03-23 19:47:31.000000000 +0900
+++ modules.conf   2006-03-24 03:28:40.000000000 +0900
@@ -119,7 +119,7 @@
 #
 # Network analysis utilities
 #
-netutils = module
+netutils = base

 # Layer: admin
 # Module: firstboot
@@ -142,14 +142,14 @@
 #
 # File system quota management
 #
-quota = module
+quota = base

(中略)

 # Layer: system
 # Module: libraries
 #
 # Policy for system libraries.
 #
-libraries = module
+libraries = base

 # Layer: system
 # Module: fstools
 #
 # Tools for filesystem management, such as mkfs and fsck.
 #
-fstools = module
+fstools = base

 # Layer: system
 # Module: getty
 #
 # Policy for getty.
 #
-getty = module
+getty = base
modules.confの変更例

 これでKernel、System、Adminレイヤの設定の変更とサービスのモジュールの追加は終わりです。moduleからbaseに変更したモジュールは以下のとおりです。

netutils quota logrotate prelink usermanage rpm    
sudo dmidecode kudzu logwatch dmesg updfstab    
acct readahead consoletype su java bootloader    
storage xfs lpd avahi ssh postfix dbus  
irqbalance cups apache inetd cron mta ntp hal
raid iptables authlogin hotplug lvm pcmcia    
miscfiles clock locallogin init hostname selinuxutil    
ipsec udev logging modutils userdomain sysnetwork    
unconfined mount libraries fstools getty      
ベースモジュールに組み込むよう変更したポリシー

1/4

Index
ReferenceポリシーをEnforcingモードで動かそう
Page1
モジュール構造の確認
ベースモジュールの設定を変更する
  Page2
ベースモジュールの設定の作り直し
Enforcingモードでの動作確認
  Page3
追加記述するモジュールの選定
ひな型でみ見る大まかなモジュールの記述方法
  Page4
SELinux Symposium 2006
SELinuxの今後の方向性


Security&Trust記事一覧


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間