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


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

 tarを利用してみる――ラベル情報が欠落

 tarもUNIX/Linux系では古くから使われているアーカイブプログラムです。

# tar -cvf /root/backup.zope.tar /var/lib/zope

として/root以下に/var/lib/zopeをアーカイブしたバックアップファイルを作成します。リストアは、/ディレクトリで、

# tar -xvf /root/backup.tar

とします。

a)SELinux有効→SELinux有効

 SELinuxを有効にした状態で、tarでアーカイブを作成し、/var/lib/zopeディレクトリを削除します。

SELinuxが有効の状態で、/root以下にアーカイブを作成する
[root@plone2 lib]# tar -cvf /root/zope.backup.tar /var/lib/zope
tar: Removing leading `/' from member names
/var/lib/zope/
/var/lib/zope/README.txt
/var/lib/zope/etc/
/var/lib/zope/etc/zope.conf
/var/lib/zope/etc/logrotate.conf
/var/lib/zope/log/
/var/lib/zope/log/README.txt
/var/lib/zope/log/Z2.log
/var/lib/zope/log/Z2.log.1.gz
/var/lib/zope/log/event.log
/var/lib/zope/log/event.log.1.gz
/var/lib/zope/bin/



/var/lib/zope/import/
/var/lib/zope/import/README.txt
---------------------------------------------------------------
/var/lib/zope以下を削除する

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

 その後リストアを行うと、/var/libディレクトリからラベル情報を継承しているだけの状態で、バックアップ前に設定してあったラベル情報が欠落していることが分かります。

/に移動し、アーカイブしたファイルを展開する
[root@plone2 lib]# cd /
[root@plone2 /]# tar -xvf /root/zope.backup.tar
var/lib/zope/
var/lib/zope/README.txt
var/lib/zope/etc/
var/lib/zope/etc/zope.conf
var/lib/zope/etc/logrotate.conf
var/lib/zope/log/
var/lib/zope/log/README.txt



var/lib/zope/var/Data.fs.index
var/lib/zope/var/Data.fs
var/lib/zope/import/
var/lib/zope/import/README.txt
---------------------------------------------------------------
SELinuxのラベル情報を確認する。親ディレクトリのラベルを引き継いでおり、バックアップしたときのラベル情報が欠落していることが分かる。

[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
drwxr-xr-x zope zope root:object_r:var_lib_t var

b)SELinux有効→SELinux無効

 SELinuxを有効にした状態で、tarでアーカイブを作成し、/var/lib/zope以下を削除するまではa)と同じです。その後、/etc/selinux/configを変更してSELinuxが無効な状態で起動してリストアを行います。

SELinuxが無効な状態でリストアを行う
[root@plone2 /]# getenforce
Disabled
[root@plone2 lib]# cd /
[root@plone2 /]# tar -xvf /root/zope.backup.tar
var/lib/zope/
var/lib/zope/README.txt



var/lib/zope/var/Data.fs
var/lib/zope/import/
var/lib/zope/import/README.txt
---------------------------------------------------------------
SELinuxが無効になっているため、この時点ではラベル情報を確認することができない

[root@plone2 /]# ls -lZ /var/lib/zope/
Sorry, this option can only be used on a SELinux kernel.

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

SELinux有効で起動して確認する。ラベル情報が完全に失われている状態になっている。
[root@plone2 ~]# getenforce
Enforcing
[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
drwxr-xr-x zope zope    var

c)SELinux無効→SELinux有効

 SELinuxが無効の状態で、tarでアーカイブを作成します。

SELinuxを無効にした状態でアーカイブを作成する
[root@plone2 ~]# getenforce
Disabled
[root@plone2 ~]# ls -lZ /var/lib/zope/
Sorry, this option can only be used on a SELinux kernel.
[root@plone2 ~]# tar -cvf /root/zope.disable.tar /var/lib/zope/
tar: Removing leading `/' from member names
/var/lib/zope/
/var/lib/zope/README.txt
/var/lib/zope/etc/
/var/lib/zope/etc/zope.conf



/var/lib/zope/import/
/var/lib/zope/import/README.txt
---------------------------------------------------------------
/var/lib/zopeを削除する

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

 その後SELinuxを有効にして起動し、リストアを行うと、親ディレクトリの/var/libのラベル情報をそのまま継承しているだけの状態で、バックアップ前に設定してあったラベル情報が欠落していることが分かります。

SELinux有効な状態でリストアを行う
[root@plone2 ~]# getenforce
Enforcing
[root@plone2 ~]# cd /
[root@plone2 ~]# tar -xvf /root/zope.disable.tar
var/lib/zope/
var/lib/zope/README.txt
var/lib/zope/etc/
var/lib/zope/etc/zope.conf



var/lib/zope/import/
var/lib/zope/import/README.txt
---------------------------------------------------------------
SELinuxのラベル情報を確認する。親ディレクトリのラベルを引き継いでおり、バックアップしたときのラベル情報が欠落していることが分かる。

[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
drwxr-xr-x zope zope root:object_r:var_lib_t var

 結果として、tarを用いたときにはSELinuxのラベル情報はバックアップされず、欠落してしまうことが分かります。ただしこれは、CentOS 4.4に同梱されているバージョン(GNU tar 1.14)での話ですので、将来的にtarでもラベル情報が取得されるようになるかもしれません。

 starを利用してみる――オプションに注意

 tarではSELinuxのラベル情報がアーカイブにしたときに欠落してしまうことが分かりました。しかし最近のLinuxでは、拡張属性を含めてアーカイブを作成してくれる“star”というコマンドがあります。SELinuxのラベル情報は拡張属性に入っていますので、このstarを用いることにより、ラベル情報を含めた形でバックアップを行うことが可能です。

# star H=exustar -xattr -c /var/lib/zope > /root/backup/zope.backup_star.tar

でバックアップを取得します。リストアは、

# star -xattr -x < /root/backup/zope.backup_star.tar

で行います。

【参考記事】
Linuxカーネル2.6で実現するACL(4/5) http://www.itmedia.co.jp/enterprise/0403/06/epn01_4.html

 注意として、starで取得したアーカイブは(新しいバージョンの)tarコマンドでも展開できますが、ラベル情報が欠落してしまいますので、SELinuxの情報をリストアするには必ずstarコマンドで展開する必要があります。

a)SELinux有効→SELinux有効

 SELinuxを有効にした状態で、tarでアーカイブを作成し、/var/lib/zopeディレクトリを削除します。

SELinuxが有効な状態で、starでバックアップを行う
[root@plone2 tmp]# getenforce
Enforcing
[root@plone2 tmp]# ls -lZ /var/tmp/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 tmp]# star H=exustar -acl -c /var/lib/zope > /root/backup/zope.backup_star.tar
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
---------------------------------------------------------------
/var/lib/zopeディレクトリを削除する

[root@plone2 tmp]# rm -Rf /var/lib/zope/
[root@plone2 tmp]# ls -l /var/lib/zope
ls: /var/lib/zope: No such file or directory

 その後リストアを行うと、バックアップ前に設定してあったラベル情報がきちんと元に戻っていることが分かります。

starコマンドを使ってリストアする
[root@plone2 /]# cd /
[root@plone2 /]# star -xattr -x < /root/backup/zope.backup_star.tar
star: WARNING: skipping leading '/' on filenames.
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
---------------------------------------------------------------
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

 ただし、ほかのディレクトリ(例では/var/tmp以下)にリストアを行った場合には、-Uオプションを付けて、

# star -xattr -Ux < /root/backup/zope.backup_star.tar

として、無条件で展開しないとラベル情報が欠落してしまいますので注意が必要です。

-Uオプションをつけないと、ファイルの比較を行ってしまうためにラベル情報が戻らない
[root@plone2 /]# cd /var/tmp
[root@plone2 tmp]# star -xattr -x < /root/backup/zope.backup_star.tar
star: WARNING: skipping leading '/' on filenames.
star: current 'var/lib/zope/' newer.



star: current 'var/lib/zope/import/README.txt' newer.
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
[root@plone2 tmp]# ls -lZ /var/tmp/var/lib/zope/
drwxr-xr-x zope zope root:object_r:root_t bin
drwxr-xr-x zope zope root:object_r:root_t etc
drwxr-xr-x zope zope root:object_r:root_t Extensions
drwxr-xr-x zope zope root:object_r:root_t import
drwxr-xr-x zope zope root:object_r:root_t log
drwxr-xr-x zope zope root:object_r:root_t Products
-rw-r--r-- zope zope root:object_r:etc_runtime_t README.txt
---------------------------------------------------------------
-Uオプションをつけると、無条件で展開されるためラベル情報も戻る

[root@plone2 tmp]# rm -Rf /var/tmp/var
[root@plone2 tmp]# star -xattr -Ux < /root/backup/zope.backup_star.tar
star: WARNING: skipping leading '/' on filenames.
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
[root@plone2 tmp]# ls -lZ /var/tmp/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を有効にした状態で、tarでアーカイブを作成し、/var/lib/zope以下を削除するまではa)と同じです。その後、/etc/selinux/configを変更してSELinuxが無効な状態で起動してリストアを行います。

SELinux無効の状態でリストアを行う
[root@plone2 lib]# getenforce
Disabled
[root@plone2 lib]# cd /
[root@plone2 /]# star -xattr -x < /root/backup/zope.backup_star.tar
star: WARNING: skipping leading '/' on filenames.
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
[root@plone2 /]# ls -lZ /var/tmp/zope/
Sorry, this option can only be used on a SELinux kernel.
[root@plone2 /]#

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

[root@plone2 ~]# getenforce
Enforcing
[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

c)SELinux無効→SELinux有効

 SELinuxが無効な状態で、tarでアーカイブを作成し、/var/lib/zope以下を削除します。

SELinuxが無効な状態でバックアップを取得し、/var/lib/zopeを削除する
[root@plone2 ~]# getenforce
Disabled
[root@plone2 ~]# star H=exustar -xattr -c /var/lib/zope/ > /root/backup/zope.backup_star_disabled.tar
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
[root@plone2 ~]# rm -Rf /var/lib/zope/
[root@plone2 ~]# ls /var/lib/zope
ls: /var/lib/zope: No such file or directory

 その後、/etc/selinux/configを変更してSELinuxを有効にした状態で起動してリストアを行うと、SELinuxのラベル情報がきちんと元に戻っていることが分かります。

SELinux有効でリストアを行う
[root@plone2 /]# getenforce
Enforcing
[root@plone2 /]# cd /
[root@plone2 /]# star -xattr -x < /root/backup/zope.backup_star.tar
star: WARNING: skipping leading '/' on filenames.
star: 14 blocks + 0 bytes (total of 143360 bytes = 140.00k).
---------------------------------------------------------------
ラベル情報がきちんとリストアされていることが分かる

[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

 結果として、starではSELinuxのラベル情報が完全にバックアップ/リストアできることが分かります。ただし、バックアップ時やリストア時のオプションに気を付けないと、情報が欠落してしまうので注意が必要です。

2/3

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


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


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間