コマンドラインのマニュアル

Man » acl マニュアルオンライン - acl マニュアルページの詳細なオンラインドキュメント

🌍
acl — アクセス制御リスト

説明

このマニュアルページでは、POSIX アクセス制御リストについて説明します。これは、ファイルとディレクトリに対する、よりきめ細やかな裁量的なアクセス権を定義するために使用されます。

ACL タイプ

すべてのオブジェクトは、そのオブジェクトへの裁量的なアクセスを管理する ACL と関連付けられていると考えることができます。この ACL は、アクセス ACL と呼ばれます。さらに、ディレクトリには、そのディレクトリ内に作成されるオブジェクトの初期アクセス ACL を管理する ACL が関連付けられている場合があります。これは、デフォルト ACL と呼ばれます。

ACL エントリ

ACL は、一連の ACL エントリで構成されます。ACL エントリは、関連するオブジェクト上の、個々のユーザーまたはユーザーグループに対する、読み取り、書き込み、および検索/実行権限の組み合わせとしてのアクセス許可を指定します。

ACL エントリには、エントリタグタイプ、オプションのエントリタグ修飾子、および一連の許可が含まれます。ここでは、修飾子とは、ACL エントリのエントリタグ修飾子を指します。

修飾子は、ACL_USER タイプのエントリの場合、ユーザーの識別子を、ACL_GROUP タイプのエントリの場合、ユーザーグループの識別子を表します。ACL_USER または ACL_GROUP 以外のエントリタイプの場合、定義された修飾子は存在しません。

次のエントリタグタイプが定義されています。

ACL_USER_OBJ    ACL_USER_OBJ エントリは、ファイルの所有者に対するアクセス権を示します。

ACL_USER        ACL_USER エントリは、エントリの修飾子で識別されるユーザーに対するアクセス権を示します。

ACL_GROUP_OBJ   ACL_GROUP_OBJ エントリは、ファイルのグループに対するアクセス権を示します。

ACL_GROUP       ACL_GROUP エントリは、エントリの修飾子で識別されるグループに対するアクセス権を示します。

ACL_MASK        ACL_MASK エントリは、ACL_USER、ACL_GROUP_OBJ、または ACL_GROUP タイプのエントリによって付与できる最大アクセス権を示します。

ACL_OTHER       ACL_OTHER エントリは、他の ACL エントリに一致しないプロセスに対するアクセス権を示します。

アクセスチェックが実行される場合、ACL_USER_OBJ および ACL_USER エントリは、有効なユーザー ID に対してテストされます。有効なグループ ID、およびすべての補助グループ ID は、ACL_GROUP_OBJ および ACL_GROUP エントリに対してテストされます。

有効な ACL

有効な ACL には、ACL_USER_OBJ、ACL_GROUP_OBJ、および ACL_OTHER タグタイプのエントリがそれぞれ 1 つだけ含まれている必要があります。ACL_USER および ACL_GROUP タグタイプのエントリは、ACL 内に 0 回または複数回出現する場合があります。ACL に ACL_USER または ACL_GROUP タグタイプのエントリが含まれている場合、ACL には ACL_MASK タグタイプのエントリが正確に 1 つ含まれている必要があります。ACL に ACL_USER または ACL_GROUP タグタイプのエントリが含まれていない場合、ACL_MASK エントリはオプションです。


すべての ACL_USER タグタイプのすべてのエントリにおいて、ユーザー ID 修飾子は一意でなければなりません。また、すべてのグループ ID は、すべての ACL_GROUP タグタイプのすべてのエントリにおいて一意でなければなりません。

^ cl_get_file() 関数は、ディレクトリがデフォルト ACL と関連付けられていない場合、デフォルト ACL としてゼロ個の ACL エントリを持つ ACL を返します。acl_set_file() 関数も、ディレクトリがデフォルト ACL と関連付けられていないことを示す有効なデフォルト ACL として、ゼロ個の ACL エントリを持つ ACL を受け入れます。これは、acl_delete_def_file() 関数を使用することと同等です。

ACL エントリとファイル権限ビットの対応

ACL によって定義される権限は、ファイル権限ビットによって指定される権限のスーパーセットです。

ファイル所有者、グループ、およびその他の権限と、特定の ACL エントリとの間には対応関係があります。所有者の権限は、ACL_USER_OBJ エントリの権限に対応します。ACL に ACL_MASK エントリが含まれている場合、グループの権限は ACL_MASK エントリの権限に対応します。それ以外の場合、ACL に ACL_MASK エントリが含まれていない場合、グループの権限は ACL_GROUP_OBJ エントリの権限に対応します。その他の権限は、ACL_OTHER エントリの権限に対応します。

ファイル所有者、グループ、およびその他の権限は、常に対応する ACL エントリの権限と一致します。ファイル権限ビットの変更は、関連する ACL エントリの変更をもたらし、これらの ACL エントリの変更は、ファイル権限ビットの変更をもたらします。

オブジェクトの作成とデフォルト ACL

ファイルオブジェクトのアクセス ACL は、creat()mkdir()mknod()mkfifo()、または open() のいずれかの関数を使用してオブジェクトが作成されたときに初期化されます。デフォルト ACL がディレクトリに関連付けられている場合、作成されるファイルオブジェクトの mode パラメータと、ディレクトリのデフォルト ACL が、新しいオブジェクトの ACL を決定するために使用されます。

新しいオブジェクトは、包含ディレクトリのデフォルト ACL をアクセス ACL として継承します。

ファイル権限ビットに対応するアクセス ACL エントリは、`mode` パラメータで指定された権限に含まれない権限が含まれないように変更されます。

デフォルト ACL がディレクトリに関連付けられていない場合、ファイルオブジェクトを作成する関数の mode パラメータと、ファイル作成マスク(umask(2) を参照)が、新しいオブジェクトの ACL を決定するために使用されます。

新しいオブジェクトには、ACL_USER_OBJ、ACL_GROUP_OBJ、および ACL_OTHER のタグタイプのエントリを含むアクセス ACL が割り当てられます。これらのエントリの権限は、ファイル作成マスクによって指定された権限に設定されます。

ファイル権限ビットに対応するアクセス ACL エントリは、`mode` パラメータで指定された権限に含まれない権限が含まれないように変更されます。

アクセスチェックアルゴリズム

プロセスは、ACL によって保護されたファイルオブジェクトへの読み取り、書き込み、または実行/検索アクセスを要求できます。アクセスチェックアルゴリズムは、オブジェクトへのアクセスが許可されるかどうかを決定します。


プロセスの実効ユーザーIDがファイルオブジェクト所有者のユーザーIDと一致する場合、

ACL_USER_OBJエントリに要求された権限が含まれている場合は、アクセスを許可します。

それ以外の場合は、アクセスを拒否します。

それ以外の場合、プロセスの実効ユーザーIDが、ACL_USERタイプのいずれかのエントリの修飾子と一致する場合、

一致するACL_USERエントリとACL_MASKエントリの両方に要求された権限が含まれている場合は、アクセスを許可します。

それ以外の場合は、アクセスを拒否します。

それ以外の場合、プロセスの実効グループIDまたは補足グループIDのいずれかが、ファイルのグループまたはACL_GROUPタイプのいずれかのエントリの修飾子と一致する場合、

ACLにACL_MASKエントリが含まれている場合は、

ACL_MASKエントリと、一致するACL_GROUP_OBJまたはACL_GROUPエントリのいずれかに、要求された権限が含まれている場合は、アクセスを許可します。

それ以外の場合は、アクセスを拒否します。

それ以外の場合(ACL_GROUPエントリがACL_MASKエントリなしで存在することはあり得ないことに注意してください)。

ACL_GROUP_OBJエントリに要求された権限が含まれている場合は、アクセスを許可します。

それ以外の場合は、アクセスを拒否します。

それ以外の場合、ACL_OTHERエントリに要求された権限が含まれている場合は、アクセスを許可します。

それ以外の場合は、アクセスを拒否します。

ACLテキスト形式

ACLを表す長い形式と短い形式が定義されています。両方の形式で、ACLエントリは、コロンで区切られた3つのフィールドとして表されます。最初のフィールドには、次のエントリタグタイプのキーワードのいずれかが含まれます。

user ユーザーACLエントリは、ファイル所有者(エントリタグタイプACL_USER_OBJ)または指定されたユーザー(エントリタグタイプACL_USER)に付与されるアクセスを指定します。

group グループACLエントリは、ファイルのグループ(エントリタグタイプACL_GROUP_OBJ)または指定されたグループ(エントリタグタイプACL_GROUP)に付与されるアクセスを指定します。

mask マスクACLエントリは、ファイル所有者のユーザーエントリとその他のエントリ(エントリタグタイプACL_MASK)を除く、すべてのACLエントリによって付与できる最大アクセスを指定します。

other その他のACLエントリは、ユーザーまたはグループACLエントリに一致しないプロセスに付与されるアクセスを指定します(エントリタグタイプACL_OTHER)。

2番目のフィールドには、エントリタグタイプがACL_USERまたはACL_GROUPのエントリの場合、ACLエントリに関連付けられたユーザーまたはグループのユーザーまたはグループ識別子が含まれ、それ以外の場合は空になります。ユーザー識別子は、ユーザー名または10進形式のユーザーID番号にすることができます。グループ識別子は、グループ名または10進形式のグループID番号にすることができます。

3番目のフィールドには、裁量的なアクセス権が含まれます。読み取り、書き込み、および検索/実行の権限は、それぞれr、w、およびxの文字で表されます。これらの文字のそれぞれは、ACLエントリで権限が存在しないことを示すために、-文字に置き換えられます。テキスト形式から内部表現に変換する場合、存在しない権限を指定する必要はありません。

各 ACL エントリの先頭と末尾、およびフィールド区切り文字(コロン)の直前と直後に空白を含めることができます。

長文形式

長文形式は、1 行に 1 つの ACL エントリを含みます。さらに、シャープ記号 (#) でコメントを開始でき、コメントは行末まで続きます。ACL_USER、ACL_GROUP_OBJ、または ACL_GROUP の ACL エントリに、ACL_MASK エントリにも含まれていない権限が含まれている場合、そのエントリの後にシャープ記号、文字列「effective:」、およびそのエントリによって定義された有効なアクセス権が表示されます。これは、長文形式の例です。

user::rw-
user:lisa:rw-         #effective:r-
group::r-
group:toolies:rw-     #effective:r-
mask::r-
other::r-

短文形式

短文形式は、カンマで区切られた一連の ACL エントリであり、入力に使用されます。コメントはサポートされていません。エントリタグタイプのキーワードは、完全な省略されていない形式、または 1 文字の省略形として表示できます。ユーザーの省略形は u、グループの省略形は g、マスクの省略形は m、その他の省略形は o です。権限には、次の文字を最大 1 つずつ、任意の順序で含めることができます。r、w、x。これらは、短文形式の例です。

u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r-
g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r

根拠

IEEE 1003.1e ドラフト 17 では、ACL_MASK タグタイプの ACL エントリを含むアクセス制御リストが定義されており、ファイル権限ビット間のマッピングが一定ではありません。標準ワーキンググループは、この比較的複雑なインターフェースを定義することにより、IEEE 1003.1(「POSIX.1」)に準拠するアプリケーションが、ACL を持つシステムでも期待どおりに機能するようにしました。IEEE 100.1e ドラフト 17 には、このインターフェースを選択した理由がセクション B.23 に記載されています。

ファイルユーティリティの変更

ACL をサポートするシステムでは、ファイルユーティリティ ls(1)、cp(1)、および mv(1) の動作が次のようになります。

デフォルトの ACL または、3 つの必須の ACL エントリよりも多くのエントリを含むアクセス ACL を持つファイルの場合、ls(1) ユーティリティは、ls -l によって生成される長文形式で、権限文字列の後にプラス記号 (+) を表示します。

-p フラグが指定されている場合、cp(1) ユーティリティは ACL も保持します。保持できない場合、警告が表示されます。

mv(1) ユーティリティは、常に ACL を保持します。保持できない場合、警告が表示されます。

chmod(1) ユーティリティおよび chmod(2) システムコールがアクセス ACL に及ぼす影響については、「ACL エントリとファイル権限ビット間の対応」で説明します。

標準

IEEE 1003.1e ドラフト 17(「POSIX.1e」)ドキュメントでは、IEEE 100.1 標準へのいくつかのセキュリティ拡張が記述されています。1003.1e の作業は中止されましたが、多くの UNIX スタイルのシステムでは、POSIX.1e ドラフト 17 またはそれ以前のドラフトの一部を実装しています。


Linux アクセス制御リストは、POSIX.1e で定義されているアクセス制御リストのすべての関数とユーティリティを実装しており、いくつかの拡張機能も含まれています。この実装は、POSIX.1e ドラフト 17 に完全に準拠しています。拡張機能は、そのようにマークされています。アクセス制御リスト操作関数は、ACL ライブラリ (libacl、-lacl) で定義されています。POSIX 準拠のインターフェイスは、 ヘッダーで宣言されています。これらの関数に対する Linux 固有の拡張機能は、 ヘッダーで宣言されています。

注意事項

拒否された権限と Linux ユーザー名前空間

ACL を使用して、プロセスが所属するグループに基づいて権限を拒否することはできますが、これは推奨されません。特権ヘルパー (newuidmap(1) など) は、特権のないプロセスに setgroups(2) システムコールへのアクセスを許可する可能性があり、これにより、そのメンバーシップに基づいて適用された制限が無効になる可能性があります。詳細については、user_namespaces(7) を参照してください。

関連項目

chmod(1)、creat(2)、getfacl(1)、ls(1)、mkdir(2)、mkfifo(2)、mknod(2)、mount(8)、open(2)、setfacl(1)、stat(2)、umask(1)

POSIX 1003.1e ドラフト 17

https://wt.tuxomania.net/publications/posix.1e/download.html

POSIX 1003.1e 関数 (カテゴリ別)

ACL ストレージ管理 acl_dup(3)、acl_free(3)、acl_init(3)

ACL エントリ操作 acl_copy_entry(3)、acl_create_entry(3)、acl_delete_entry(3)、acl_get_entry(3)、acl_valid(3)

acl_add_perm(3)、acl_calc_mask(3)、acl_clear_perms(3)、acl_delete_perm(3)、
acl_get_permset(3)、acl_set_permset(3)

acl_get_qualifier(3)、acl_get_tag_type(3)、acl_set_qualifier(3)、acl_set_tag_type(3)

オブジェクトに対する ACL 操作 acl_delete_def_file(3)、acl_get_fd(3)、acl_get_file(3)、acl_set_fd(3)、acl_set_file(3)

ACL フォーマット変換 acl_copy_entry(3)、acl_copy_ext(3)、acl_from_text(3)、acl_to_text(3)、acl_size(3)

POSIX 1003.1e 関数 (可用性別)

最初のグループの関数は、POSIX 互換のアクセス制御リストを持つほとんどのシステムでサポートされていますが、2 番目のグループの関数は、より少ないシステムでサポートされています。アプリケーションを移植する場合は、2 番目のグループの関数は避けるのが最善です。

acl_delete_def_file(3)、acl_dup(3)、acl_free(3)、acl_from_text(3)、acl_get_fd(3)、
acl_get_file(3)、acl_init(3)、acl_set_fd(3)、acl_set_file(3)、acl_to_text(3)、acl_valid(3)

acl_add_perm(3)、acl_calc_mask(3)、acl_clear_perms(3)、acl_copy_entry(3)、acl_copy_ext(3)、
acl_copy_int(3)、acl_create_entry(3)、acl_delete_entry(3)、acl_delete_perm(3)、acl_get_entry(3)、
acl_get_permset(3)、acl_get_qualifier(3)、acl_get_tag_type(3)、acl_set_permset(3)、
acl_set_qualifier(3)、acl_set_tag_type(3)、acl_size(3)

LINUX拡張機能

これらの非移植性拡張機能は、Linuxシステムで利用できます。

acl_check(3), acl_cmp(3), acl_entries(3), acl_equiv_mode(3), acl_error(3), acl_extended_fd(3),
acl_extended_file(3), acl_extended_file_nofollow(3), acl_from_mode(3), acl_get_perm(3),
acl_to_any_text(3)

著者

Andreas Gruenbacher, <_>