第9回 挑戦! SELinuxでWebアプリもクラスタリング
面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2008/6/2
フェイルオーバーの実験
SELinuxを有効にした状態で、プライマリサーバをシャットダウンし、セカンダリ側にきちんとフェイルオーバーするかをテストします。
まず両サーバ上で、
# /etc/init.d/drbd start # /etc/init.d/heartbeat start |
を実行して、DRBDとHeartbeatのプロセスを起動します。次に、
# crm_mon |
でクラスタの情報をチェックします。しばらくするとリスト2のようになり、Apache/DRBD0/MySQLがプライマリで動作します。
[root@primary ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Fri May 9 19:38:43 2008 Current DC: secondary (1d19af62-ee33-490a-91e3-5353cdd0d5c3) 2 Nodes configured. 3 Resources configured. ============ Node: primary (2d343f83-10fa-4ae9-8b6a-90907164cc37): online Node: secondary (1d19af62-ee33-490a-91e3-5353cdd0d5c3): onlineResource Group: group_apache ipaddr (heartbeat::ocf:IPaddr): Started primary fs0 (heartbeat::ocf:Filesystem): Started primary apache (lsb:httpd): Started primary Master/Slave Set: ms-drbd0 drbd0:0 (heartbeat::ocf:drbd): Started secondary drbd0:1 (heartbeat::ocf:drbd): Master primary Resource Group: group_mysql fs1 (heartbeat::ocf:Filesystem): Started primary mysql (lsb:mysqld): Started primary |
リスト2 Apache/DRBD0/MySQLの動作状況 |
図3 Webサービスが正常に動作しているのが分かる(クリックで拡大します) |
では、代表IPアドレスにアクセスしてみましょう。「http://192.168.135.100/sample3/menu.php」にアクセスすると、PHPがMySQLからデータを取り出し、メニューが表示されます。
ここで、プライマリのホストをshutdownします。しばらくするとリスト3のようになり、Apache/DRBD0/MySQLがセカンダリで動作するようになります。
[root@secondary ~]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Fri May 16 11:16:00 2008 Current DC: secondary (1d19af62-ee33-490a-91e3-5353cdd0d5c3) 2 Nodes configured. 3 Resources configured. ============ Node: primary (2d343f83-10fa-4ae9-8b6a-90907164cc37): OFFLINE Node: secondary (1d19af62-ee33-490a-91e3-5353cdd0d5c3): onlineResource Group: group_apache ipaddr (heartbeat::ocf:IPaddr): Started secondary fs0 (heartbeat::ocf:Filesystem): Started secondary apache (lsb:httpd): Started secondary Master/Slave Set: ms-drbd0 drbd0:0 (heartbeat::ocf:drbd): Master secondary drbd0:1 (heartbeat::ocf:drbd): Stopped Resource Group: group_mysql fs1 (heartbeat::ocf:Filesystem): Started secondary mysql (lsb:mysqld): Started secondary |
リスト3 プライマリホストをシャットダウンすると、セカンダリに処理が移る |
代表IPアドレスである「http://192.168.135.100/sample3/menu.php」へアクセスすると、図3と同じくメニューが表示されます。
以上のように、クラスタリングシステム上でLAMP環境を構築した際でも、SELinuxを有効にして動作に支障がないことが分かります。
共有ディスクで気を付けるべきSELinuxの権限設定
SELinuxを有効にしてクラスタリングシステムを組んだ際には、すべてのサーバのポリシーを同じにしておく必要があります。これは、特に共有ディスクを用いてサービスを提供している際に気を付ける必要があります。
例として、図4のような場合を検証してみましょう。
図4 共有ディスク上のファイルとタイプの関係 |
共有ディスクを/var/www/html/testdirにマウントし、その下にtest1、test2のディレクトリを作成します。また、test1、test2ディレクトリ内にもテストのために、それぞれfile1、file2というファイルを作成しておきます。
プライマリのマシンで共有ディスクをマウントしているときに、プライマリ側のみで新たにそれぞれのディレクトリにtest_1_t、test_2_tというタイプを付与します。新規のタイプを追加するために作成したモジュールをリスト4、リスト5に示します。
■ ■test_1.fc ■ /var/www/html/testdir/test1(/.*)? -- gen_context(system_u:object_r:test_1_t,s0) ■ ■test_1.if ■ ## <summary>policy for test_1</summary> ######################################## ## <summary> ## Execute a domain transition to run test_1. ## </summary> ## <param name="domain"> ## <summary> ## Domain allowed to transition. ## </summary> ## </param> # ■ ■test_1.te ■ policy_module(test_1,1.0.0) ######################################## # # Declarations # type test_1_t; require { type unconfined_t; class dir getattr; } allow unconfined_t test_1_t:dir getattr; ■ ■test_1.sh ■ #!/bin/sh make -f /usr/share/selinux/devel/Makefile /usr/sbin/semodule -i test_1.pp /sbin/restorecon -F -R -v /var/www/html/testdir/test1 chcon system_u:object_r:test_1_t /var/www/html/testdir/test1 |
リスト4 test_1.fc/test_1.if/test_1.te/test_1.sh |
■ ■test_2.fc ■ /var/www/html/testdir/test2(/.*)? -- gen_context(system_u:object_r:test_2_t,s0) ■ ■test_2.if ■ ## <summary>policy for test_2</summary> ######################################## ## <summary> ## Execute a domain transition to run test_2. ## </summary> ## <param name="domain"> ## <summary> ## Domain allowed to transition. ## </summary> ## </param> # ■ ■test_2.te ■ policy_module(test_2,1.0.0) ######################################## # # Declarations # type test_2_t;require { type unconfined_t; class dir getattr; } allow unconfined_t test_2_t:dir getattr; ■ ■test_2.sh ■ #!/bin/sh make -f /usr/share/selinux/devel/Makefile /usr/sbin/semodule -i test_2.pp /sbin/restorecon -F -R -v /var/www/html/testdir/test2 chcon system_u:object_r:test_2_t /var/www/html/testdir/test2 |
リスト5 test_2.fc/test_2.if/test_2.te/test_2.sh |
また、タイプを追加する際に、lsコマンドでディレクトリのタイプを表示できるように、test_1_t、test_2_tタイプを持つディレクトリのみが、unconfined_tからgetattrできるようにしておきます。そして、
# ls -lZ |
コマンドで/var/www/html/testdirの中身を確認すると、test1、test2ディレクトリに、それぞれ設定したタイプが付与されていることが確認できます。また、ディレクトリへのgetattrしか許可していませんので、各ディレクトリの中を見ることはできません。
[root@primary ~]# ls -lZ /var/www/html/testdir/ -rw-r--r-- apache apache system_u:object_r:httpd_sys_content_t index.html drwxr-xr-x apache apache system_u:object_r:httpd_sys_content_t LIDS-JP drwx------ apache apache system_u:object_r:httpd_sys_content_t lost+found drwxr-xr-x root root system_u:object_r:test_1_t test1 drwxr-xr-x root root system_u:object_r:test_2_t test2 [root@primary ~]# ls -lZ /var/www/html/testdir/test1 ls: /var/www/html/testdir/test1: Permission denied [root@primary ~]# ls -lZ /var/www/html/testdir/test2 ls: /var/www/html/testdir/test2: Permission denied [root@primary ~]# |
リスト6 ディレクトリを見るための権限がないため、lsコマンドはアクセス拒否される |
2/3 |
Index | |
挑戦! SELinuxでWebアプリもクラスタリング | |
Page1 LAMPを用いたWebアプリケーションのクラスタリング DRBD+Heartbeatによるクラスタリング |
|
Page2 フェイルオーバーの実験 共有ディスクで気を付けるべきSELinuxの権限設定 |
|
Page3 プライマリからセカンダリに切り替わった際の挙動 |
スイッチ・オン! SELinux 連載インデックス |
- 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)対策の観点から考える。
|
|