Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

setfacl(1)

名前

setfacl - 1 つまたは複数のファイルのアクセス制御リスト (ACL) の変更

形式

setfacl [-r] -s acl_entries file
setfacl [-r] -md acl_entries file
setfacl [-r] -f acl_file file

説明

指定された各ファイルについて、setfacl は ACL 全体 (ディレクトリ上のデフォルトの ACL を含む) を置き換えるか、あるいは 1 つ以上の ACL エントリ (ディレクトリ上のデフォルトのエントリを含む) を追加、変更、または削除するかのどちらかを行ないます。

setfacl コマンドが使用されると、ファイルのアクセス権ビットが変更される場合があります。ファイル所有者のユーザー ACL エントリが変更された場合は、ファイル所有者クラスのアクセス権ビットが変更されます。ファイルグループクラスのグループ ACL エントリが変更された場合は、ファイルグループクラスのアクセス権ビットが変更されます。その他の ACL エントリが変更された場合は、ファイルのほかのクラスのアクセス権ビットが変更されます。

chmod(1) コマンドを使用して ACL エントリを含むファイルに対するファイルグループ所有者のアクセス権を変更した場合は、ファイルグループ所有者のアクセス権と ACL マスクの両方が新しいアクセス権に変更されます。新しい ACL マスクのアクセス権は、そのファイル上に ACL エントリを持つ追加ユーザーおよびグループの実効アクセス権を変更する場合があるので注意が必要です。

ディレクトリには、デフォルトの ACL エントリを含めることができます。デフォルトの ACL エントリを含むディレクトリ内にファイルまたはディレクトリが作成された場合、新しく作成されたファイルには、デフォルトの ACL エントリと、作成時に要求されたアクセス権の共通部分に従って生成されたアクセス権が与えられます。ディレクトリにデフォルトの ACL エントリが含まれている場合、umask(1) は適用されません。特定のユーザー (または複数のユーザー) に対してデフォルトの ACL が指定されている場合、ファイルには、作成された通常の ACL が与えられます。それ以外の場合は、上で説明した共通部分に従ってモードビットのみが初期化されます。デフォルトの ACL を、付与できる最大の随意アクセス権と考えてください。

POSIX ドラフト ACL (または aclent_t スタイルの ACL) をサポートする UFS ファイルシステム内のファイルに ACL を設定するには、setfacl コマンドを使用します。NFSv4 スタイルの ACL (または ace_t スタイルの ACL) をサポートする ZFS ファイルシステム内のファイルに ACL を設定するには、chmod コマンドを使用します。

acl_entries の構文

–m オプションと –s オプションの場合、acl_entries は、コンマで区切られた 1 つ以上の ACL エントリです。

ACL エントリは、コロンで区切られた次のフィールドで構成されます。

entry_type

ファイルアクセス権を設定する ACL エントリのタイプ。たとえば、entry_type には、user (ファイルの所有者) または mask (ACL マスク) を指定できます。

uid または gid

ユーザー名またはユーザー ID 番号。または、グループ名またはグループ ID 番号。

perms

entry_type に設定されているアクセス権を表します。perms は、シンボル文字 rwx または番号 (chmod コマンドで使用されるのと同じアクセス権の番号) で示すことができます。

次の表は、有効な ACL エントリを示しています (デフォルトのエントリは、ディレクトリに対してのみ指定できます)。

ACL Entry
説明
u[ser]::perms
ファイル所有者のアクセス権。
g[roup]::perms
ファイルのグループ所有者のアクセス権。
o[ther]:perms
ファイル所有者またはファイルグループ所有者のメンバー以外のユーザーのアクセス権。
m[ask]:perms
ACL マスク。マスクエントリは、ユーザー (所有者以外) とグループに許可される最大のアクセス権を示します。マスクは、すべてのユーザーおよびグループに対するアクセス権をすばやく変更するための方法です。
u[ser]:uid:perms
特定のユーザーのアクセス権。uid には、ユーザー名または数値 UID のどちらかを指定できます。
g[roup]:gid:perms
特定のグループのアクセス権。gid には、グループ名または数値 GID のどちらかを指定できます。
d[efault]:u[ser]::perms
所有者のデフォルトアクセス権。
d[efault]:g[roup]::perms
ファイルのグループ所有者のデフォルトアクセス権。
d[efault]:o[ther]:perms
ファイル所有者またはファイルグループ所有者のメンバー以外のユーザーのデフォルトのアクセス権。
d[efault]:m[ask]:perms
デフォルトの ACL マスク。
d[efault]:u[ser]:uid:perms
特定のユーザーのデフォルトアクセス権。uid には、ユーザー名または数値 UID のどちらかを指定できます。
d[efault]:g[roup]:gid:perms
特定のグループのデフォルトアクセス権。gid には、グループ名または数値 GID のどちらかを指定できます。

–d オプションの場合、acl_entries は、アクセス権のない、コンマで区切られた 1 つ以上の ACL エントリです。ファイル所有者、ファイルグループ所有者、ACL マスク、およびその他のユーザーのエントリは削除できないことに注意してください。

オプション

各オプションの意味は次のとおりです。

–d acl_entries

ファイルから 1 つ以上のエントリを削除します。ACL からファイル所有者、ファイルグループ所有者、およびその他のユーザーのエントリを削除することはできません。エントリの削除が、必ずしもそのエントリからすべてのアクセス権を削除するのと同じ効果があるとは限りません。

–f acl_file

ファイルの ACL に、acl_file という名前のファイルに含まれている ACL エントリを設定します。指定されるエントリには、–s オプションと同じ制約が適用されます。これらのエントリがファイル内に特定の順序で存在する必要はありません。また、acl_file にダッシュ (-) を指定した場合は、ファイルの ACL を設定するために標準入力が使用されます。

acl_file 内に文字 # を使用すると、コメントを示すことができます。# で始まる文字は、その行の最後まですべて無視されます。acl_filegetfacl(1) コマンドの出力として作成されている場合は、# に続く実効アクセス権がすべて無視されることに注意してください。

–m acl_entries

1 つ以上の新しい ACL エントリをファイルに追加するか、またはファイル上の 1 つ以上の既存の ACL エントリを変更するか、あるいはその両方を行ないます。指定された uid または gid のエントリがすでに存在する場合は、指定されたアクセス権によって現在のアクセス権が置き換えられます。指定された uid または gid のエントリが存在しない場合は、エントリが作成されます。–m オプションを使用してデフォルトの ACL を変更している場合は、完全なデフォルトの ACL (user、group、other、mask、および任意の追加のエントリ) を最初に指定する必要があります。

–r

ACL マスクエントリのアクセス権を再計算します。ACL マスクエントリで指定されたアクセス権は無視され、ACL 内のすべての追加のユーザー、ファイルグループ所有者、および追加のグループエントリへのアクセスを許可するために必要な最大のアクセス権で置き換えられます。追加のユーザー、ファイルグループ所有者、および追加のグループエントリ内のアクセス権は変更されません。

–s acl_entries

ファイルの ACL を設定します。すべての古い ACL エントリが削除され、新しく指定された ACL に置き換えられます。これらのエントリが特定の順序で存在する必要はありません。ファイルに適用される前に、このコマンドによってエントリがソートされます。

必要なエントリは次のとおりです。

  • ファイル所有者に対して指定された正確に 1 つの user エントリ。

  • ファイルグループ所有者に対する正確に 1 つの group エントリ。

  • 指定された正確に 1 つの other エントリ。

追加のユーザーおよびグループエントリが存在する場合は次のとおりです。

  • ユーザー (所有者以外) とグループに許可される最大のアクセス権を示す、ACL マスクに対して指定された正確に 1 つの mask エントリ。

  • 同じ uid を持つ重複した user エントリが存在していてはいけません。

  • 同じ gid を持つ重複した group エントリが存在していてはいけません。

file がディレクトリである場合は、次のデフォルトの ACL エントリを指定できます。

  • ファイル所有者に対する正確に 1 つの default user エントリ。

  • ファイルグループ所有者に対する正確に 1 つの default group エントリ。

  • ACL マスクに対する正確に 1 つの default mask エントリ。

  • 正確に 1 つの default other エントリ。

追加の default user エントリや追加の default group エントリを指定できますが、同じ uid を持つ重複した追加の default user エントリ、または同じ gid を持つ重複した default group エントリが存在していてはいけません。

使用例 1 読み取り権のみの追加

次の例では、ファイル abc に、ユーザー shea に読み取り権のみを許可する 1 つの ACL エントリを追加します。

setfacl -m user:shea:r−− abc
使用例 2 ファイルの ACL 全体の置き換え

次の例では、ファイル abc の ACL 全体を置き換えます。これにより、shea に読み取りアクセス権、ファイル所有者にすべてのアクセス権、ファイルグループ所有者に読み取りアクセス権のみ、ACL マスクに読み取りアクセス権のみがそれぞれ許可され、その他のユーザーにはアクセス権が許可されません。

setfacl -s user:shea:rwx,user::rwx,group::rw-,mask:r--,other:--- abc 

このコマンドのあと、ファイルのアクセス権ビットは rwxr----- になります。ファイルグループ所有者には読み取り権と書き込み権が設定されたにもかかわらず、ACL マスクエントリによって読み取り権のみに制限されています。このマスクエントリはまた、すべての追加のユーザーおよびグループ ACL エントリに使用可能な最大のアクセス権も指定しています。同様に、ユーザー shea にはすべてのアクセス権が設定されたにもかかわらず、このマスクによって読み取り権のみに制限されています。ACL マスクエントリは、ACL 内のすべてのユーザーおよびグループエントリへのアクセスをすばやく制限したり、開いたりするための方法です。たとえば、このマスクエントリを読み取りと書き込みに変更することによって、ファイルグループ所有者とユーザー shea の両方に読み取りアクセス権と書き込みアクセス権が許可されます。

使用例 3 2 つのファイルでの同じ ACL の設定

次の例では、ファイル abc にファイル xyz と同じ ACL を設定します。

getfacl xyz | setfacl -f − abc

ファイル

/etc/passwd

パスワードファイル

/etc/group

グループファイル

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
廃止または互換性がなくなる可能性あり

関連項目

chmod(1), getfacl(1), umask(1), aclcheck(3SEC), aclsort(3SEC), group(4), passwd(4), attributes(5)

この機能は、Oracle Solaris の将来のリリースで削除される可能性があります。