ACL(9)

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

書式
<sys/param.h> <sys/vnode.h> <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 が書きました。