最終回 Heartbeat+独自ドメインでセキュアな世界のその先へ
面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2008/7/16
自動生成されたポリシーを調整する
次に、上記で作成されたポリシーを調整します。
- /root/policiesディレクトリで、
# sh heartbeat.sh
を実行し、heartbeat.ppファイルを作成します。
[root@primary policies]# sh heartbeat.sh
Compiling targeted heartbeat module
/usr/bin/checkmodule: loading policy configuration from tmp/heartbeat.tmp
/usr/bin/checkmodule: policy configuration loaded
/usr/bin/checkmodule: writing binary representation (version 6) to tmp/heartbeat.mod
Creating targeted heartbeat.pp policy package
rm tmp/heartbeat.mod.fc tmp/heartbeat.mod
/sbin/restorecon reset /usr/lib/heartbeat/heartbeat context system_u:object_r:lib_t:s0->system_u:object_r:heartbeat_exec_t:s0図10 heartbeat.shを実行する
- system-config-selinuxの「Policy Module」で「Add」を選択します。新しいモジュールとして、「heartbeat.pp」を選択します。
図11 heartbeat.ppを選択
- Heartbeatがロードされます。
図12 Heartbeatのポリシーモジュールがロードされている
- ルールを追加するために、/var/log/audit/audit.logにSELinux関係のログを出力させます。
# setenforce 0
でPermissiveモードにし、
# /etc/init.d/heartbeat start
でHeartbeatを起動します。HeartbeatからApache/MySQLが起動されたのをcrm_monコマンドで確認してから、Webブラウザで実際にサンプルのサイトが出力されるのを確認します。
図13 サンプルサイトが表示されていることを確認(クリックで拡大します)
- /var/log/audit/audit.logに出力されたログから、audit2allowコマンドで追加のポリシーを作成します。
# cat /var/log/audit/audit.log | audit2allow -R > /root/policies/heartbeat.add
として、追加のポリシー(heartbeat.add)を作成します。heartbeat_tドメインに関する項だけを残し、それ以外は削除します。
- heartbeat.addの中身をheartbeat.teファイルに追加します。このとき、重複している項目(typeの宣言文など)もありますので、重複がないように調整します。
- 「system-config-selinux」の「Policy Module」の項でHeartbeatを選択した状態で「Remove」ボタンを押し、Heartbeatモジュールをアンロードします。
- 一度古いheartbeat.ppファイルとtmpディレクトリを削除したあと、
# sh ./heartbeat.sh
を実行して、audit2allowによるポリシーが加わったheartbeat.ppファイルを再作成します。
- 「Add」ボタンを押して、新しいheartbeat.ppファイルをロードします。
- コマンドラインから、
# setenforce 1
として、Enforcingモードで画面が出力されることを確認します。また、“pstree -Z”コマンドで、Heartbeatが親プロセスとなっているツリーのドメインを確認します。
[root@primary ~]# pstree -Z | grep hear |-heartbeat(`root:system_r:heartbeat_t') | |-attrd(`root:system_r:heartbeat_t') | |-ccm(`root:system_r:heartbeat_t') | |-cib(`root:system_r:heartbeat_t') | |-crmd(`root:system_r:heartbeat_t') | | |-pengine(`root:system_r:heartbeat_t') | | `-tengine(`root:system_r:heartbeat_t') | |-heartbeat(`root:system_r:heartbeat_t') | |-heartbeat(`root:system_r:heartbeat_t') | |-heartbeat(`root:system_r:heartbeat_t') | |-lrmd(`root:system_r:heartbeat_t') | |-mgmtd(`root:system_r:heartbeat_t') | |-pingd(`root:system_r:heartbeat_t') | `-stonithd(`root:system_r:heartbeat_t') |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | |-httpd(`root:system_r:heartbeat_t') | `-httpd(`root:system_r:heartbeat_t') |-mysqld_safe(`root:system_r:heartbeat_t') | `-mysqld(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | |-{mysqld}(`root:system_r:heartbeat_t') | `-{mysqld}(`root:system_r:heartbeat_t') |
図14 Heartbeatツリーの様子 |
図14を見ると分かりますが、現状では、httpdなどHeartbeatから実行されるプロセスも、すべてheartbeat_tドメインで動作しています。これでは、Apacheがhttpd_tドメインで動作していませんので、httpd_tで動作しているApacheを前提としたほかのプログラムにも影響を与えてしまう可能性があります。
このように、SELinuxが出力するログから、audit2allowコマンドを使って生成されたポリシーを、何も考えずにそのまま追加してしまうと、意図しない動作をすることがあります。
子プロセスを各ドメインへ遷移させるには
それでは、このようなことが起きないようにするにはどうすればよいのでしょうか。Heartbeatが起動するデーモンを、それぞれ自身のドメインで動作させるためには、「ドメイン遷移」を起こさせて、各ドメインに子プロセスが遷移するようにすればOKです。
「ドメイン遷移」についての詳しい説明は、連載「SE-PostgreSQLによるセキュア・データベース構築」の第2回、「データベース強制アクセス制御をカスタマイズする」に詳しく説明がされていますが、簡単にいうと親プロセスが、あるプログラムをexecveする際に、別のドメインに遷移するというものです。
これを利用して、heartbeat_tドメインからhttpd_t/mysqld_tドメインへと遷移するように、下記の遷移ルールを考えます。
図15 ドメイン遷移ルールを考える |
- heartbeat_tドメインは、heartbeat_initrc_exec_httpd2_tタイプのファイル(/etc/init.d/httpd_hb2)を実行して、httpd_tドメインを生成します。
- heartbeat_tドメインは、heartbeat_initrc_exec_mysqld2_tタイプのファイル(/etc/init.d/mysqld_hb2)を実行して、mysqld_tドメインを生成します。
このように動作させるため、
# cp -p /etc/init.d/httpd /etc/init.d/httpd_hb2
# cp -p /etc/init.d/mysqld /etc/init.d/mysqld_hb2
として、Heartbeatが実行する起動スクリプトとして、元の起動スクリプトをコピーします。
また、/var/lib/heartbeat/crm/cib.xmlファイル内の2カ所を書き換えて、httpd_hb2/mysqld_hb2スクリプトを用いて起動/停止を行うように設定を変更します。
36: </primitive> 37: <primitive id="apache" class="lsb" type="httpd_hb2"> 38: <instance_attributes id="ia_apache"> 39: <attributes> 40: <nvpair id="ia_apache_configfile" name="configfile" value ="/etc/httpd/conf/httpd.conf"/> -------------------------------------------------- 75: </instance_attributes> 76: </primitive> 77: <primitive id="mysql" class="lsb" provider="heartbeat" type="my sqld_hb2"> 78: <operations> |
図16 cib.xmlの赤字で示した部分を修正する |
2/3 |
Index | |
Heartbeat+独自ドメインでセキュアな世界のその先へ | |
Page1 Heartbeat用の独自ドメインの設定 Heartbeat用のひな型の作成 |
|
Page2 自動生成されたポリシーを調整する 子プロセスを各ドメインへ遷移させるには |
|
Page3 ドメイン遷移の設定 業務アプリケーションでもスイッチ・オンは怖くない! |
スイッチ・オン! SELinux 連載インデックス |
Security&Trust フォーラム 新着記事
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|