14.9. ファイルシステムアクセス制御リスト (ACL)
戻る〓 | 第14章 セキュリティ | 〓次へ

## 14.9. ファイルシステムアクセス制御リスト (ACL)

寄稿: Rhodes Tom [FAMILY Given].

アクセス制御リスト (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` は対象外です。

### 14.9.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

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

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

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

戻る〓 | 上に戻る | 〓次へ
14.8. OpenSSH〓 | ホーム | 〓14.10. サードパーティ製ソフトウェアのセキュリティ問題を監視する

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

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