アクセス制御リスト (ACL) は、標準的な UNIX® のパーミッションモデルを、 POSIX®.1e に互換する方法で拡張しています。 これにより、管理者がより洗練されたセキュリティモデルを利用し、 その恩恵を受けられるようになります。
FreeBSD の GENERIC
カーネルは、
UFS ファイルシステム用の
ACL サポートを提供します。
カスタムカーネルをコンパイルして使用するユーザは、
カスタムカーネルのコンフィグレーションファイルに以下を追加してください。
options UFS_ACL
もしこのオプションが組み込まれていなければ、ACL に対応したファイルシステムをマウントしようとすると、 警告が表示されます。ACL は、ファイルシステムの拡張属性が有効になっていることに依存しています。 拡張属性は、UFS2 でネイティブ対応されています。
UFS1 に拡張属性を付すように設定するのは、 UFS2 よりも高いレベルの管理オーバヘッドが必要になります。 また、UFS2 における拡張属性のパフォーマンスも大きく上がっています。 そのため、アクセス制御リストを利用する上では UFS2 を使うことが推奨されます。
ACL は、マウント時の管理フラグ
acls
で有効にされます。
これは /etc/fstab
に記述できます。
マウント時のフラグは、tunefs(8)
を使って、ファイルシステムヘッダのスーパブロックにある
ACL フラグを変更するという方法で、
常に自動で設定されるようになります。一般的には、
下記の理由からスーパブロックフラグを使う方がよいでしょう。
マウント時に指定した ACL フラグは
mount -u
による再マウントでは変更できません。
完全に umount(8) した上で、新たに mount(8)
するしかありません。これは、起動後にルートファイルシステムで
ACL を有効にできないことを意味します。
また、ファイルシステムを利用し始めた後では、
その配列を変えられないことも意味しています。
スーパブロックフラグを設定すると、fstab
に記述されていなかったり、デバイスの順番が変わってしまっても、常に
ACL が有効な状態でマウントされます。
こうすることで、ファイルシステムを ACL
を有効にしないままマウントしてしまい、ACL
が正しくないかたちで強制されるセキュリティの問題を防ぎます。
予期せず ACL を有効にしないでマウントしてしまうことを防ぐことが望まれます。 ACL を有効にし、その後無効にしてから、 拡張属性を取り消さないでまた有効にしてしまうと、 大変な状況になってしまいます。 一般的には、一度ファイルシステムで ACL を有効にしたら、無効にすべきではありません。そうしてしまうと、 ファイル保護がシステムのユーザの意図と齟齬をきたす可能性があるばかりか、 ACL を再度有効にすると、 それまでパーミッションが変更されてきたファイルに古い ACL を割り当ててしまい、 予想しない動作につながることも考えられます。
ACL を有効にしたファイルシステムは、
パーミッション設定の表示に +
(プラス)
記号がつきます。例えば、次のようになります。
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
のすべてで ACL が働いています。
一方 public_html
は対象外です。
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
ファイルまたはファイルシステムから、
現在設定されている ACL
をすべて取り除くには、-k
を使ってください。
しかしながら、より好ましい方法は、
-b
を使う方法です。
このオプションを使うと、ACL
が動作するのに必要な基本のフィールドは残ります。
%
setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
この例では、-m
は、デフォルト ACL
エントリを修正するために使われています。
先ほどのコマンドで設定は削除されたため、
定義されたエントリはありません。
このコマンドは、デフォルトオプションに戻し、
指定したオプションを割り当てます。
システムに存在しないユーザまたはグループを追加すると、
Invalid argument
エラーが出力されてしまいます。
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。