特集
2004/03/07 00:00 更新
特集:Linuxカーネル2.6で実現するACL (4/5)
ACLを含めたファイルのバックアップおよびリストア
ACL設定は拡張属性として保存されるため、ACLが考慮されていない「tar」などのコマンドでバックアップを行っても、ACLの設定が保存されないことに注意したい。バックアップに限らず、ACLをサポートしない「cp」コマンドでファイルをコピーした場合でも同様に、ACLは失われてしまう。
ACLに対応しない「cp」コマンドでは、ACL設定が失われる$ ls -l total 16 drwxrwx---+ 2 doggie doggie 4096 Jan 30 05:52 bbs -rw-rw-r--+ 1 doggie doggie 6 Jan 30 05:49 testfile $ cp testfile testfile2 $ ls -l total 20 drwxrwx---+ 2 doggie doggie 4096 Jan 30 05:52 bbs -rw-rw-r--+ 1 doggie doggie 6 Jan 30 05:49 testfile -rw-r--r-- 1 doggie doggie 6 Feb 1 22:24 testfile2 $ |
この問題を解決するには、ACLに対応したアーカイバを利用するか、「getfacl」コマンドであらかじめACL設定をバックアップしておき、アーカイブの展開後に「setfacl」コマンドを使用して再度設定し直す方法がある。
●ACLに対応したアーカイバを使用するPOSIX ACLのバックアップおよびリストアをサポートしているアーカイバとしては「Star」がある。「Star」はPOSIXで定義された「Pax」と呼ばれる形式を使用しており、UNIXの世界で最も標準的な「tar」アーカイブ形式と互換性を持つ。このため、ACL情報が正常に復元されなくても構わないのであれば、「Star」で作成したアーカイブを一般的な「tar」コマンドでリストアすることも可能だ。「Star」はこちらのFTPサイトで配布されているほか、Red Hat Linux 9では標準でインストールされるようだ。
Red Hat Linuxベースのディストリビューションなど、パッケージシステムとしてRPMを利用している場合はRPMパッケージ化されたものから導入してもよいだろう。2004年2月現在、前述のRpmfind.Netで「star」をキーワードに検索すると約20個の関連パッケージを見つけられる。パッケージを入手したら「rpm -i パッケージ名」などとしてインストールを行う。
RPMを利用した「Star」パッケージのインストール例# wget ftp://ftp.redhat.com/pub/redhat/linux/9/\ en/os/i386/RedHat/RPMS/star-1.5a08-4.i386.rpm # rpm -U star-1.5a08-4.i386.rpm |
Debian GNU/Linuxベースのディストリビューションの場合は、「apt-get」コマンドを使えばダウンロードおよびインストールができる。
aptを利用した「Star」パッケージのインストール例# apt-get update # apt-get install star |
「Star」を使って「/export/doggie/」以下を「$HOME/backup.tar.gz」ファイルにバックアップする場合は、以下のようにすればよい。
$ star H=exustar -acl -c /export/doggie |\ gzip -c - > ~/backup.tar.gz |
書き戻すには「Star」を使うか、ACL設定が復元されなくても構わないのであれば「tar」コマンドを利用してもよい。
starコマンドでリストアする(ACL設定も復元される) $ star -acl -x < ~/backup.tar.gz |
なお「Star」が生成したアーカイブはPOSIX 1003.1-2001の拡張形式であるため、それを認識できない「tar」コマンドを使用した場合には以下のような警告メッセージが表示されるが、実用上の問題はない。
$ tar xvzf hoge.tar.gz ././@PaxHeader tar: ././@PaxHeader: Unknown file type 'g', extracted as normal file ././@PaxHeader tar: ././@PaxHeader: Unknown file type 'x', extracted as normal file /export/doggie/ tar: Removing leading `/' from member names ././@PaxHeader tar: ././@PaxHeader: Unknown file type 'x', extracted as normal file |
●「getfacl」「setfacl」コマンドを利用し、別途ACL設定をバックアップおよびリストアする
「Star」のほかにも、若干の手間はかかるが、「getfacl」「setfacl」コマンドを利用してバックアップおよびリストアを行うことが可能だ。「Star」など高レベルでの扱いとは別に、これらの基本的なコマンドによるバックアップおよびリストアの手順も覚えておくと良いだろう。
先ほどから何度か「getfacl」コマンドの出力例を挙げてきたが、実は「setfacl」コマンドはこの形式を入力としてバッチ処理を行うことができる。つまり、リダイレクトを使用して「getfacl」コマンドの出力を保存しておき、ACL設定を復元したい場合には、保存しておいたファイルを「setacl」コマンドに処理させればよい。
getfaclコマンドを利用してACL設定をバックアップする$ getfacl -R *> ~/acl_backup |
実際に保存された「acl_backup」ファイルは次のような形式になる。
ACLのバックアップファイルの内容# file: bbs # owner: doggie # group: doggie user::rwx user:www-data:rwx group::--- mask::rwx other::--- # file: testfile # owner: doggie # group: doggie user::rw- user:www-data:rw- user:rapis:rw- group::r-- mask::rw- other::r-- |
では、一旦これらのファイルに設定されたACLを削除してから、「setfacl」コマンドで復元してみよう。
$ ls -l total 16 drwxrwx---+ 2 doggie doggie 4096 Jan 30 05:52 bbs -rw-rw-r--+ 1 doggie doggie 6 Jan 30 05:49 testfile ACL設定を消去 $ setfacl -b * $ ls -l total 8 drwx------ 2 doggie doggie 4096 Jan 30 05:52 bbs -rw-r--r-- 1 doggie doggie 6 Jan 30 05:49 testfile $ setfacl --restore=/home/doggie/acl_backup ACL設定がリストアされているか確認 $ ls -l total 16 drwxrwx---+ 2 doggie doggie 4096 Jan 30 05:52 bbs -rw-rw-r--+ 1 doggie doggie 6 Jan 30 05:49 testfile ACL設定がリストアされているか確認 $ getfacl * # file: bbs # owner: doggie # group: doggie user::rwx user:www-data:rwx group::--- mask::rwx other::--- # file: testfile # owner: doggie # group: doggie user::rw- user:www-data:rw- user:rapis:rw- group::r-- mask::rw- other::r-- |
最後に実行した「getfacl」コマンドの出力から、「acl_backup」ファイルに記録されたACL設定が復元されていることが分かる。この方法を用いれば、一般的な「tar」アーカイバとPOSIX準拠「getfacl」「setfacl」コマンドさえあれば、一応のバックアップ・リストアが可能である。
Samba経由でACLを確認・編集する
Windowsのファイル共有で知られるSMB/CIFSサーバ「Samba」を「--with-acl-support」コンパイルオプション付きで構築すると、ACL設定をWindowsクライアントから確認・編集できる。ACL設定を確認したい場合は、対象のファイルもしくはディレクトリを右クリックして「プロパティ」を選択する。プロパティのウインドウが開いたら、セキュリティタブをクリックすると、以下のような形でアクセス設定が表示されるはずだ。
リストボックスは、上から順番に「ファイル所有者」「グループ」「第三者」、そして「ACLで設定されている例外ユーザー」の順序で表示される。このウインドウ上でファイルのアクセス許可を編集し、ACLを設定することも可能だ。
これまで、各ユーザーもしくはグループに対するアクセス権限を必要に応じて自由に設定できるACLの使用方法について述べてきた。最後に、Linuxカーネル2.4のシステムでもACLの恩恵を受けるための方法を解説しておこう。
[長谷川 猛,ITmedia]
Copyright © ITmedia, Inc. All Rights Reserved.