第2回 SELinuxでいろいろバックアップ/リストアしてみた


面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2007/6/20

 今回は、前回セットアップしたPlone/Zopeのコンテンツ管理システムを基に、SELinuxを有効にした場合のバックアップに関して考察してみましょう。引き続き、前回作成したCentOS 4.4+Plone用にカスタマイズしたSELinuxを用います。

 SELinuxのバックアップにこだわる理由

 バックアップ/リストアはLinux運用の基礎の基礎では? と思われたかもしれません。あえてSELinuxのバックアップにこだわった理由は、SELinuxにはファイルシステム上で「拡張属性(XATTR)」情報を持つという特徴があるからです。

【参考記事】
プロダクトレビュー[Red Hat Enterprise Linux 4]
http://www.atmarkit.co.jp/flinux/prodreview/rhel4/rhel4a.html

 従って実際に運用していくうえでは、各種バックアッププログラムによって取得したデータが、リストア時にきちんとSELinuxの情報も戻してくれるかどうかも調べていく必要があります。この調査方法として、

  1. SELinuxを有効にしたシステムで取得したバックアップを、SELinuxを有効にしたシステム上でリストアする
    (SELinux有効→ SELinux有効)

  2. SELinuxを有効にしたシステムで取得したバックアップを、SELinuxを無効にしたシステム上でリストアする
    (SELinux有効→ SELinux無効)


  3. SELinuxを無効にしたシステムで取得したバックアップを、SELinuxを有効にしたシステム上でリストアする
    (SELinux無効→ SELinux有効)

というパターンで、それぞれのプログラムでテストしてみます。

 /var/lib/zopeディレクトリ以下をバックアップ/リストアした結果を表1にまとめました。それぞれのプログラムごとに結果を詳しく見てみましょう。

 
dump
tar
star
【注1】
cp -ac
【注2】
rsync
a)SELinux有効→ SELinux有効
×
×
b)SELinux有効→ SELinux無効
×
×
×
c)SELinux無効→ SELinux有効
×
×
×

【注1】リストア時に-Uオプションを付けて無制限にリストアしないとラベル情報が戻らないことがある
【注2】-aオプションだけではラベル情報はコピーされない

表1 SELinuxとバックアップコマンドの関係


 dumpを利用してみる――ばっちりOK

 dumpはUNIX系で古くから使用されているバックアップコマンドです。また、restoreはdumpで取ったバックアップをリストアする際に用いられるプログラムです。/var/lib/zope以下のバックアップを取るために、

# dump 0f - /var/lib/zope | (ssh omok@X.X.X.X "cd /home/omok/backup ; gzip | dd of=zope.dump.gz bs=10240")

を実行します。ここでのX.X.X.Xはバックアップ先のマシンで、/home/omok/backup以下にバックアップしたファイルを保存します。本来の運用であればテープドライブなどを使用しますが、今回はテストのため、sshを用いて別のマシンにファイルとしてバックアップしています。また、リストアを行うには、

# ssh omok@X.X.X.X gzip -dc /home/omok/backup/var_lib_zope.dump.gz | restore -rf -

というコマンドを使用します。以下、a)、b)、c)のそれぞれのパターンで見てみましょう。

a)SELinux有効→SELinux有効

 バックアップ前情報とバックアップの状況を以下のリストに示します。

バックアップ/リストアテスト前
---------------------------------------------------------------
[root@plone2 zope]# ls -lZ /var/lib/zope/
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t bin
drwxr-xr-x zope zope system_u:object_r:zope_conf_t etc
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Extensions
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t import
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t log
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Products
-rw-r--r-- zope zope system_u:object_r:zope_var_lib_t README.txt
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t var
---------------------------------------------------------------
バックアップコマンドを実行
[root@plone2 zope]# dump 0f - /var/lib/zope | (ssh omok@x.x.x.x "cd /home/omok/backup ; gzip | dd of=zope.dump.gz bs=10240")
DUMP: Date of this level 0 dump: Tue May 22 10:59:48 2007
DUMP: Dumping /dev/mapper/VolGroup00-LogVol00 (/ (dir var/lib/zope)) to standard output
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 13645 blocks.
DUMP: Volume 1 started with block 1 at: Tue May 22 10:59:48 2007
omok@x.x.x.x's password:
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Volume 1 completed at: Tue May 22 10:59:54 2007
DUMP: Volume 1 15660 blocks (15.29MB)
DUMP: Volume 1 took 0:00:06
DUMP: Volume 1 transfer rate: 2610 kB/s
DUMP: 15660 blocks (15.29MB)
DUMP: finished in 6 seconds, throughput 2610 kBytes/sec
DUMP: Date of this level 0 dump: Tue May 22 10:59:48 2007
DUMP: Date this dump completed: Tue May 22 10:59:54 2007
DUMP: Average transfer rate: 2610 kB/s
DUMP: DUMP IS DONE
292+35 records in
292+35 records out
3176858 bytes (3.2 MB) copied, 6.35432 seconds, 500 kB/s

 一度バックアップを取った後に/var/lib/zopeを削除し、リストアを行いました。この場合には、ラベル情報がきちんと元に戻っています。

いったん、/var/lib/zopeを削除
[root@plone2 /]# rm -Rf /var/lib/zope
---------------------------------------------------------------
リストア開始
[root@plone2 /]# ssh omok@x.x.x.x gzip -dc /home/omok/backup/zope.dump.gz | restore -rf -
omok@x.x.x.x's password:
restore: ./var: File exists
restore: ./var/lib: File exists
[root@plone2 /]# ls -lZ /var/lib/zope/
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t bin
drwxr-xr-x zope zope system_u:object_r:zope_conf_t etc
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Extensions
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t import
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t log
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Products
-rw-r--r-- zope zope system_u:object_r:zope_var_lib_t README.txt
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t var

 また、そのほかのディレクトリ(例では/var/tmp以下)にリストアを行った場合でも、ラベル情報が付いたままでリストアされています。

/var/tmp以下にリストアしても、ラベル情報はバックアップで取得したものが付与されていることが分かる
---------------------------------------------------------------
[root@plone2 zope]# pwd
/var/tmp/var/lib/zope
[root@plone2 zope]# ls -lZ
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t bin
drwxr-xr-x zope zope system_u:object_r:zope_conf_t etc
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Extensions
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t import
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t log
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Products
-rw-r--r-- zope zope system_u:object_r:zope_var_lib_t README.txt
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t var

b)SELinux有効→SELinux無効

 SELinuxが有効な状態でバックアップを行い/var/lib/zopeを削除するところまではa)の場合と同じです。今度は、/etc/selinux/configファイルを修正して、いったんシステムをSELinux無効な状態で起動し、リストアを行います。

SELinuxが無効の状態で立ち上がっている
[root@plone2 ~]# getenforce
Disabled
---------------------------------------------------------------

リストアを行う
[root@plone2 ~]# cd /
[root@plone2 /]# ssh omok@x.x.x.x gzip -dc /home/omok/backup/zope.dump.gz | restore -rf -
omok@x.x.x.x's password:
restore: ./var: File exists
restore: ./var/lib: File exists
---------------------------------------------------------------

SELinuxが無効になっているため、このままではラベル情報がリストアされているかを確認することができない
[root@plone2 /]# ls -lZ /var/lib/zope/
Sorry, this option can only be used on a SELinux kernel.

 その後、システムをSELinux有効(Enabled)な状態で起動すると、バックアップされていたラベル情報がきちんとリストアされていることが分かります。

[root@plone2 zope]# getenforce
Enforcing
[root@plone2 zope]# ls -lZ /var/lib/zope/
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t bin
drwxr-xr-x zope zope system_u:object_r:zope_conf_t etc
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Extensions
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t import
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t log
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Products
-rw-r--r-- zope zope system_u:object_r:zope_var_lib_t README.txt
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t var

c)SELinux無効→SELinux有効

 SELinuxが無効な状態でバックアップを行い、/var/lib/zopeを削除します。

SELinuxが無効の状態
[root@plone2 ~]# getenforce
Disabled
---------------------------------------------------------------
/var/lib/zope以下をバックアップ

[root@plone2 ~]# dump 0f - /var/lib/zope | (ssh omok@x.x.x.x "cd /home/omok/backup ; gzip | dd of=zope_disable.dump.gz bs=10240")
DUMP: Date of this level 0 dump: Tue May 22 11:19:30 2007
DUMP: Dumping /dev/mapper/VolGroup00-LogVol00 (/ (dir var/lib/zope)) to standard output
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 13645 blocks.
DUMP: Volume 1 started with block 1 at: Tue May 22 11:19:30 2007
omok@x.x.x.x's password:
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Volume 1 completed at: Tue May 22 11:19:35 2007
DUMP: Volume 1 15660 blocks (15.29MB)
DUMP: Volume 1 took 0:00:05
DUMP: Volume 1 transfer rate: 3132 kB/s
DUMP: 15660 blocks (15.29MB)
DUMP: finished in 5 seconds, throughput 3132 kBytes/sec
DUMP: Date of this level 0 dump: Tue May 22 11:19:30 2007
DUMP: Date this dump completed: Tue May 22 11:19:35 2007
DUMP: Average transfer rate: 3132 kB/s
DUMP: DUMP IS DONE
194+194 records in
194+194 records out
3176902 bytes (3.2 MB) copied, 3.77079 seconds, 843 kB/s
---------------------------------------------------------------
/var/lib/zope以下を削除

[root@plone2 ~]# rm -Rf /var/lib/zope/

 その後SELinuxを有効にして起動し、リストアを行うと、ラベル情報がきちんとリストアされていることが分かります。

SELinuxが有効な状態で、無効な状態で取得したバックアップイメージのリストアを行う
[root@plone2 /]# getenforce
Enforcing
[root@plone2 /]# ssh omok@x.x.x.x gzip -dc /home/omok/backup/zope_disable.dump.gz | restore -rf -
omok@x.x.x.x's password:
restore: ./var: File exists
restore: ./var/lib: File exists
---------------------------------------------------------------
SELinuxのラベルが復元されている

[root@plone2 /]# ls -lZ /var/lib/zope/
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t bin
drwxr-xr-x zope zope system_u:object_r:zope_conf_t etc
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Extensions
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t import
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t log
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t Products
-rw-r--r-- zope zope system_u:object_r:zope_var_lib_t README.txt
drwxr-xr-x zope zope system_u:object_r:zope_var_lib_t var

 結果として、dump/restoreを用いると、SELinuxの拡張属性はきちんとバックアップ/リストアされることが分かりました。ただし、今回のテストはCentOS 4.4のdump/restore(0.4b39)で行っていますので、古いバージョンのdump/restoreではうまく拡張属性部分を扱えない可能性があるでしょう。

1/3

Index
SELinuxでいろいろバックアップ/リストアしてみた
Page1
SELinuxのバックアップにこだわる理由
dumpを利用してみる――ばっちりOK
  Page2
tarを利用してみる――ラベル情報が欠落
starを利用してみる――オプションに注意
  Page3
cpを利用してみる――SELinuxの状態に気を付けよ
rsyncを利用してみる――残念ながら……
SELinuxバックアップの極意!


スイッチ・オン! SELinux 連載インデックス


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間