EN JA
SETFACL(1)
SETFACL(1) FreeBSD General Commands Manual SETFACL(1)

名称

setfaclACL 情報の設定

書式

setfacl [ -bdhkn][ -a position entries][ -m entries][ -M file][ -x entries | position][ -X file][ file ...]

解説

setfacl ユーティリティは、指定された (複数の) ファイルの任意に決定できるアクセス制御情報を設定します。ファイルが指定されないか、またはリストが‘ -’のみから成るなら、ファイル名は、標準入力から取られます。

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

-a position entries
0 から数えて位置 position で始まる entries で指定された新しい ACL エントリを挿入することによって指定されたファイルで ACL を変更します。このオプションは、NFSv4 ACL だけに適用できます。
-b
3 つの必要なエントリ (POSIX.1e ACL) または 6 つの "canonical"エントリ (NFSv4 ACL) を除いてすべての ACL エントリを削除します。 POSIX.1e ACL が“ mask”エントリを含んでいるなら、結果の ACL 中の“ group”エントリのパーミッションは、現在の ACL の“ group”と“ mask”エントリの両方に関連しているパーミッションに設定されます。
-d
ACL エントリにアクセスする代りにデフォルトの ACL に適用される操作。現在、ディレクトリだけに、デフォルト ACL があります。このオプションは、NFSv4 ACL に適用できません。
-h
操作のターゲットがシンボリックリンクであるなら、リンクをたどるのではなく、シンボリックリンク自体で操作を実行します。
-k
指定されたファイルのあらゆるデフォルトの ACL エントリを削除します。指定されたファイルに、あらゆるデフォルトの ACL エントリがないなら、エラーと見なされません。指定されたファイルのいずれもデフォルトのエントリ (すなわち、ディレクトリでない) を持つことができないなら、エラーが報告されます。このオプションは、NFSv4 ACL に適用可能ではありません。
-m entries
指定されたファイルの ACL を修正します。新しいエントリが追加され、既存のエントリは、 entries 引数によって修正されます。 NFSv4 ACL について、 -a-x オプションを代わりに使用することを推奨します。
-M file
ファイル file で指定された ACL エントリで、新しい ACL エントリを追加し、既存の ACL エントリを修正することによって指定されたファイルで ACL エントリを修正します。ファイルが - であるなら、入力は、stdin (標準入力) から取られます。
-n
ACL マスクエントリに関連しているパーミッションを再計算しません。このオプションは、NFSv4 ACL に適用できません。
-x entries | position
entries が指定されるなら、アクセスから指定された ACL エントリまたは指定されたファイルのデフォルトの ACL を削除します。そうでなければ、0 から数えて、インデックス position のエントリを削除します。
-X file
指定されたファイルのアクセス ACL またはデフォルト ACL から、 file ファイル中で指定される ACL エントリを削除します。

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

POSIX.1e ACL エントリ

ひとつの POSIX.1E 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 行、空白は、無視、‘ #’の後のテキストは、無視 (コメント)。

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

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

ファイルとディレクトリが、それらの親ディレクトリから ACL エントリを引き継ぐことは、可能です。これは、デフォルトの ACL の使用で達成されます。利用者がデフォルトの ACL を指定できる前に、ユーザ、グループ、その他とマスクのための強制的な ACL エントリが設定されなければならないことに注意するべきです。より詳しい情報については、下記の例を参照してください。 -d を使用することによって、デフォルトの ACL を作成することができます。

NFSv4 ACL エントリ

NFSv4 ACL エントリは、4 または 5 つのコロンで区切られたフィールドを含んでいます: ACL タグ、ACL 修飾子 (“ user”と“ group”タグのためのみ)、任意のアクセスパーミッション、ACL 継承フラグと ACL タイプ:
ACL タグ
ACL タグは、ACL エントリタイプを指定して、次の 1 つから成ります: “ user”または‘ u’は、指定されたユーザへの承認されたアクセスを指定します。“ group”または‘ g’は、指定されたグループへの承認されたアクセスを示します。“ owner@”は、ファイルの所有者への承認されたアクセスを示します。“ group@”は、ファイルを所有しているグループへのの承認されたアクセスを示します。“ everyone@”は、すべての人を示します。“ everyone@”は、伝統的な Unix の“ other” (ファイル所有者と所有するグループを含むまさにすべての人を意味します) と同じでないことに注意してください。
ACL 修飾子
ACL 修飾子フィールドは、ACL エントリに関連しているユーザまたはグループを説明しています。それは、次の 1 つから成ります: uid またはユーザ名、または gid またはグループ名。タグタイプが“ owner@”, “ group@”または“ everyone@”の 1 つである、エントリにおいて、このフィールドは、後続するコンマを含んで、すべて除外されます。
アクセスパーミッション
アクセスパーミッションは、短い形式または長い形式で指定されます。短い形式と長い形式は、混合されません。長い形式のパーミッションは、‘ /’文字によって区切られます。短い形式では、それらは、一緒に連結されます。有効なパーミッションは、次の通りです:
短い形式
長い形式
r
read_data
w
write_data
x
execute
p
append_data
D
delete_child
d
delete
a
read_attributes
A
write_attributes
R
read_xattr
W
write_xattr
c
read_acl
C
write_acl
o
write_owner
s
synchronize

さらに、次のパーミッションのセットが使用されます:

Set
パーミッション
full_set
上記に示されている、すべてのパーミッション
modify_set
write_acl と write_owner を除く、すべてのパーミッション
read_set
read_data、read_attributes、read_xattr と read_acl
write_set
write_data、append_data、write_attributes と write_xattr
ACL 継承フラグ
継承フラグは、短い形式または長い形式で指定されます。短い形式と長い形式は、混合されません。長い形式のアクセスフラグは、‘ /’文字によって区切られます。短い形式では、それらは、一緒に連結されます。有効な継承フラグは、次の通りです:
短い形式
長い形式
f
file_inherit
d
dir_inherit
i
inherit_only
n
no_propagate

継承フラグは、ディレクトリでのみ設定されます。

ACL タイプ
ACL タイプフィールドは、“ allow”または“ deny”のいずれかです。

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

NFSv4 ACL エントリは、それらの目に見える順序で評価されます。

コマンドラインで指定された複数の ACL エントリは、コンマによって区切られます。

ファイル所有者は、たとえ ACL が拒否しても、常に read_acl、write_acl、read_attributes と write_attributes パーミッションを付与されることに注意してください。

終了ステータス

The setfacl utility exits 0 on success, and >0 if an error occurs.

使用例

setfacl -d -m u::rwx,g::rx,o::rx,mask::rwx dir
setfacl -d -m g:admins:rwx dir

最初のコマンドは、デフォルトの POSIX.1e ACL の強制的な要素を設定します。 2 番目のコマンドは、グループ admins のユーザが、"dir"とい名前のディレクトリのために読み込み、書き込みと実行パーミッションを持つことができることを指定します。 "dir"の下で作成された任意のファイルまたはディレクトリは、作成時に、これらのデフォルトの ACL を引き継ぐことに注意するべきです。

setfacl -m u::rwx,g:mail:rw file

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

setfacl -m owner@:rwxp::allow,g:mail:rwp::allow file

NFSv4 ACL を除いて、上記の例と意味的に同じです。

setfacl -M file1 file2

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

setfacl -x g:mail:rw file

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

setfacl -x0 file

file の NFSv4 ACL から最初のエントリを削除します。

setfacl -bn file

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

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

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

規格

setfacl ユーティリティは、 IEEE Std 1003.2c に準拠するはずです。

歴史

拡張された属性 (Extended Attribute) とアクセス制御リスト (Access Control List) のサポートは、 TrustedBSD Project の一貫として開発され、 FreeBSD 5.0 で導入されました。 NFSv4 ACL のサポートは、 FreeBSD 8.1 で導入されました。

作者

setfacl ユーティリティは、 Chris D. Faulhaber <jedgar@fxp.org>によって書かれました。 NFSv4 ACL サポートは、 Edward Tomasz Napierala <trasz@FreeBSD.org>によって実装されました。
April 1, 2013 FreeBSD