スナップショットのようなファイルシステムの拡張と連携して、 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) -u
) 時に変更できません。完全に umount(8)
した上で、新たに mount(8)
するしかありません。これは、起動後にルートファイルシステムで ACLs を有効にできないことを意味します。
また、ファイルシステムを利用し始めた後では、
その配列を変えられないことも意味しています。
スーパブロックフラグを設定すると、fstab に記述されていなかったり、デバイスの順番が変わってしまっても、常に ACLs が有効な状態でマウントされます。 こうすることで、ファイルシステムを ACLs を有効にしないままマウントしてしまい、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 は対象外です。
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で)
連絡してください。
本文書に関する質問については、<doc@FreeBSD.org> まで電子メールを (英語で)
送ってください。