特集
2004/03/07 00:00 更新


特集:Linuxカーネル2.6で実現するACL (1/5)

Linuxカーネル2.6に標準採用された新しい機能の1つ、POSIX ACL(Access Control Lists)を紹介しよう。これを機にLinuxカーネル2.6の世界を楽しんでみるのもいいかもしれない。

 Linuxカーネル2.6も正式リリースからしばらく経ち、O(1)スケジューラの採用やデバイスI/Oの効率化により、システムのパフォーマンスが飛躍的に高まったことはすでにご存知の方、もしくは十分に体感されている方も多いのではなかろうか。そのほかにも、多くの改良および機能拡張が行われているが、今回はその中でも「これまで無かったのが不思議」とさえ思える機能、POSIX準拠のアクセス制御リスト(ACL)について紹介したい。

 具体的には、Linux 2.6カーネルにおけるACLを利用可能にするまでの手順(システム管理者向け)、ユーザーレベルにおけるACLの利用方法、およびACL設定を含めたファイルのバックアップおよびリストアの手順について解説していく。ACLの利用を考えているLinuxユーザーを読者として想定しているが、ACLはPOSIX準拠の機能であるため、ユーザーレベルの操作についてはFreeBSD 5.0以降や多くの商用UNIXでも同様に利用できるだろう。なお、記事の執筆にあたり、ディストリビューションはDebian GNU/Linux(sid)、カーネルはLinux debian 2.6.0-1-686を使用している。シェルでの作業の様子は、この環境で得られた出力を掲載している。

見 出 し 一 覧
1. POSIX ACLとは
2. ACL関連ツールを用意する
3. ext2/ext3でACLを利用する場合の注意
4. ファイルのACLを設定・解除するには
5. 「setfcal」コマンドの基本的な使い方の例
6. ACL活用例:Webサイトおよび関連ファイルをより安全にする
7. ACL設定は拡張属性として記録される
8. ACLを含めたファイルのバックアップおよびリストア
9. Samba経由でACLを確認・編集する
10. Linuxカーネル2.4のシステムでACLの恩恵を受けるには?

POSIX ACLとは

 POSIXで定義されているAccess Control Lists(ACL)とは、UNIXの標準的なファイル所有者/グループ/第三者によるパーミッション指定と比べ、柔軟なアクセス制御を可能とする仕組みだ。ACLを利用すると、従来のUNIX形式によるアクセス制御に加え、各ユーザーもしくはグループに対するアクセス権限を必要に応じて自由に設定できる。

 UNIXの世界では、ファイルのアクセス権限(パーミッション)はファイル所有者/グループ/第三者の3つに対する読み取り/書き込み/実行の許可をそれぞれ指定する仕組みになっている。ファイル所有者以外はグループもしくは第三者のどちらかに分類されるため、例外的にアクセスを許可したいユーザーを一定のグループに集め、アクセス可能ユーザーの範囲を制限するのが一般的な方法だ。しかし、この方法では、ユーザー単位でのアクセス制御が不可能なため、制限内容に応じて適切なグループを作る必要があり、管理にも手間がかかってしまう。この問題を解消するのがACLである。

 このACLは、サンのSolarisなど商用UNIX、マイクロソフトのWindows NT以降では標準で利用可能で、エンタープライズ分野では欠かせない機能の一つとなっている。Linuxにおいては、カーネル2.4系では標準でACLが実装されていなかったため、Linuxがエンタープライズ分野に向かない理由の一つとして挙げられることもあった。しかし、カーネル2.6においてパッチがカーネルツリーに取り込まれたことで、何も意識せずにACLの恩恵を受けられる時代がようやく到来しつつある。

 一人で一つのLinuxシステムを使い切っており、全く他ユーザーがいないような環境ではACLのありがたみは薄いかもしれない。しかし、複数のユーザーが同居するLinuxシステム上であればACLのメリットは十分にあるため、是非とも利用法を知っておこう。

ACL関連ツールを用意する

 早速、ACLの利用環境を整えよう。ACLサポート自体はLinuxカーネル(2.6以降)に含まれているが、シェル上からACLの操作を行うにはPOSIX ACL準拠の「setfacl」「getfacl」コマンドを使用する。Linux向けのこれらのコマンド群は「acl」(ACL File Utilities)パッケージに含まれている。また、依存パッケージ「libacl」も必要だ。これらがインストールされていない場合は「libacl」「acl」の順でインストールしよう。なお、Red Hat Linux 9ではOSインストールと一緒に導入されていた(但し、カーネルは2.4ベースでACL非対応のため別途更新する必要がある)。

 RPMベースのLinuxディストリビューションを利用している場合は、XFSプロジェクトFTPサーバもしくはミラーからダウンロードするか、もしくはRpmfind.Netで「acl」をキーワードに検索するとすぐに見つかるだろう(2004年2月現在、最新のパッケージはacl-2.2.22-1.i386.rpm)。パッケージを入手したら「rpm -i パッケージ名」などとしてインストールを行えばよい。なお、以降の実行例では必要に応じて「\」で折り返してあるので注意してほしい。

RPMを利用した「acl」パッケージのインストール例
# wget ftp://oss.sgi.com/projects/xfs/\
cmd_rpms/RPMS/i386/libacl-2.2.22-1.i386.rpm
# wget ftp://oss.sgi.com/projects/xfs/\
cmd_rpms/RPMS/i386/acl-2.2.22-1.i386.rpm
# rpm -U acl-2.2.22-1.i386.rpm \
libacl-2.2.22-1.i386.rpm

 Debian GNU/Linuxベースのディストリビューションの場合は、「apt-get」コマンドを使えばダウンロードおよびインストールが可能だ。

aptを利用した「acl」パッケージのインストール例
# apt-get update
# apt-get install acl

      | 1 2 3 4 5 | 次のページ

[長谷川 猛,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.