スポンサーリンク

ACL(9) FreeBSD カーネル開発者マニュアル ACL(9)

名称

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 が書きました。

FreeBSD 10.0 December 23, 1999 FreeBSD 10.0

スポンサーリンク