SETFACL(1)

名称
setfacl - ACL 情報の設定

書式
setfacl [-bdhkn] [-m entries] [-M file1] [-x entries] [-X file1] [file ...]

解説
setfacl ユーティリティは指定されたファイルに対し、 裁量的なアクセス制御情報を設定します。

次のオプションが使用可能です:

-b  必須の 3 エントリを除き、全 ACL エントリを削除します。 ACL が “mask” エントリを含む場合、最終的な ACL 中の “group” エントリのパーミッションは、現在の ACL における “group” と “mask” の両方を組み合わせたパーミッションになります。

-d  アクセス ACL の代りに、ディレクトリのデフォルト ACL に対し、 操作が適用されます。 現時点では、ディレクトリのみがデフォルト ACL を保持可能です。

-h  操作対象がシンボリックリンクの場合、 リンクを辿るのではなく、シンボリックリンク自身を操作します。

-k  指定されたファイルのデフォルト ACL エントリを削除します。 指定されたファイルがデフォルト ACL エントリを持たない場合でも、 エラーとはみなされません。 指定されたファイルがデフォルトエントリを持ち得ない場合 (すなわちディレクトリではない場合)、エラーが報告されます。

-m entries
    entries で指定される ACL エントリにて、 新規エントリの追加と既存のエントリの修正を行うことにより、 指定されたファイルの ACL エントリを修正します。

-M file
    file ファイル中で指定される ACL エントリにて、 新規エントリの追加と既存のエントリの修正を行うことにより、 指定されたファイルの ACL エントリを修正します。 file が - の場合、入力は標準入力から得られます。

-n  ACL mask エントリに関するパーミッションを再計算しません。

-x entries
    指定されたファイルのアクセス ACL またはデフォルト ACL から、 entries で指定される ACL エントリを削除します。

-X file
    指定されたファイルのアクセス ACL またはデフォルト ACL から、 file ファイル中で指定される ACL エントリを削除します。

上述のオプションは、コマンド行で指定された順番に評価されます。

ACL エントリ
ひとつの ACL エントリには、コロンで区切られた次の 3 個の欄があります。 それらは、ACL タグ、ACL 修飾子、裁量的なアクセスパーミッションであり、 次の意味です:

ACL タグ
    “user” または ‘u’ は、 ファイル所有者または指定されたユーザに許可されたアクセスを指定します。 “group” または ‘g’ は、ファイル所有グループまたは指定されたグループに 許可されたアクセスを指定します。 “other” または ‘o’ は、 いかなる user および group に適合しないプロセスに 許可されたアクセスを指定します。 “mask” または ‘m’ は、ファイル所有者 “user” ACL エントリおよび “other” ACL エントリ以外のすべての ACL エントリに対して許可される、 最大アクセスを指定します。

ACL 修飾子
    ACL 修飾子欄は、 ある ACL エントリのユーザまたはグループを記述します。 それは次のうちのどれかひとつです: UID かユーザ名、GID かグループ名、または空。 “user” ACL エントリに対しては、 空の欄はファイル所有者に対して許可されるアクセスを指定します。 “group” ACL エントリに対しては、 空の欄はファイル所有グループに対して許可されるアクセスを指定します。 “mask” および “other” の ACL エントリは、この欄を使用しません。

アクセスパーミッション
    アクセスパーミッション欄は アクセスパーミッション欄は、 次の文字のそれぞれを最大ひとつまで保持可能です: ‘r’, ‘w’, ‘x’ は、それぞれ、読み取り・書き込み・実行のパーミッションを設定します。 これらの文字を取り除いたり ‘-’ 文字で置き換えることで、アクセス無しを示せます。

“mask” ACL エントリは、デフォルトの “user”, “group”, “other” ACL エントリ以外では必須です。 -n オプションが指定されず、 “mask” ACL エントリが指定されない場合、 setfacl ユーティリティは、 最終的な ACL エントリ中のすべての “group” ACL エントリのパーミッションの和からなる “mask” ACL エントリを使用します。

ファイルシステムオブジェクトモードに作用するという 伝統的な POSIX インタフェースは、 POSIX.1e の拡張 ACL の登場によってセマンティクスが変更されました。 オブジェクトのアクセス ACL にマスクエントリが存在する場合、 マクスエントリはグループビットの代りに使用されます。 この動作は、 stat(1) や ls(1) といったプログラムで行われます。 マスクエントリを持つオブジェクトのモードが変更される場合、 グループビットに対する変更は、実際にはマスクエントリに対して適用されます。 これらのセマンティクスは、多くのアプリケーション互換性を提供します。 すなわち、 追加のユーザ・グループエントリに与えられる実効権限は制限され、 ACL の代りにモードを変更しようとするアプリケーションには 保守的な動作に見えます。 この動作は、 chmod(1) といったプログラムで行われます。

-M または -X のオプションを使用してファイルから適用される ACL エントリは、 次の形式です: 前述のように 1 ACL エントリあたり 1 行、 空白は無視、 ‘#’ の後のテキストは無視 (コメント)。

ACL エントリが評価されるとき、 アクセスチェックアルゴリズムは次の順番で ACL エントリをチェックします: ファイル所有者、 “user” ACL エントリ、ファイル所有グループ、 “group” ACL エントリ、 “other” ACL エントリ。

コマンド行上で複数の ACL エントリを指定するには、コンマで区切ります。

診断

使用例
    setfacl -m u::rwx,g:mail:rw file

file に対し、 file 所有者の ACL エントリに 読み取りと書き込みと実行のパーミッションを設定し、 mail グループに読み取りと書き込みのパーミッションを設定します。

    setfacl -M file1 file2

file1 中の ACL エントリの設定/更新を file2 に適用します。

    setfacl -x g:mail:rw file

読み書きパーミッションを持つ mail グループの ACL エントリを、 file から削除します。

    setfacl -bn file

必須の 3 個のエントリを除くすべての “access” ACL エントリを、 file から削除します。

    getfacl file1 | setfacl -b -n -M - file2

ACL エントリを、 file1 から file2 へコピーします。

関連項目
getfacl(1), acl(3), getextattr(8), setextattr(8), acl(9), extattr(9)

規格
setfacl ユーティリティは IEEE Std 1003.2c に従っていることが期待されます。

歴史
拡張属性およびアクセス制御リストのサポートは、 TrustedBSD Project の一部として開発され、 FreeBSD 5.0 で導入されました。

作者
setfacl ユーティリティは Chris D. Faulhaber <jedgar@fxp.org> が書きました。