第3回 Referenceポリシーを設定してみよう

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

 2006/1/24版Referenceポリシーの設定手順

 作業内容は基本的に第2回で解説した内容と同じですが、細かいところを補足します。以下に必要なコマンドをそのままの形で記します。

1.Source ForgeのCVSからソースを取得

# cd /usr/local/src
# cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy login
# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy co -P refpolicy

2.ソースのインストール

# cd refpolicy
# make install-src

3.ポリシーの設定

# cd /etc/selinux/refpolicy/src/policy/
# vi build.conf【注1】

【注1】
2006/1/24版ではポリシーの設定項目が「/etc/selinux/refpolicy/src/policy/Makefile」から「/etc/selinux/refpolicy/src/policy/build.conf」に移されています。この設定内容にはRedhat、Suse、Gentooなどのディストリビューションの種別、/etc/init.dにあるスクリプトからのサービス起動を許可するかどうか、モジュールをモノリシックにするかモジュール化するかなどが含まれています。

今回設定を変更する内容は以下のとおりです。

行数 変更・修正内容
6
「TYPE=targeted」に変更する
32
「DISTRO=redhat」に設定する
39
「DIRECT_INITRD=y」に変更する
43
「MONOLITHIC=n」に変更する

なお43行目を「MONOLITHIC=n」に変更すると、CVS版のReferenceポリシーでは「/etc/selinux/refpolicy/src/policy/policy/modules.conf」でほとんどのアプリケーション用ポリシーが「= module」と記載されているため、多数のモジュール化が行われますが、取りあえずこれで作成してみてください。

4.ポリシーの初期化

# make conf
# make

5.ポリシーモジュールの作成

# make modules

6.再起動時の設定

# touch /.autorelabel
# vi /etc/selinux/conf【注2】

【注2】
Fedora Coreではルートディレクトリ(/)に.autorelabelという空のファイルを作成しておくと起動時にファイルシステムに対してのセキュリティコンテキストのリラベルを実行します。また、リファレンスポリシーに変更した直後のシステムではEnforcingでは起動できないので、/etc/selinux/configファイルを修正して「SELINUXTYPE=refpolicy」とするついでに「SELINUX=permissive」に変更しておくのを忘れないでください。

7.再起動

# reboot

 再起動後のテスト

 上記の手順を実行した結果、無事に再起動し、コマンドプロンプトまでこぎ着けることができたでしょうか。ここまでくれば、あとはReferenceポリシーの特徴でもあるポリシーモジュールの状態確認と組み込みを試してみることができます。

 まず、作成されたモジュールを確認してみましょう。

# cd /etc/selinux/refpolicy/src/policy
# ls *.pp
acct.pp finger.pp mount.pp sendmail.pp
alsa.pp firstboot.pp mta.pp slocate.pp
amanda.pp fstools.pp mysql.pp slrnpull.pp
anaconda.pp ftp.pp netutils.pp smartmon.pp
apache.pp getty.pp networkmanager.pp snmp.pp
apm.pp gpg.pp nis.pp spamassassin.pp
arpwatch.pp gpm.pp nscd.pp squid.pp
authlogin.pp hal.pp ntp.pp ssh.pp
automount.pp hostname.pp openct.pp storage.pp
avahi.pp hotplug.pp pcmcia.pp stunnel.pp
base.pp howl.pp pegasus.pp su.pp
bind.pp i18n_input.pp portage.pp sudo.pp
bluetooth.pp inetd.pp portmap.pp sysnetwork.pp
bootloader.pp init.pp postfix.pp sysstat.pp
canna.pp inn.pp postgresql.pp tcpd.pp
cdrecord.pp ipsec.pp ppp.pp telnet.pp
certwatch.pp iptables.pp prelink.pp tftp.pp
clock.pp irc.pp privoxy.pp timidity.pp
comsat.pp irqbalance.pp procmail.pp tmpreaper.pp
consoletype.pp java.pp publicfile.pp ucspitcp.pp
cpucontrol.pp kerberos.pp quota.pp udev.pp
cron.pp ktalk.pp radius.pp unconfined.pp
cups.pp kudzu.pp radvd.pp updfstab.pp
cvs.pp ldap.pp raid.pp usbmodules.pp
cyrus.pp libraries.pp rdisc.pp userdomain.pp
daemontools.pp loadkeys.pp readahead.pp userhelper.pp
dbskk.pp locallogin.pp remotelogin.pp usermanage.pp
dbus.pp lockdev.pp rlogin.pp usernetctl.pp
ddcprobe.pp logging.pp roundup.pp uucp.pp
dhcp.pp logrotate.pp rpc.pp vbetool.pp
dictd.pp logwatch.pp rpm.pp vpn.pp
distcc.pp lpd.pp rshd.pp webalizer.pp
djbdns.pp lvm.pp rsync.pp wine.pp
dmesg.pp mailman.pp samba.pp xdm.pp
dmidecode.pp miscfiles.pp sasl.pp xfs.pp
dovecot.pp modutils.pp screen.pp xserver.pp
fetchmail.pp mono.pp selinuxutil.pp zebra.pp

 ポリシーモジュールの組み込み状況を確認するには以下のように実行します。

# semodule -l
No modules.

 試しにモジュールを組み込んでみましょう。以下のようにするとuserdomainモジュールを組み込むことが可能です。

# cd /usr/share/selinux/refpolicy
# semodule -s refpolicy -b ./base.pp -i ./userdomain.pp
libsemanage.semanage_install_active: Non-fatal error:Could not copy /etc/selinux/refpolicy/modules/active/seusers to /etc/selinux/refpolicy/seusers.
security: 3 users, 6 roles, 313 types, 45 bools
security: 55 classes, 390 rules
security: context root:system_r:getty_t is invalid
security: context system_u:system_r:unconfined_t is invalid
security: context user_u:sysadm_r:init_t is invalid
security: context root:system_r:unconfined_t is invalid
security: context user_u:sysadm_r:initrc_t is invalid
security: context user_u:sysadm_r:getty_t is invalid
security: context system_u:system_r:init_t is invalid
security: context root:sysadm_r:init_t is invalid
security: context system_u:system_r:getty_t is invalid
security: context system_u:system_r:initrc_t is invalid
security: context root:sysadm_r:initrc_t is invalid
security: context user_u:system_r:init_t is invalid
security: context user_u:sysadm_r:unconfined_t is invalid
security: context root:sysadm_r:getty_t is invalid
security: context user_u:system_r:initrc_t is invalid
security: context root:system_r:init_t is invalid
security: context user_u:system_r:getty_t is invalid
security: context root:sysadm_r:unconfined_t is invalid
security: context root:system_r:initrc_t is invalid
security: context user_u:system_r:unconfined_t is invalid
# semodule -l
userdomain  1.2.3

 「security: context XXX is invalid」と出力されていますが、これはuserdomainモジュールで使用されているセキュリティコンテキストがほかのモジュールに含まれているために取得できず、不正なコンテキストとして認識されている状態です。今回はPermissiveモードで動作させているため、これが出力されていても動作していますが、Enforcingモードで実行するときはこれは異常動作を引き起こす原因となります。

 今回は、可能な限りのアプリケーションをモジュール化し、動作を確認するためこのようになっていますが、次回以降は実際に必要なものだけモジュール化して動作させることにしましょう。

 ドキュメントの確認

 Referenceポリシーでは/etc/selinux/refpolicy/src/policyディレクトリでmakeターゲットにhtmlを指定することで、インストールされているポリシーに関するドキュメントを/usr/share/selinux/refpolicy/src/policy/doc/html以下に自動生成させることができます。これはhttp://serefpolicy.sourceforge.net/api-docs/で公開されているのと同じ体裁のものです。

# cd /usr/share/selinux/refpolicy/src/policy
# make html

 今回は取りあえずReferenceポリシーでのモジュール動作を確認するところまでを行いました。次回からはこのポリシーを正常動作させ、さらにモジュールを作成していく予定です。また、Raw Hide用に作成されているselinux-policy-targeted-sourceのSRPMなどのインストールスクリプト、コンフィグレーションも参考にしながら進めていきます。

2/2
 

Index
Referenceポリシーを設定してみよう
  Page1
ポリシー記述の必要性
ポリシー設定の手順
Page2
2006/1/24版Referenceポリシーの設定手順
再起動後のテスト
ドキュメントの確認


Profile
古田 真己(ふるた まさき)

サイオステクノロジー株式会社
インフラストラクチャービジネスユニット Linuxテクノロジー部
OSSテクノロジーグループ

 学生時代にUNIXマシン欲しさ、触りたさに秋葉原へ通い詰める。秋葉原でAT互換機や中古UNIXマシンの販売などを経て、IT業界に転職。その後Linuxのエンタープライズ分野での性能評価や、構築案件などを経験し、2004年にテンアートニ(現・サイオステクノロジー)入社。RedHat Linuxのサポート業務、構築案件に取り組んできた。

 現在はサイオステクノロジーでSELinuxの調査・研究、ビジネスでの普及活動に注力している。

Security&Trust記事一覧


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間