40.3. setfacl / getfacl のコマンド書式

40.3.1. setfacl

Access Control List の設定は setfacl コマンドで行います。書式は以下の通りです。

setcacl [options] ACL path

ファイルやディレクトリに対する ACL の設定は、ACL に指定します。複数指定する場合は ,(カンマ)で区切ります。path には設定対象のファイルやディレクトリパスを指定します。指定可能な主な options は以下の通りです。

表 40-1. setfacl コマンドの options

-bすべての拡張 ACL 指定を削除します。
-kデフォルト ACL 指定を削除します。
-nmask 値(所有者以外に許可する最大のパーミッション値)以上のパーミッションが設定されたとき有効にしません。デフォルトの指定です。
--maskmask 値(所有者以外に許可する最大のパーミッション値)以上のパーミッションが設定されたとき有効にします。
-dデフォルト ACL 指定を適用します。
-Rディレクトリ以下の全ファイル、ディレクトリに対して設定を有効にします。

ACL の指定は以下の通りです。

表 40-2. setfacl コマンドの ACL

-m acl_specACL の設定を acl_spec に変更します。
-x acl_specACL の設定 acl_spec を削除します。
-M acl_fileACL の設定を acl_file ファイルから読み込み変更します。
-x acl_fileACL の設定を acl_file ファイルから読み込み削除します。

acl_spec は以下のように指定します。各項目は、:(コロン)で区切り、指定します。1 つめの項目である、user、group、mask、other はそれぞれ、u、g、m、o と省略することができます。3 つ目の項目には、アクセス権限を r(読み出し)、w(書き込み)、x(実行・アクセス)で指定します。許可しないアクセスには、-(ハイフン)を指定します。

表 40-3. setfacl コマンドの acl_spec

user::rw-所有者に対する指定です。2 つ目の項目を省略したときは、そのファイルやディレクトリの所有者になります。所有者以外のユーザーを指定する場合は、2 つ目の項目にユーザー名を指定します。この例では、読み込みと書き込みの権限を付与しています。
group::rw-グループに対する指定です。2 つ目の項目を省略したときは、そのファイルやディレクトリの所有グループになります。所有グループ以外のグループを指定する場合は、2 つ目の項目にグループ名を指定します。この例は、読み込みと書き込みの権限を付与しています。
mask::r--mask 値の指定です。mask 値とは、所有者以外に許可する最大のパーミッションの値です。この例では、他のユーザーに対して読み込み以上の権限は付与されません。
other::r--その他のユーザーに対する指定です。この例では、読み込みの権限を付与しています。

以下の例では、/project/info ディレクトリの所有者を taro とし、rwx の権限を taro に付与しています。

# mkdir /project/info
# chown taro:taro /project/info
# setfacl -m user::rwx /project/info/

ACL の設定を行ったファイルやディレクトリを ls -l コマンドで表示すると、以下のようにアクセス権限の最後に + が表示されます。

# ls -l /project/info
drwxr-xr-x+ 2 taro taro 4096  Sep 27 19:50 /project/info/

/project/info ディレクトリの所有者 taro の ACL 設定を削除します。

# setfacl -x user:: /project/info/

40.3.2. getfacl

Access Control List の設定を確認するには、getfscl コマンドを使用します。書式は以下の通りです。

getcacl [options] path

path には対象のファイルやディレクトリのパスを指定します。主な options は以下の通りです。

表 40-4. getfacl コマンドの options

-dデフォルトの ACL のみ表示します。
-Rディレクトリ以下の全てのファイルとディレクトリの ACL を表示します。

例えば、以下のように getfacl コマンドを実行して /project/info の ACL を確認します。

# getfacl /project/info
# file: project/info
# owner: taro
# group: taro
user::rwx
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:p-member:rwx
default:group:p-guest:r-x
default:mask::rwx
default:other::r-x

1 行目には対象のパス、2 〜 3 行目には所有者、所有グループ、4 行目の user::rwx から 7 行目の other::r-x までは、所有者、所有グループ、mask 値、その他のユーザーの ACL 指定が表示されます。また、8 行目以降の default 行には、ACL のデフォルト設定が表示されます。default:group:p-member:rwx は、p-member グループに rwx 権限が付与されており、default:group:p-guest:r-x は、p-guest グループに r-x 権限が付与されていることを表しています。ACL のデフォルト設定については、項40.2.3 を参照してください。

getfacl コマンドの出力結果をファイルにリダイレクトして設定を保存することが可能です。保存したファイルを、setfacl -M acl_file や setfacl -X acl_fileacl_file に指定することで、設定の変更や削除を行うことができます。

# getfacl /project/info > acl_file
# setfacl -M acl_file /project/info
# setfacl -X acl_file /project/info