14.12. ファイルシステムアクセス制御リスト

寄稿: Rhodes Tom [FAMILY Given].

スナップショットのようなファイルシステムの拡張と連携して、 FreeBSD 5.0 以降ではファイルシステムアクセス制御リスト (ACLs) によるセキュリティを提供しています。

アクセス制御リストは、標準的な UNIX® のパーミッションモデルを、 非常に互換性の高い (POSIX®.1e) やり方で拡張しています。 この機能は、管理者がより洗練されたセキュリティモデルを利用し、 その恩恵を受けられるようにします。

UFS ファイルシステム用の ACL サポートを有効にするには、 次のオプションをカーネルに組み込まなければなりません。

options UFS_ACL

もしこのオプションが組み込まれていなければ、ACLs に対応したファイルシステムをマウントしようとすると、 警告が表示されます。このオプションは GENERIC カーネルに含まれています。ACLs は、ファイルシステムの拡張属性が有効になっていることに依存しています。 拡張属性は、次世代 UNIX® ファイルシステムである UFS2 でネイティブ対応されています。

注記:

UFS1 に拡張属性を付すように設定するのは、 UFS2 よりも高いレベルの管理オーバヘッドが必要になります。 また、UFS2 における拡張属性のパフォーマンスも大きく上がっています。 その結果、アクセス制御リストを利用する上では、一般的には UFS1 よりも UFS2 の方がおすすめです。

ACLs は、マウント時の管理フラグ acls で有効にされます。 これは /etc/fstab に記述できます。 マウント時のフラグは、tunefs(8) を使って、ファイルシステムヘッダのスーパブロックにある ACLs フラグを変更するという方法で、 常に自動で設定されるようになります。一般的には、 下記の理由からスーパブロックフラグを使う方がよいでしょう。

注記:

ACLs の動作を変更して、まったく新たに mount(8) を行わなくてもフラグを有効にできるようにすることも可能でしょう。 しかし、我々は、うっかり ACLs を有効にしないでマウントしてしまうのを防ぐようにした方が望ましいと考えました。 ACLs を有効にし、その後無効にしてから、 拡張属性を取り消さないでまた有効にしてしまうと、 鬱陶しい状態に自分で入り込んでしまえるからです。 一般的には、一度ファイルシステムで ACLs を有効にしたら、無効にすべきではありません。そうしてしまうと、 ファイル保護がシステムのユーザの意図と齟齬をきたす可能性があるばかりか、 ACLs を再度有効にすると、 それまでパーミッションが変更されてきたファイルに古い ACLs を割り当ててしまい、 予想しない動作につながることも考えられます。

ACLs を有効にしたファイルシステムは、 パーミッション設定の表示に + (プラス) 記号がつきます。例えば、次のようになります。

drwx------  2 robert  robert  512 Dec 27 11:54 private
drwxrwx---+ 2 robert  robert  512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert  robert  512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert  robert  512 Dec 27 11:57 directory3
drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html

ここでは、ディレクトリ directory1, directory2 および directory3 のすべてで ACLs が働いています。 ディレクトリ public_html は対象外です。

14.12.1. ACL を利用する

getfacl(1) ユーティリティは、 ファイルシステムの ACL を表示します。 たとえば、test ファイルの ACL 設定を表示するには、 以下のコマンドを実行してください。

% getfacl test
	#file:test
	#owner:1001
	#group:1001
	user::rw-
	group::r--
	other::r--

このファイルの ACL 設定を変更するには、 以下のように setfacl(1) ユーティリティを使用してください。

% setfacl -k test

-k フラグは、 ファイルまたはファイルシステムから、現在設定されている ACL をすべて取り除きます。 より好ましい方法は、 -b を使う方法です。 このオプションを使うと、ACL が動作するのに必要な基本のフィールドは残ります。

% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test

上記のコマンドにおいて、-m オプションは、デフォルト ACL エントリを修正するために使われています。 先ほどのコマンドで設定は削除されたため、 定義されたエントリはありません。 このコマンドは、デフォルトオプションに戻し、 指定したオプションを割り当てます。 システムに存在しないユーザまたはグループを追加すると、 Invalid argument エラーが stdout に出力されることに気を付けてください。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。