第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 連載インデックス


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間