| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 5 : その他の機能 > aacl(5)HP-UX 11i Version 2: September 2004 |
|
名称acl ― アクセス制御リストの使い方 説明アクセス制御リスト (「定義」参照) は、任意のアクセスコントロール のキー強制機構で、従来の HP-UX の機構よりもよりきめ細かくユーザーとグループ によるファイルのアクセス指定が可能です。 従来から HP-UX では ファイルの所有者などのような 特権のないユーザーやプロセスが ファイルや他のオブジェクトへの他のユーザー のアクセスを許可したり拒否したりできます。 これはユーザーおよびグループ識別子で決まる 「知らなければ使えない」ということに基づいた方法です ( passwd(4) および group(4) を参照)。 このレベルの制御は、 ファイルのパーミッションビットをセットし、操作して、 所有者、グループ、およびその他の者によるアクセスを 承諾したり制限したりすることで実現されます ( chmod(2) を参照)。 ACL はパーミッションビットよりもずっと多くの選択肢を提供します。 ACL によって、ファイルの所有者やスーパーユーザーは、 ユーザー、グループまたはその組合せを列挙したリスト に対してアクセスの許可拒否が可能になります。 ACL は ファイルに対する UNIX オペレーティングシステムの任意のアクセスコントロール (DAC) 機構のスーパーセットとしてサポートされているものであり、 プロセス間通信 (IPC) などのその他のオブジェクトに対するものではありません。 定義データへのアクセス制御はコンピュータセキュリティの 重要事項であるので、 『Department of Defense Trusted Computer System Evaluation Criteria』 に基づいた以降の定義を提示してから、 アクセス制御と HP-UX 機密保護機能の関連について説明します。
アクセス制御リストエントリーアクセス制御リスト (ACL) はパーミッションを指定するファイルに 対応する (ユーザー.グループ, モード) というエントリーの集合です。 各エントリーは 1 つのユーザーおよびグループ ID の組合せについて、 読取り、書込み、実行/検索パーミッションからなる アクセスパーミッション を指定します。 アクセス制御リストと従来のファイルパーミッション との関係を理解するために、 以降のファイルとそのパーミッションを考えてみてください。 -rwxr-xr-- james admin datafile
ACL では、ユーザー ID とグループ ID は /etc/passwd にある名前か番号で表現できます。 以降の特別な記号が使えます。
ベース ACL エントリーファイルが生成されたとき、3 つのベースとなるアクセス制御リスト エントリーが そのファイルのアクセスパーミッション ビット からマッピングされて ファイルの所有者およびグループと その従来型のパーミッションビットとを照合します。 ベース ACL エントリーは chmod(2) および setacl(2) システムコールで変更できます。 (uid.%,mode) ファイルの所有者のためのベースACLエントリー (ここに記述した以外に短い形式の表記 で表現される例があります。以下の「ACL の表記」を参照してください。) オプションの ACL エントリーオプションのアクセス制御リストエントリーには 付加的な制御情報が指定されています。 ユーザーは setacl(2) システムコールでこれをセットし、ファイルアクセス をさらに許可したり拒否したりすることができます。 13 個までのユーザー/グループの組合せを追加指定できます。 例えば、以降の オプションのアクセス制御リストエントリーをファイルに対して指定できます。
ACL の表記ACL を管理するためにサポートされたライブラリコールとコマンド は 3 つの異なる記号表現を認識します。
前述の例ファイルの場合は、 ベース ACL エントリーはこの 3 つの表記で次のように表現できます。
基本的な ACL の使用法に加えて、いくつかのライブラリコール とコマンドが 演算子形式と短い形式のバリエーションを理解し、使用すること ができます。 以下の「ACL のパターン」を参照してください。 ACL におけるユニーク性エントリーは各 ACL でユニークです。 各ファイルについて、どの u と g の値の組についても (u.g, mode) というエントリーは 1 つのみ、 1 つの u の値には (u.%, mode) というエントリーは 1 つのみ、1 つの g の値には (%.g, mode) というエントリーは 1 つのみ、各ファイルには (%.%, mode) エントリーは 1 つのみしか存在できません。例えば、 ACL は 1 つの (23.14, mode) というエントリーと 1 つの (23.%, mode) というエントリー を持つことはできますが、2 つの (23.14, mode) や 2 つの (23.%, mode) を持つことはできません。 アクセスチェックのアルゴリズムACL のエントリーは指定の厳密さのレベルで 4 つに分類されます。 アクセスのチェックで、 ACL は次の順番で実効ユーザーおよびグループと比較されます。
プロセスの実効ユーザー ID と実効グループ ID (または何らかの補助グループ ID) の組合せについての 1 つのエントリーが適合すると、それ以降の (つまり、より特定的でない) エントリーはチェックされません。 適合するもののうちでは特定的でないエントリーよりもより特定的なエントリーの 方が優先されます。 プロセスが 1 つまたは複数のグループ ID を持っている場合 (つまり、 補助グループリストが空でない場合)、 1 つまたは複数の (u.g, mode) または (%.g, mode) エントリーが適合するかも しれません。このような場合は、(同じレベルの特定度、 u.g または %.g の) すべての適合するエントリーの アクセスモードが互いに OR になります。 その結果として得られるモードビットが許可すれば、アクセスが承諾されます。 エントリーはユニークなので、各エントリー型のエントリーの並ぶ順番は重要では ありません。 従来の UNIX のパーミッションビットはベース ACL エントリーにマップされているの で、アクセスチェックの中に含まれています。 読取りと書込みの両方を行うようにファイルをオープンするときのように、 1 つのリクエストが 1 つまたは複数のタイプのアクセスでできている場合、 リクエストされたすべてのタイプのアクセスについてプロセス が許可を受けていなければそのアクセスは承諾されません。 プロセスがグループリストに 2 つのグループを持っていて、 その一方が読取りアクセスの許可のみを持ち、他方が書込みアクセスの許 可のみを持っている場合でもそのアクセスが承諾されることに注意してください。 つまり、リクエストされたアクセスがどの 1 つのエントリーについても承諾され ていなくても、プロセスがいくつかのグループに属しているために エントリーの組合せによってそのアクセスが承諾されることがあります。 ACL の演算子形式 (入力のみ)user . group operator mode [ operator mode ]... , ... 複数のエントリーは chmod(1) にあるようにカンマで区切られます。 各エントリーの内容は、 ユーザー識別子およびグループ識別子、 その後に続く chmod(1) が受け付けるモードシンタックスで記述された 1 つまたは複数の演算子と モードキャラクタによって構成されます。 ACL 全体は 1 つの引き数でなければならないので、 その中に空白や特殊文字がある場合は シェルに渡すときに引用符で囲まなければなりません。 空白は名前の中でなければ無視されます。 null ACL は正当なものであり、状況によって「アクセスなし」または「変化なし」 を意味します。 各ユーザー ID とグループ ID は以下のもので表現できます。
演算子は各エントリーについて常に必要です。 演算子は以下のものがあります。
モードは 0 〜 7 の 8 進数値で表現されます。 もしくは r, w, および x の任意の組合せを任意の順番で与えることができます (以下の 例 を参照)。 null モードは演算子 が = であればアクセスを拒否し、 演算子が + または - であれば「変化なし」を表します。 複数のエントリーや、エントリー中の複数の演算子モード部分 は指定された順番に適用されます。競合があってもエラーには ならず、最後に指定されたエントリー、または演算子が 有効になります。 エントリーは何らかの特別な順番で並んでいなくても構いません。 chmod(1) は、 ファイルの所有者、グループ、他人、全ユーザー を記号的に参照するのに、それぞれ u, g, o, a のみが使えることに注意してください。 ACL は任意のユーザーおよびグループ識別子 について働くので、@ が簡便さのために用意されています。 正確な構文は次のとおりです。 acl ::= [entry[,entry]...] ACL の短い形式 (入力および出力)(user . group, mode) ... 短い形式は演算子形式と比べていくつかの面で異なっています。
複数のエントリーは結合されます。 演算子形式との整合性をとるため、 ユーザー ID とグループ ID を区切るのに ドット (.) が用いられます。 出力では、空白は名前の中 (もし存在すれば) 以外では印字されませ ん。適合する名前がわからない時は ID 番号が印字されます。 「不特定のユーザーやグループ」については、 どちらの ID でも % を印字することができます。 モードは <r|-><w|-><x|-> として 表現されます。つまりモードは常に 3 文字で表現され、設定しない モードビットはハイフンで埋められます。 ACL がシステムから読み込まれたとき、エントリーは特定度で順序付けされ、次に ID 部分の数値で順序付けされます。 入力では、 ACL 全体が 1 つの引き数でなければならないので、 その中に空白や特殊文字がある場合は シェルに渡すときに引用符で囲まなければなりません。 空白は名前の中でなければ無視されます。 null ACL は正当なものであり、状況によって「アクセスなし」または「変化なし」 を意味します。 ユーザー ID とグループ ID は、演算子形式の場合と 同様に表現されます。 モードは 0 〜 7 の 8 進数値で表現されます。 もしくは r, w, x, および - (無視される) の任意の組合せを任意の順番で与えることができます (以下の「 例 」を参照)。 null モードは アクセスを拒否します。 冗長な指定はエラーにはならず、 どのユーザー ID/グループ ID の組合せでも最後のものが有効に なります。 エントリーは何らかの特別な順番で並んでいなくてもかまいません。 正確な構文は次のとおりです。 acl ::= [entry[entry]...] ACL の長い形式 (出力のみ)mode user . group 各エントリーは出力の 1 行を占めます。 モードは、縦方向の検索を容易にするために (設定しないモードビットに) ハイフンを使って固定幅のフィールド で行の最初に表示されます。 各ユーザー ID とグループ ID は、名前が知られていればそれを表示し、 知られていなければ番号を表示し、 「不特定のユーザーやグループ」については、 % を表示します。 エントリーはもっとも特定的なものからもっとも特定的でないものへと順序付け られ、次に ID 部分の数値で順序付けられます。 表示されるすべての ACL が最低でも 3 つのエントリーであるベース ACL エントリー (つまりuid.%, %.gid, %.%) をもっていることに注意してください。 正確な構文は次のとおりです。 acl ::= entry[<newline>entry]... ACL のパターンいくつかのライブラリコールとコマンドは パターンに適合するすべてのエントリーに対する処理を可能にするため、 正確には ACL でない ACL パターンを認識し、使用することができます。 ACL 構文は以降のように拡張されます。
サポートされた ACL オペレーションsetacl(2) および getacl(2) システムコールによって、 あるファイルの ACL 全体を acl_entry 構造体の配列として設定したり取り出したりする ことができます。 ファイルへのアクセス権を調べるには、 access(2) および getaccess(2) を参照してください。 ACL を管理するために、いろいろなライブラリコールが 用意されています。
以降のコマンドが ACL とパーミッションを管理するのに使用可能です。
stat(2), chmod(2), chown(2) による ACL のインタラクション
例演算子形式以下は、 %.% エントリーを"other"ユーザーに対して そのファイルについて読取りのみを制限します。 chacl '%.% = r' myfile 以下は、任意のグループのユーザー"bill"に対して、 bill.% エントリーよりも特定的な制限的エントリー (例えば bill.adm エントリーが書込みを拒否している場合) がなければ そのファイルに対して書込みを許可します。 chacl 'bill.% +w' myfile 以降の ACL の指定には 2 つのエントリーがあります。 最初の 1 つはユーザーが 12、グループが 4 のものに対して 書込み機能を削除し、読取り機能 を追加しています。2 番目のエントリーは不特定のグループ の不特定のユーザーに対してアクセスを拒否しています。 chacl '12.4-w+r, %.% =' myfile 以降のエントリーの組は、 u.% エントリーをファイルの所有者に対して 読取りと実行の両方を許可して、書込みおよび 実行機能を"other"ユーザー ("%.%"エントリー) に対して追加します。 モードキャラクタが実例のためにわざと繰り返されていることに注意してください。 chacl '@.% = 5, %.% + xwx' myfile 短い形式典型的な ACL の印字例を挙げます。 これは、ユーザー jpc がグループ adm に所属する場合にそのファイルの読取りと実行を 許可し、ユーザー ajs がグループ trux に所属する場合にアクセスを拒否し、ユーザー jpc が任意の ( adm 以外の) グループに所属する場合にファイルの読取りのみを許可します。 グループ bin に属するそれ以外のユーザーはそのファイルの読取りと実行が可能で、 それ以外のユーザーはファイルの読取りだけができます。 (jpc.adm,r-x)(ajs.trux,---)(jpc.%,r--)(%.bin,r-x)(%.%,r--) 以下は"other"ユーザーにファイルの読取りだけを許可します。 chacl '(%.%,r)' myfile 以下は、任意のグループに属するユーザー bill に対して書込みのみのアクセス許可を設定します。 chacl '(bill.%,-w-)' myfile 以下は、グループ 4 に属するユーザー 12 のためのエントリーを 読取りと書込みを許可するように設定します。 chacl '(12.4,wr)' myfile 以下は、ファイルの所有者 に読取りと実行の両方を許可するためのベース ACL エントリー を設定し、"other"ユーザー ("%.%"エントリー) に書込みと実行機能を設定します。 chacl '(@.%, 5) (%.%, xwx)' myfile ACL のパターン以降のコマンドは、 何らかのユーザー/グループの組合せに対して読取りアクセスを許可し 書込みアクセスを拒否するようなエントリーを含む ACL をもつファイルの場所を探します。 find / -acl '*.*+r-w' -print 以下は、グループ bin の任意のユーザーについてのエントリーと、任意のグループ のユーザー tammy についてのエントリーに、そのエントリーのモードの値に関わらず適合します。 適合するオプションの ACL エントリーは削除され、 適合するベース ACL エントリーのモードの値はゼロに設定されます。 chacl -d '%.bin, tammy.*=*' myfile 以下はすべてのエントリーに適合し、オプションのエントリーを削除して ベース ACL エントリーのモードの値をゼロにセットします。 chacl -d '(*.*,*)' myfile ヘッダヘッダ <sys/acl.h><sys/acl.h> ヘッダファイルは ACL あたりのエントリーの数をつかさどる 以降の定数を定義します。
ヘッダ <sys/getaccess.h><sys/getaccess.h> ヘッダは getaccess(2) が用いる定数を定義します。 uid のための特別なパラメータ値:
ngroups のための特別なパラメータ値:
ヘッダ <acllib.h><acllib.h> ヘッダファイルは ACL がサポートするライブラリコールが使ういくつかの定数を定義しています。 acltostr() のための ACL の記号形式: FORM_SHORT さまざまなコールのマジックナンバー: ACL_FILEOWNER ファイルの所有者ID ACL エントリーの有効なモードビットのためのマスク: MODEMASK (R_OK | W_OK | X_OK) <acllib.h> ヘッダは ACL パターンエントリー構造体 struct acl_entry_patt も定義しています。これは次の メンバーを含んでいます。 aclid_t uid; /* user ID */ 警告ACL は通常のファイルやディレクトリに対して使うためのものです。 オプションの ACL エントリーは、 ターミナル スペシャルファイルや LP スケジューラ コントロールファイルなどの、 あるシステムユーティリティが操作するファイルへの使用は奨められません。 これらのユーティリティは chmod(2) の呼出しの結果オプションのエントリーを意図していた制限とともに削除して しまい、予期しないアクセス権限の増加が起きるかもしれません。 ほとんどのサポートされたユーティリティは ACL を正しく取り扱いますが、すべて ではありません。ただし、 fbackup(1M) と frecover(1M) ファイルアーカイブ ユーティリティだけはアクセス制御リスト を正しく扱います。 オプションの ACL エントリーを持ったファイルの ACL を扱えない ( アーカイブプログラム ar(1), cpio(1), ftio(1), tar(1), dump(1M) のような) プログラムを使うときは、 データが失われないように それぞれの参照ページに含まれた ACL 情報に注意してください。 ユーザー名が /etc/passwd ファイルにまたはグループ名が /etc/group ファイルに % または @ として、あるいはパターンに * として定義されている場合、 ACL 構文は、それらの記号が別の意味を持っているので その名前をそれ自身として参照することはできません。 しかし、そのようなユーザーまたはグループ でも ID 番号を用いて参照することはできます。 ユーザー名やグループ名は 以下の文字を含むことはできません。
@(ファイルの所有者またはグループ) や * (ワイルドカード) という記号 を用いた ACL のパターンを、 一方が特定的な値をもち、 他方が @ または * を用いてファイルは等しいがモードの値が異なるという 2 つのエントリーを与えることで、 特定のファイルには適合できず、その所有権 に依存するように指定できます。例えば、 find / -acl '(ajs.%,r)(@.%,rw)' -print は ajs が所有するファイルには適合できません。 制約
ファイル
参照chacl(1), chmod(1), cp(1), find(1), getaccess(1), ln(1), ls(1), lsacl(1), mv(1), rm(1), fbackup(1M), frecover(1M), fsck(1M), fsdb(1M) access(2), chmod(2), chown(2), creat(2), getaccess(2), getacl(2), mknod(2), open(2), setacl(2), stat(2), acltostr(3C), chownacl(3C), cpacl(3C), setaclentry(3C), strtoacl(3C), group(4), passwd(4), privgrp(4), aclv(5) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||