本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 5 : その他の機能 > a

aclv(5)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

aclv ― JFS アクセス制御リスト (ACL) の使い方

説明

アクセス制御リスト (ACL) は、任意のアクセス制御を行うための主要な機構であり (以下の「定義」を参照)、従来の HP-UX による機構よりもきめ細かくユーザーやグループによるファイルアクセスを制御できます。

従来から HP-UX では、特権のないユーザーやプロセス (ファイルの所有者など) が、「必要最小限の情報の開示」原則に従って、他のユーザーによるファイルやその他オブジェクトへのアクセスを、ユーザー識別子やグループ識別子に基づいて許可または拒否することができます ( passwd(4) および group(4) を参照)。 このレベルのアクセス制御は、ファイルのパーミッションビットを設定または操作して、所有者、グループ、およびその他ユーザーによるアクセスを許可または制限することにより実現されています ( chmod(2) を参照)。

ACL では、パーミッションビットよりもさらにきめ細かい設定が可能です。 ファイルの所有者やスーパーユーザーは ACL を使って、ファイルの所有者や所有グループ以外のユーザーまたはグループを列挙したリストに対して、アクセスを許可または拒否することができます。

ACL は、UNIX オペレーティングシステムのファイルに対する任意のアクセスコントロール (DAC) 機構のスーパーセットとしてサポートされています。 プロセス間通信 (IPC) などのその他オブジェクトをサポートするものではありません。

このマニュアルページは、JFS ファイルシステム上で実装される ACL についてのみ説明しています。 HFS ファイルシステムにおける ACL については、 acl(5) を参照してください。

定義

データへのアクセス制御はコンピュータセキュリティの重要事項であるため、ここでは最初に 『Department of Defense Trusted Computer System Evaluation Criteria』 に基づく以下の定義を説明してから、 アクセス制御の概念と、アクセス制御と HP-UX セキュリティ機能の関連について詳しく説明していきます。

アクセス  

「主体と客体 (オブジェクト) との間のある種の相互作用で、一方から他方への情報の流れを起こすもの」 主体とは「客体間に情報の流れを起こしたり、システム状態を変えたりするような、人物、プロセス、デバイスなど」を指します。 また客体とは、ファイル (通常のファイル、ディレクトリ、スペシャルファイル、FIFO など) や、プロセス間通信 (IPC) 機能 (共有メモリ、メッセージ待ち行列、セマフォ、ソケット) などを指します。

アクセス制御リスト (ACL)  

アクセス制御リストは、(ユーザー | グループ, モード) 形式のエントリーの集合であり、アクセス可能なすべてのユーザー ID やグループ ID に対するパーミッションを指定する必要があるファイルに付随して定義されています。

アクセス制御リスト (ACL) エントリー
  

ACL 内のエントリーであり、ファイルの所有者、所有グループ、グループクラス、追加ユーザー、追加グループ、およびその他ユーザーのアクセス権を指定します。

変更パーミッション  

DAC 情報 (パーミッションビットまたは ACL エントリー) を変更する権利です。 変更パーミッションはオブジェクト (ファイル) の所有者および特権ユーザーに与えられます。

任意のアクセスコントロール (DAC)
  

「主体および主体が属するグループの識別子に基づいた客体へのアクセス制限手段。 あるアクセスパーミッションを持つ主体は、そのパーミッションを (おそらくは間接的に) 他のどの主体にも渡すことができるという意味で、この制御は任意性を持つ」

モード  

各 ACL エントリーに含まれる、読取り、書込み、および実行/検索のパーミッションを表す 3 つのビットです。 これらのビットは、ファイルシステム内の各ファイルに対応する 16 モードビットに追加する形式で存在できます ( glossary(9) を参照)。

特権  

セキュリティ方針に基づくアクセス制限条項を無視または変更できる能力であり、アクセス制御機構の中で実現されています。 HP-UX では、スーパーユーザーと特定グループのメンバー ( privgrp(4) を参照) のみが特権ユーザーになります。

制限的と許可的  

各 ACL エントリーは、状況に応じて制限的とみなされる場合と許可的とみなされる場合があります。 制限的エントリーとは、より一般的なベースまたはオプションの ACL エントリーで許可されるユーザー/グループアクセスを、拒否する働きをします (以下を参照)。 許可的エントリーとは、より一般的なベースまたはオプションの ACL エントリーで拒否されるユーザー/グループアクセスを、許可する働きをします。

アクセス制御リストエントリー

アクセス制御リスト (ACL) は 1 行エントリーの集合であり、パーミッションを指定する必要があるファイルに関連付けられます。 各エントリーには、1 つのユーザー ID またはグループ ID に対する、読取り、書込み、および実行/検索をはじめとする一連のアクセスパーミッションを指定します。

アクセス制御リストと従来のファイルパーミッションとの関係を理解するために、以下に示すファイルとそのパーミッションについて考えてみることにします。

-rwxr-xr--   james   admin   datafile 

  • このファイルの所有者はユーザーjames です。

  • このファイルのグループはadmin です。

  • このファイルの名前はdatafile です。

  • このファイルの所有者パーミッションはrwx です。

  • このファイルのグループパーミッションはr-x です。

  • このファイルのその他パーミッションはr--です。

ACL ではユーザー ID とグループ ID は、 /etc/passwd に指定されている名前または番号で表現できます。

ACL 表記

JFS ACL 管理用のコマンドは、以下の記号表現を認識します。

  • [d[efault]: ]u[ser]: [uid]:perm

  • [d[efault]: ]g[roup]: [gid]:perm

  • [d[efault]: ]c[lass]:perm

  • [d[efault]: ]o[ther]:perm

プリフィックスが d: または default: となっている ACL エントリーは、ディレクトリ用の ACL にのみ指定できます。 このエントリーの内容はそのディレクトリへのアクセス権の決定には使用されず、ディレクトリ内に作成されるファイルやサブディレクトリに適用されます (以下の「ACL 継承」を参照)。

uid フィールドおよび gid フィールドにはユーザーまたはグループの数値 ID、 あるいは /etc/passwd または /etc/group に指定されているこれらの ID に対応する文字列を指定します。 perm フィールドには記号形式 ( r、 w、 x、 および - の組み合わせ)、または数値形式でアクセスパーミッションを指定します。 数値形式は 0〜7 の 8 進数値で、読取りパーミッションを 4、書込みパーミッションを 2、実行パーミッションを 1 として、その総和で表します。

ベース ACL エントリー

任意のファイルが作成される際には、アクセス制御リストの 4 つのベースエントリーがファイル用のアクセス パーミッションビットからマッピングされて、ファイルの所有者とグループ、および従来型のパーミッションビットの内容が正しく設定されます。 これを「最小 ACL」と呼びます。 ベース ACL エントリーは chmod(2) および acl(2) システムコールで変更できます。

u::perm 

ファイルの所有者に対するベース ACL エントリー

g::perm 

ファイルのグループに対するベース ACL エントリー

c::perm 

ファイルのグループクラスに対するベース ACL エントリー

o::perm 

その他ユーザーに対するベース ACL エントリー

ACL が最小の状態、つまりオプションの ACL エントリーがない場合は (以下を参照)、 groupclass のパーミッションは完全に同一になります。

オプションの ACL エントリー

アクセス制御リストのオプションのエントリーには、追加のアクセス制御情報を指定します。 acl(2) システムコールを使ってオプションのエントリーを設定すると、ファイルアクセスをさらに詳細に許可または拒否することができます。 オプションの ACL エントリーは最大 13 個まで指定できます。

例えばあるファイルに対して、以下に示すオプションのアクセス制御リストエントリーを追加できます。

u:mary:rwx  

ユーザーmary に対して、読取り、書込み、および実行のアクセス権を与えます。

user:george:---  

ユーザーgeorge による一切のアクセスを拒否します。

g:writers:rw-  

グループwriters のメンバーに対して、読取りおよび書込みのアクセス権を与えます。

クラスエントリー

ACL 内に複数の user エントリーまたは複数の group エントリーがある場合は、 class エントリーに、追加の user エントリーおよび group エントリーで与えられる最大のパーミッションを指定します。あるパーミッションに関して、それが class エントリーで許可されていなければ、他の ACL エントリーでもそのパーミッションを許可できません (ただし最初の user (所有者) エントリーと other エントリーは除く)。 そのため特定のユーザーまたはグループに対するパーミッションが拒否されることがあります。 このように class エントリーは、ファイルパーミッションの上限として機能します。

ACL 内に複数の user エントリーまたは group エントリーがある場合は、追加の user および group エントリーの集合は groupclass エントリーとして参照されます。 これは、これらの追加エントリーによって与えられる実効パーミッションが、 class エントリーによって制限されるためです。

ACL 内に追加のエントリーがある場合は、 class エントリーの値が ls -l でレポートされる所有グループのパーミッションと異なっていてもかまいません。 これは有益な点であり、つまり chmod(1) コマンドを使って、追加の ACL エントリーが設定されているファイルのパーミッションを適宜変更できることを意味します。

ACL におけるユニーク性

各エントリーは、それぞれの ACL 内でユニークです。 各種のベースエントリーは 1 つずつしか存在できず、また各ユーザー ID またはグループ ID に対しては、それぞれ 1 つのエントリーしか指定できません。 同様に、各種のデフォルトのベースエントリーも 1 つずつしか存在できず、また各ユーザー ID またはグループ ID に対しては、それぞれ 1 つのデフォルトエントリーしか指定できません。

ACL 継承

ディレクトリ用の ACL にデフォルトエントリーが含まれている場合、これらのエントリーはディレクトリ自体に対するアクセス権の決定には使用されません。 その代わりに、そのディレクトリ内にファイルが作成される都度、ディレクトリのデフォルト ACL エントリーが、新しいファイルに対する非デフォルトの ACL エントリーとして追加されます。

例えばディレクトリ /a が、 getacl(1) によって以下のようにレポートされる ACL を持っているとします。

# file: /a 
# owner: alpha 
# group: uno 
user::rwx 
group::rwx 
class:rwx 
other:rwx 
default:user:beta:r-- 
default:user:gamma:r-- 
default:group:dos:--- 
default:group:tres:--- 

この場合、ディレクトリ /a 内に作成される新しいファイルの ACL は、作成者の umask (022 など) と、 /a のデフォルト ACL エントリーの組み合わせを使って、以下のように初期化されます。

# file: /a/file 
# owner: creator_uid 
# group: creator_gid 
user::rw- 
user:beta:r-- 
user:gamma:r-- 
group::r-- 
group:dos:--- 
group:tres:--- 
class:r-- 
other:r-- 

新しいサブディレクトリの作成時には、親ディレクトリのデフォルト ACL エントリーが新しいサブディレクトリの ACL に 2 回追加されます。 1 回目はサブディレクトリの非デフォルトの ACL エントリーとして、2 回目はサブディレクトリのデフォルト ACL エントリーとしてです。 このようにしてデフォルト ACL エントリーは、ディレクトリのツリーが作成される都度、順番に継承されていきます。 前出の例でファイルではなくディレクトリを作成した場合は、その ACL は以下のようになります。

# file: /a/dir 
# owner: creator_uid 
# group: creator_gid 
user::rwx 
user:beta:r-- 
user:gamma:r-- 
group::r-x 
group:dos:--- 
group:tres:--- 
class:r-x 
other:r-x 
default:user:beta:r-- 
default:user:gamma:r-- 
default:group:dos:--- 
default:group:tres:--- 

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

アクセス側プロセスの実効ユーザー ID (EGID) と実効グループ ID (EGID) に与えるパーミッションをそれぞれ決定するには、以下のチェックが次に示す順番どおりに実行されます。

  • プロセスの EUID がファイルの所有者と同一である場合は、 user:: エントリーに指定されたパーミッションが与えられます。

  • EUID がいずれかの追加 user:uid: エントリーに指定されている UID と一致する場合は、そのエントリーに指定されたパーミッションと class エントリーに指定されたパーミッションとのビットごとの論理積が与えられます。

  • プロセスの EGID がファイルの所有グループと同一である場合は、 group:: エントリーに指定されたパーミッションが与えられます。

  • EGID がいずれかの追加 group:gid: エントリーに指定されている UID と一致する場合は、そのエントリーに指定されたパーミッションと class エントリーに指定されたパーミッションとのビットの論理積が与えられます。

  • それ以外の場合は、 other エントリーに指定されたパーミッションが与えられます。

上位にあるチェックでアクセス権が決定された場合は、それ以降のチェックは行われません。

サポートされた ACL オペレーション

ACL の設定、取り出し、またはカウントには、 acl(2) システムコールを使用します。 ACL の設定または変更には、 setacl(1) コマンドを、ACL の取得には getacl(1) コマンドを使用します。 特定のユーザー ID またはグループ ID に与えられるパーミッションは、 getaccess(1) コマンドと getaccess(2) システムコールによって決定できます。 特定の ACL プロパティを持つファイルは、 find(1)-aclv オプションを使って検索できます。

stat(2)、chmod(2)、chown(2) と ACL の対話

stat  

st_mode フィールドには、ファイルに対する呼出し側のアクセス権が要約されます。 このフィールドの値は、呼出し側に適用される 1 つまたは複数のオプションのエントリーがある場合にのみ、ファイルのパーミッションビットと異なります。 st_basemode フィールドは、ファイルの実際のパーミッションビットを示します。 st_aclv フィールドは、ファイルの ACL 内にオプションの ACL エントリーが存在することを示します。

st_mode フィールドはユーザー依存の要約であり、ACL を認識せずに stat(2) および chmod(2) を使用するプログラムが期待どおりの結果を生成したり、 stat(2) が NFS を介したリモートファイルについて適切な情報を提供できるようにします。 st_basemode フィールドおよび st_aclv フィールドは、ローカルファイルの場合にのみ役立ちます。

chmod  

chmod(2) システムコールを使ってグループのパーミッションビットを設定すると、ファイルの class エントリーに影響を与え、さらにこのエントリーが追加の user:uid: エントリーおよび group:gid: エントリーによって与えられるパーミッションに影響を与えます。 特に、 chmod(2) を使ってファイルのパーミッションビットをすべて 0 に設定すると、追加の user:uid: エントリーまたは group:gid: エントリーによって与えられているパーミッションに関わらずに、そのファイルに対するすべてのアクセス権が削除されます。

chown  

chown(2) を使ってファイルの所有者または所有グループを、既存の user:uid: エントリーまたは group:gid: エントリーに指定されている UID または GID に変更した場合は、これらのエントリーは ACL からは削除されませんが、 user:: エントリーまたは group:: エントリーの方が優先されるため、いずれにせよ使用されることはありません。

ヘッダ

ヘッダ <sys/acl.h>

<sys/aclv.h> ヘッダファイルには、ACL ごとにエントリー数を管理するための以下の定数が定義されています。

NACLVENTRIES  

ベースエントリーを含めた、各 ACL 内のエントリー数の最大値

NACLBASE  

ベースエントリーの数

以下のメンバーを含む ACL エントリー構造体 struct acl も定義されています。

int a_type;       /* type of entry */ 
uid_t a_id;       /* group ID */ 
ushort a_perm;    /* see <unistd.h> */ 

<sys/aclv.h> ヘッダには、 a_type フィールド用の有効な値のセット、および acl(2) システムコールの cmd 引き数用の有効な値も定義されています。

ヘッダ <sys/getaccess.h>

<sys/getaccess.h> ヘッダには、 getaccess(2) で使用する定数が定義されています。

uid のための特別なパラメータ値:

UID_EUID実効ユーザー ID に使用
UID_RUID実ユーザー ID に使用
UID_SUIDセーブされたユーザー ID に使用

ngroups のための特別なパラメータ値:

NGROUPS_EGIDプロセスの実効 gid
NGROUPS_RGIDプロセスの実 gid
NGROUPS_SGIDプロセスのセーブされた gid
NGROUPS_SUPPプロセスの補助グループのみ
NGROUPS_EGID_SUPPプロセスの実効 gid+ 補助グループ
NGROUPS_RGID_SUPPプロセスの実 gid+ 補助グループ
NGROUPS_SGID_SUPPプロセスのセーブされた gid+ 補助グループ

警告

ACL では、スーパーユーザーのアクセス権は制限できません。

サポートされている大部分の (すべてではない) ユーティリティは、ACL を正しく処理できます。 ただし、ファイルアーカイブ ユーティリティについては fbackup(1M) および frecover(1M) のみがアクセス制御リストを適切に処理できます。 オプションの ACL エントリーを含んだファイルの ACL を扱えないプログラム (アーカイブプログラムの ar(1)cpio(1)ftio(1)tar(1)dump(1M) など) を使用する場合は、それぞれの参照ページに記載されている ACL 情報を確認して、データを失うことがないように注意してください。

制約

NFS 

NFS はリモートファイルの ACL をサポートしていません。 個々のマニュアルエントリーは、それぞれの環境下におけるさまざまなシステムコール、ライブラリコール、およびコマンドの動作を説明するものです。 オプションのエントリーを持ったファイルをネットワークを介して転送したり、リモートファイルを操作したりするときには、オプションのエントリーが警告なしに削除されることがあるため注意してください。

著者

ここで説明したアクセス制御リストは、AT&T で開発されました。

ファイル

<sys/aclv.h> 

acl(2) をサポートするヘッダファイル。

/etc/passwd  

ユーザー名、およびユーザー ID とグループ ID を定義。

/etc/group  

グループ名を定義。

参照

chmod(1), cp(1), find(1), getaccess(1), getacl(1), ln(1), ls(1), mv(1), rm(1), setacl(1), fbackup(1M), frecover(1M), fsck(1M), fsdb(1M) access(2), acl(2), chmod(2), chown(2), creat(2), getaccess(2), mknod(2), open(2), stat(2), aclsort(3), cpacl(3), group(4), passwd(4), privgrp(4), acl(5)

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.