名前
setfacl -
ファイルのアクセス制御リスト
(access control list) を設定する
書式
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file]
file ...
setfacl --restore=file
説明
このユーティリティはファイルとディレクトリの
アクセス制御リスト
(Access Control List, ACL) を設定する。
コマンドラインでは、一連のコマンドの後にファイル群を指定する
(さらに別の一連のコマンド、ファイル群、...
を続けて指定することができる)。
オプション -m と
-x は ACL
がコマンドラインで指定されることを想定している。
複数の ACL
エントリはコンマ文字
(`,') で区切られる。
オプション -M と -X
は ACL
をファイルまたは標準入力から読み込む。
ACL
エントリの書式は、「ACL
エントリ」のセクションで説明されている。
--set と --set-file
オプションはファイルとディレクトリの
ACL を設定する。
以前の ACL
は置き換えられる。
この操作で指定される
ACL エントリは、 許可
(permission)
を含まなければならない。
-m (--modify) と -M (--modify-file)
オプションはファイルとディレクトリの
ACL を変更する。
この操作で指定される
ACL
エントリは、許可を含まなければならない。
-x (--remove) と -X (--remove-file)
オプションは ACL
エントリを削除する。存在しないエントリの削除を行ってもエラーにはならない。
POSIXLY_CORRECT
が定義されていない場合は、
perms
フィールドを持たない
ACL
エントリだけが引き数として指定できる。
-M と -X
オプションで (ACL を)
ファイルから読み込む場合、
setfacl は getfacl
が生成した出力を受け付ける。
1 行には最大で 1 つの ACL
エントリがある。
シャープ記号 (`#')
の後から行末まではコメントとして扱われる。
ACL
をサポートしないファイルシステム上で
setfacl を使用した場合、
setfacl
はファイルモード許可ビットを操作する。
ACL
が許可ビットと完全には合わない場合、
setfacl
はファイルモード許可ビットを
ACL
に可能な限り近づけるように変更し、
標準エラー出力にエラーメッセージを書き出して、0
より大きい終了状態で返る。
許可
ケーパビリティ
(capability) CAP_FOWNER
を持つファイル所有者とプロセスは、
ファイルの ACL
を変更する権限が付与されている。
これはファイルモードにアクセスするのに必要な許可と類似している
(現在の Linux
システムでは、CAP_FOWNER
ケーパビリティを持つユーザは
root のみである)。
オプション
- -b, --remove-all
- 全ての拡張 ACL
エントリを削除する。
所有者・グループ・その他という基本
(base) ACL
エントリは保存される。
- -k,
--remove-default
- デフォルト ACL
を削除する。
デフォルト ACL
が存在しない場合、警告は出されない。
- -n, --no-mask
- 実効権 (effective right)
マスクを再計算しない。
setfacl
のデフォルト動作では、ACL
マスクエントリが明示的に指定されない限り、
ACL
マスクエントリを再計算する。
マスクエントリは所有グループ・指名ユーザ
(named
user)・指名グループの
エントリの全ての許可を結合したものに設定される
(マスクエントリに影響を受けるエントリは、正にこれらである)。
- --mask
- ACL
マスクエントリが明示的に指定されている場合でも、実効権マスクを再計算する
(-n
オプションを参照)。
- -d, --default
- 全ての操作をデフォルト
ACL に適用する。
入力セットに含まれる通常の
ACL エントリを
デフォルト ACL
エントリに昇格させる。
入力セットに含まれるデフォルト
ACL
エントリは破棄される
(これが起こった場合は警告を出す)。
- --restore=file
- `getfacl -R'
またはそれと同様なもので作成された
許可のバックアップで復旧する。
ディレクトリサブツリーの全ての許可が、この方法で復旧される。
入力に所有者コメントまたはグループコメントが含まれている場合、
setfacl
はファイルの所有者と所有グループを復旧しようとする。入力に
(setuid, setgid, sticky
ビットを定義する)
フラグコメントが含まれている場合、入力に従ってこれらのビットを設定する。指定されなかった場合はこれらのビットをクリアする。この操作は
`--test'
以外のオプションと併用できない。
- --test
- テストモード。
ファイルの ACL
を変更する代わりに、結果の
ACL
の一覧を表示する。
- -R, --recursive
- 全てのファイルとディレクトリに対して再帰的に操作を適用する。
このオプションは
`--restore'
と併用できない。
- -L, --logical
- 論理的に辿り、ディレクトリへのシンボリックリンクを辿る。
デフォルトの動作では、シンボリックリンク引き数を辿り、
サブディレクトリで見つかったシンボリックリンクはスキップする。
-R
と一緒に使用した場合にのみ効果を持つ。
このオプションは
`--restore'
と併用できない。
- -P, --physical
- 物理的に辿り、ディレクトリへのシンボリックリンクをスキップする。
シンボリックリンク引き数もスキップする。
-R
と一緒に使用した場合にのみ効果を持つ。このオプションは
`--restore'
と併用できない。
- -v, --version
- setfacl
のバージョンを表示し、終了する。
- -h, --help
- コマンドラインオプションを説明するヘルプを表示する。
- --
- コマンドラインオプションの終わり。
残りの引き数は、たとえダッシュ文字で始まっていたとしても、
ファイル名として解釈される。
- -
- ファイル名引き数が 1
つのダッシュ文字である場合、
setfacl
は標準入力からファイルのリストを読み込む。
setfacl
ユーティリティは以下の
ACL
エントリ書式を認識する
(分かりやすいように空白を挿入してある):
- [d[efault]:] [u[ser]:]uid [:perms]
- 指名ユーザの許可。
uid
が空の場合は、ファイル所有者の許可。
- [d[efault]:] g[roup]:gid [:perms]
- 指名グループの許可。
gid
が空の場合は、所有者グループの許可。
- [d[efault]:] m[ask][:] [:perms]
- 実効権マスク。
- [d[efault]:] o[ther][:] [:perms]
- その他の許可。
区切り文字と区切り文字以外の間の空白は無視される。
許可を含む正式な
ACL
エントリは、修正と設定の操作
(オプション -m, -M,
--set, --set-file)
で使用される。 perms
フィールドのないエントリは、エントリの削除
(オプション -x と -X)
で使用される。
uid と gid
には名前と数値のどちらも指定できる。
perms
フィールド許可を表す文字の組み合わせである。
読み込み (r),
書き込み (w), 実行 (x)
は、ファイルがディレクトリであるか何れかのユーザの実行許可
(X)
が既にある場合にのみ実行される。
文字の組合わせの代わりに、
perms フィールドを 8
進数 (0-7)
にすることもできる。
自動的に作成されるエントリ
初期状態では、ファイルとディレクトリは所有者・グループ・その他という
3 つの基本 ACL
エントリを持つ。 ACL
が有効であるためには満たさなければならない、いくつかのルールがある。
- 3
つの基本エントリは削除できない。
これらの基本エントリ型のそれぞれに対して、
必ず 1
つのエントリがなければならない。
- ACL
が指名ユーザエントリまたは指名グループオブジェクトを持つ場合、
実効権マスクも持たなければならない。
- ACL がデフォルト ACL
エントリを持つ場合、
3 つのデフォルト ACL
基本エントリ
(デフォルト所有者・
デフォルトグループ・デフォルトのその他)
が存在しなければならない。
- デフォルト ACL
が指名ユーザエントリまたは指名グループオブジェクトを持つ場合、
デフォルト実効権マスクも持たなければならない。
ユーザがこれらのルールを確実に守るための助けとして、
setfacl
は以下の条件で既存のエントリからエントリを作成する:
- ACL
が指名ユーザまたは指名グループのエントリを持ち、
かつマスクエントリが存在しない場合、
グループエントリと同じ許可を持つマスクエントリが作成される。
-n
オプションが指定されない限り、マスクエントリの許可は、
そのマスクエントリの影響を受ける全ての許可を合わせたもの含めるように、
更に調整される (-n
オプションの説明を参照すること)。
- デフォルト ACL
エントリが作成され、
かつデフォルト ACL
が所有者・所有グループ・その他のエントリを持たない場合、
ACL
所有者・所有グループ・その他のエントリのコピーが
デフォルト ACL
に追加される。
- デフォルト ACL
が指名ユーザまたは指名グループのエントリを持ち、
かつマスクエントリが存在する場合、
デフォルト ACL
のグループエントリと同じ許可を持つマスクエントリが追加される。
-n
オプションが指定されない限り、マスクエントリの許可は、
そのマスクエントリの影響を受ける全ての許可を合わせたもの含めるように、
更に調整される (-n
オプションの説明を参照すること)。
例
追加のユーザの読み込みアクセスを許可する。
setfacl -m u:lisa:r file
全てのグループと全ての指名ユーザの書き込みアクセスを
(実効権マスクを使って)
取り消す。
setfacl -m m::rx file
ファイルの ACL
から指名グループエントリを削除する。
setfacl -x g:staff file
あるファイルの ACL
を他にコピーする。
getfacl file1 | setfacl --set-file=- file2
アクセス ACL
をデフォルト ACL
にコピーする。
getfacl --access dir | setfacl -d -M- dir
環境変数 POSIXLY_CORRECT
が定義されている場合、
getfacl
のデフォルトの動作は、以下のように変わる。
標準に準拠しない全てのオプションは無効にされる。
“default:”
プレフィックスは無効にされる。
-x と -X
オプションは許可フィールドを受け付ける
(しかし、無視する)。
著者
Andreas Gruenbacher, <a.gruenbacher@bestbits.at>.
バグ報告・提案したい機能・意見は上記のアドレスに送ってほしい。
関連項目
getfacl(1), chmod(1), umask(1),
acl(5)