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.