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


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

 cpを利用してみる――SELinuxの状態に気を付けよ

 cpコマンドでのバックアップもよく行われています。cpコマンドにはたくさんのオプションがあり、すべての情報をコピーしてくれる“cp -a”でバックアップを行っている方も多いでしょう。しかし、“cp -a”オプションだけですと、残念ながらSELinuxのラベル情報はコピーされません。

 ラベルなどのコンテキスト情報をコピーする場合には、“-c”オプションを使用します。従って、コンテキスト情報を含むすべてのコピーを行うために、

# cp -ac /var/lib/zope /root/backup

でコピーを行い、削除を行った後に、

# cp -ac /root/backup/zope /var/lib/zope

でリストアを行いたいと思います。

a)SELinux有効→SELinux有効

 SELinuxが有効なときに“cp -ac”コマンドで/root/backup以下にコピーを行い、/var/lib/zopeディレクトリを削除します。その後、/root/backup/zopeから/var/lib/zopeに、同様に“cp -ac”でコピーすることにより、コンテキスト情報が変化しないことが分かります。

SELinuxが有効な状態で/root/backup以下にコピーし、/var/lib/zopeを削除する
[root@plone2 ~]# getenforce
Enforcing
[root@plone2 ~]# cp -ac /var/lib/zope /root/backup/zope
[root@plone2 ~]# ls -lZ /root/backup/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
[root@plone2 ~]# rm -Rf /var/lib/zope/
[root@plone2 ~]# ls /var/lib/zope
ls: /var/lib/zope: No such file or directory
---------------------------------------------------------------
SELinuxが有効な状態で、/var/lib/zopeにコピーしなおすことにより、ラベルが元に戻る

[root@plone2 ~]# cp -ac /root/backup/zope /var/lib/zope
[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

b)SELinux有効→SELinux無効

 SELinuxを有効にした状態で、“cp -ac”コマンドでコピーを行い、/var/lib/zope以下を削除するまではa)と同じです。その後、/etc/selinux/configを変更してSELinuxが無効な状態で起動してリストアを行います。

SELinuxが無効な状態でリストアを行う
[root@plone2 lib]# getenforce
Disabled
[root@plone2 lib]# cp -ac /root/backup/zope /var/lib/zope
[root@plone2 lib]# ls -lZ /var/lib/zope/
Sorry, this option can only be used on a SELinux kernel.

 その後SELinuxを有効にして起動し、確認を行うと、SELinuxのラベル情報が欠落してしまっていることが分かります。

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

c)SELinux無効→SELinux有効

 SELinuxが無効な状態で、“cp -ac”コマンドでコピーを行い、/var/lib/zope以下を削除します。

SELinuxが無効な状態でバックアップを行い、/var/lib/zopeを削除する
[root@plone2 ~]# getenforce
Disabled
[root@plone2 ~]# cp -ac /var/lib/zope/ /root/backup/zope.disabled
[root@plone2 ~]# ls -lZ /root/backup/zope.disabled/
Sorry, this option can only be used on a SELinux kernel.
[root@plone2 ~]# rm -Rf /var/lib/zope/

 その後SELinuxを有効にして起動し、“cp -ac”コマンドでリストアを行うと、SELinuxのラベル情報が欠落してしまっている(親ディレクトリである/var/libディレクトリのラベル情報を継承している)ことが分かります。

SELinux有効な状態でリストアをすると、コンテキスト情報が元に戻らない(親ディレクトリから継承している)
[root@plone2 ~]# getenforce
Enforcing
[root@plone2 ~]# cp -ac /root/backup/zope.disabled/ /var/lib/zope
[root@plone2 ~]# ls -lZ /var/lib/zope/
drwxr-xr-x zope zope root:object_r:var_lib_t bin
drwxr-xr-x zope zope root:object_r:var_lib_t etc
drwxr-xr-x zope zope root:object_r:var_lib_t Extensions
drwxr-xr-x zope zope root:object_r:var_lib_t import
drwxr-xr-x zope zope root:object_r:var_lib_t log
drwxr-xr-x zope zope root:object_r:var_lib_t Products
-rw-r--r-- zope zope root:object_r:var_lib_t README.txt

 結果として、“cp -ac”でSELinuxのラベル情報をコピーできるが、SELinuxが無効になっている場合には情報が欠落してしまうことが分かりました。そのため、cpコマンドを用いてバックアップを作成する際には、SELinuxの状態が有効だったのか、無効だったのかということに十分気を付ける必要があります。

 rsyncを利用してみる――残念ながら……

 rsyncを用いてバックアップを行っているユーザーも多いのではないかと思います。rsyncでバックアップを、

rsync -avz -e ssh /var/lib/zope root@x.x.x.x:/root/backup

としてリモートにバックアップしたところ、SELinuxのラベル情報はバックアップされませんでした。そのため、a)、b)、c)のどのパターンでも、SELinuxのラベル情報を復元することはできなくなります。

 rsyncを用いてSELinux有効にしたシステムをバックアップする際には、別途“ls -laZ”コマンドなどでラベル情報をあらかじめリモートにバックアップしておき、リストアするためにはそのrsyncされているデータとラベル情報とをうまく組み合わせてリストアするしか方法がないようです。

 SELinuxバックアップの極意!

 以下がSELinuxのバックアップに関するTipsのまとめになります。ぜひ、活用してください。

  1. dump/restoreではきちんと取れる
  2. tarではSELinuxのラベル情報を取れない。starを使おう
  3. cpでコピーする際には“-c”オプションでコンテキストごとコピーできる。ただし、SELinux無効の状態ではコピーされないのでSELinuxの状態に注意する
  4. rsyncでは、SELinuxのラベル情報をバックアップすることはできない。別途、“ls -laZ”などの出力結果と組み合わせて対応する

 次回は、第1回でインストールしたシステムを例として、SELinuxを用いたシステムを監視する際に必要なTipsを紹介します。

3/3
 

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


Profile
面 和毅(おも かずき)

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


学生時代よりUNIXに親しむ。1997年からサーバ構築およびセキュリティ全般を扱う仕事に従事、Linuxを使い始める。

現在はLIDSの普及活動に注力。LIDSユーザ会(LIDS-JP)の立ち上げやLIDS関連文書の日本語化、LIDSを用いたシステム構築の紹介などを行っている。また、サイオステクノロジーでビジネス面でのLIDSの普及活動に注力している。

2005年12月より、LIDS Teamに参加し、LIDSの公式な開発チームの一員として活動している。

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


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間