tail head cat sleep
QR code linking to this page

manページ  — ACL

名称

acl – 仮想ファイルシステムアクセス制御リスト

内容

書式

#include <sys/param.h>
#include <sys/vnode.h>
#include <sys/acl.h>

カーネルコンフィギュレーションファイルの中に、 options UFS_ACL

解説

アクセス制御リスト、すなわち ACL は、 ファイルおよびディレクトリを表現する vnode に対する権限を、 きめ細かく指定可能とします。 しかしながら、 異なる ACL のセマンティクスを持つファイルシステムが過多にあるため、 vnode インタフェースは ACL の文法のみを理解し、基礎をなすファイルシステムが 細部を実装することを当てにしています。 基礎をなすファイルシステムに依存して、個々のファイルまたはディレクトリは、 関連付けられる 0 個以上の ACL を持つことが可能です。 それぞれ ACL の名前は、適切な vnode ACL 呼び出し VOP_ACLCHECK(9), VOP_GETACL(9) および VOP_SETACL(9)type フィールドを使用して指定されます。

現在は、個々の ACL は以下に定義されるカーネル内で固定サイズの acl 構造体によって表現されます。

struct acl {
        int                     acl_cnt;
        struct acl_entry        acl_entry[ACL_MAX_ENTRIES];
};

ACL は、ACL エントリの固定サイズ配列で構成されます。 各 ACL エントリは、 パーミッションの組、主要な名前空間、主要な識別子から構成されます。

個別の ACL エントリは、以下のメンバを持つ構造体の acl_entry_t 型です。
acl_tag_t ae_tag
  以下は ae_tag に設定されるべき ACL の型の定義のリストです。

ACL_UNDEFINED_FIELD
  未定義の ACL 型。
ACL_USER_OBJ 実効ユーザ ID がファイルの所有者のユーザ ID と 一致するプロセスのための任意のアクセス権。
ACL_USER 実効ユーザ ID が ACL エントリの権限と 一致するプロセスのための任意のアクセス権。
ACL_GROUP_OBJ 実効グループ ID または全ての追加のグループがファイルの所有者のグループ ID と 一致するプロセスのための任意のアクセス権。
ACL_GROUP 実効グループ ID または全ての追加のグループが ACL エントリの権限と 一致するプロセスのための任意のアクセス権。
ACL_MASK ファイルグループクラスの中のプロセスが許可されることができる 任意のアクセス権の最高限度。
ACL_OTHER その他の ACL エントリによって保護されていない プロセスのための任意のアクセス権。
ACL_OTHER_OBJ ACL_OTHER と同じです。 各々の ACL エントリは、厳密に、1 つの ACL_USER_OBJ と 1 つの ACL_GROUP_OBJ と 1 つの ACL_OTHER を含まなければなりません。 ACL_USER, ACL_GROUP または ACL_OTHER が存在する場合には、厳密に 1 つの ACL_MASK エントリが存在するべきです。
uid_t ae_id
  この ACL がアクセスパーミッションを記述しているユーザのユーザ ID。
acl_perm_t ae_perm
  このフィールドは、この ACL に適合するプロセスが関連したファイルの アクセスのために、どの種類のアクセスかを定義します。
ACL_EXECUTE プロセスは関連したファイルの実行が可能です。
ACL_WRITE プロセスは関連したファイルへの書込みが可能です。
ACL_READ プロセスは関連したファイルからの読込みが可能です。
ACL_PERM_NONE プロセスは関連したファイルへの読込み、書込みまたは実行のパーミッションを 所有していません。

実装に関する注

typedef mode_t  *acl_permset_t;

/* 内部の ACL 構造体 */ struct acl { int acl_cnt; struct acl_entry acl_entry[ACL_MAX_ENTRIES]; };

/* 外部の ACL 構造体 */ struct acl_t_struct { struct acl ats_acl; int ats_cur_entry; }; typedef struct acl_t_struct *acl_t;

/* * ae_tag フィールドに有効な値 */ #define ACL_UNDEFINED_TAG 0x00000000 #define ACL_USER_OBJ 0x00000001 #define ACL_USER 0x00000002 #define ACL_GROUP_OBJ 0x00000004 #define ACL_GROUP 0x00000008 #define ACL_MASK 0x00000010 #define ACL_OTHER 0x00000020 #define ACL_OTHER_OBJ ACL_OTHER

/* * acl_type_t 引数のために有効な値 */ #define ACL_TYPE_ACCESS 0x00000000 #define ACL_TYPE_DEFAULT 0x00000001 #define ACL_TYPE_AFS 0x00000002 #define ACL_TYPE_CODA 0x00000003 #define ACL_TYPE_NTFS 0x00000004 #define ACL_TYPE_NWFS 0x00000005

/* * ae_perm フィールドに可能なフラグ */ #define ACL_EXECUTE 0x0001 #define ACL_WRITE 0x0002 #define ACL_READ 0x0004 #define ACL_PERM_NONE 0x0000 #define ACL_PERM_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ) #define ACL_POSIX1E_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ)

/* * acl_get_entry() のための entry_id に可能な値 */ #define ACL_FIRST_ENTRY 0 #define ACL_NEXT_ENTRY 1

/* * ae_id フィールドの中の未定義の値 */ #define ACL_UNDEFINED_ID ((uid_t)-1)

関連項目

acl(3) [英語], vaccess_acl_posix1e(9) [英語], VFS(9), vaccess(9) [英語], VOP_ACLCHECK(9), VOP_GETACL(9), VOP_SETACL(9)

作者

このマニュアルページは Robert Watson が書きました。

ACL (9) December 23, 1999

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Unix’s “power tools” are more like power switchblades that slice off the operator’s fingers quickly and efficiently.
— The Unix Haters' handbook