2    システム・リソースの保護

ユーザの識別と認証が終わると,Tru64 UNIX は任意アクセス制御 (DAC: Discretionary Access Control) 機能を使ってシステム・リソース (ディレクトリ,ファイル,デバイス,プロセスなど) へのアクセスを管理します。Tru64 UNIX では,Tru64 UNIX のアクセス許可とアクセス制御リスト (ACL) によって DAC を実現しています。

この章には,次の情報が含まれています。

2.1    アクセス制御の概要

Tru64 UNIX オペレーティング・システム・ソフトウェアは,Tru64 UNIX のアクセス許可と ACL を使ってファイルやディレクトリへのアクセスを制御します。所有ユーザ,所有ユーザ・グループ,およびその他すべてのユーザに対してファイルやディレクトリの読み取り,書き込み,および実行アクセス許可を設定する場合は,Tru64 UNIX のアクセス許可と ACL を使用します。また,特定のユーザやグループに対してファイルやディレクトリの読み取り,書き込み,および実行アクセス許可を設定する場合は,ACL を使用します。

プロセスがファイルやディレクトリへのアクセスを要求すると,以下の手順で Tru64 UNIX のアクセス許可と ACL がチェックされます。

2.2    Tru64 UNIX のアクセス許可

ファイルまたはディレクトリを作成すると,省略時の設定ではオペレーティング・システムまたは実行しているプログラムが Tru64 UNIX の読み取り,書き込み,および実行の各アクセス許可を次の 3 種類のユーザに割り当てます。

表 2-1 に,ファイルおよびディレクトリに適用される Tru64 UNIX のアクセス許可コードを示します。

表 2-1:  Tru64 UNIX のアクセス許可コード

アクセス許可コード ファイル ディレクトリ
r (読み取り) 内容の表示やプリントができます。 内容を読むことはできるが検索はできません。通常 r と x は一緒に使用されます。
w (書き込み) 内容の変更や削除ができます。 エントリの追加や削除ができます。
x (実行) ファイルをプログラムとして実行できます。 ディレクトリを検索できます。

2.2.1    ファイルとディレクトリに対する Tru64 UNIX のアクセス許可の表示

ファイルに対する Tru64 UNIX のアクセス許可を表示するには,次のコマンドを入力します。

$ ls -l filename

filename エントリは複数個指定できます。

カレント・ディレクトリ内のファイルとサブディレクトリに対する Tru64 UNIX のアクセス許可を表示するには,次のように ls -l コマンドを入力します。

$ ls -l 
total 7 
-rw-r--r--  1 larry  system  101 Jun 5 10:03 file1 
-rw-r--r--  1 larry  system  171 Jun 5 10:03 file2 
-rw-r--r--  1 larry  system  130 Jun 5 10:06 file3 
drwxr-xr-x  2 larry  system   32 Jun 5 10:07 project 
-rw-r--r--  1 larry  system    0 Jun 5 11:03 record1 
-rw-r--r--  1 larry  system    0 Jun 5 11:03 record6 
drwxr-xr-x  2 larry  system   32 Jun 5 10:31 reports $

各行の先頭フィールドには,アクセス許可コードが表示されます。アクセス許可コードは,エントリのタイプとユーザ,グループ,および world に対するアクセス許可セットを示しています。先頭のダッシュ (-) は,エントリがファイルであることを示します。2 番目以降のダッシュは,該当するクラスのユーザがその操作に関するアクセス許可を持っていないことを示します。図 2-1 は,アクセス許可フィールドについて説明した図です。

図 2-1:  ファイルに対する Tru64 UNIX のアクセス許可フィールド

注意

ls コマンドで表示したファイルの所有者,グループ,およびその他すべてのユーザに対するアクセス許可によってプロセスがファイルにアクセスできることが示されていても,そのファイルの ACL がプロセスに対してアクセスを許可しない場合もあります。これは,そのプロセスがファイルのグループと同じ実効グループを持っている場合についても同じです。ACL の詳細については,2.3 節を参照してください。

2.2.2    ファイルとディレクトリに対するアクセス許可の設定 (chmod)

ユーザが自分のファイルやディレクトリに対するアクセス許可を設定または変更するときは,chmod (change mode) コマンドを使用します。ファイルやディレクトリのアクセス許可を設定または変更できるのは,そのファイルまたはディレクトリの所有者と root ユーザだけです。

通常,ユーザは自分自身にファイルの読み取り,書き込み,および実行のアクセスを許可します。自分のグループのメンバにはファイルの読み取りアクセスと,仕事の性質やグループの構成に応じて変更や実行のアクセスを許可します。その他すべてのユーザについては,ファイルへのあらゆる種類のアクセスを禁止します。

ファイルやディレクトリにどのようなアクセス許可を設定しても,root ユーザがいつでもそれらを変更できるという点を理解しておくことが重要です。たとえば,ユーザが chmod コマンドを使って自分だけが report20 ファイルにアクセスできるように指定しても,依然として root ユーザはこのファイルにアクセスできます。

chmod コマンドによってアクセス許可セットを指定する方法には,次の 2 種類があります。

2.2.2.1    文字と演算記号を使ってアクセス許可を指定する方法

文字と演算記号を使ってファイルやディレクトリのアクセス許可を変更できます。

以下は,文字と演算記号を使う場合の chmod コマンドの形式です。

chmod userclass-operation-permission filename

userclass-operation-permission エントリは,実際には次のように 3 つのコードを表しています。

filename エントリには,アクセス許可を変更するファイルの名前を指定します (複数指定も可能)。パターン・マッチング文字を使ってファイルを指定することもできます。詳細については,2.2.2.1.3 項を参照してください。

2.2.2.1.1    ファイルのアクセス許可の変更

file1 という名前のファイルに対するアクセス許可を変更するときは,以下の手順に従います。

  1. file1 に対するアクセス許可を表示します。

    $ ls -l file1
    -rw-r--r--   1 larry    system     101 Jun  5 10:03 file1
    

    所有者 (larry) は読み取り/書き込みのアクセス許可を持ち,グループとその他のユーザは読み取りアクセス許可だけを持っています。

  2. グループ (g) とその他のユーザ (o) の両方のアクセス許可を拡張するには,既存の読み取り (r) アクセスに加えて書き込みアクセス (+w) を file1 に許可します。

    $ chmod go+w file1
    

  3. ファイルの新しいアクセス許可を表示します。

    $ ls -l file1
    -rw-rw-rw-  1 larry    system     101 Jun  5 10:03 file1
    

    グループと他のすべてのシステム・ユーザが file1 に対して読み取りと書き込み (rw) のアクセス許可を持っています。

2.2.2.1.2    ディレクトリのアクセス許可の変更

ディレクトリのアクセス許可の変更手順は,ファイルのアクセス許可を変更する場合と同じです。ただし,ディレクトリについての情報を表示するときは,ls -ld コマンドを入力します。

project という名前のディレクトリに対するアクセス許可を変更するときは,以下の手順に従います。

  1. project に対するアクセス許可を表示します。

    $ ls -ld project
    drwxr-xr-x  2 larry  system  32 Jun 5 10:07 project
    

  2. グループ (g) のアクセス許可を拡張するには,既存の読み取りと実行 (r-x) のアクセスに加えて書き込みアクセス (+w) を project に許可します。

    $ chmod g+w project
     
     
    

  3. 新しいディレクトリのアクセス許可を表示します。

    $ ls -ld project
    drwxrwxr-x  2 larry  system  32 Jun 5 10:07 project
    

    グループが project ディレクトリに対して読み取り,書き込み,および実行 (rwx) のアクセス許可を持っています。

2.2.2.1.3    パターン・マッチング文字の使用

ディレクトリ内のすべてのエントリに対して同じ変更を行いたいときは,chmod コマンドでパターンマッチング文字のアスタリスク (*) を使用できます。

カレント・ディレクトリ内のすべてのファイル (*) に対する実行 (x) アクセスをグループ (g) に許可するには,次のコマンドを入力します。

$ chmod g+x *

カレント・ディレクトリ内のすべてのファイルに対する新しいグループのアクセス許可を表示するには,次のコマンドを入力します。

$ ls -l
total 7
-rw-rwxrw-  1 larry  system  101 Jun 5 10:03 file1
-rw-r-xr--  1 larry  system  171 Jun 5 10:03 file2
-rw-r-xr--  1 larry  system  130 Jun 5 10:06 file3
drwxrwxr-x  2 larry  system   32 Jun 5 10:07 project
-rw-r-xr--  1 larry  system    0 Jun 5 11:03 record1
-rw-r-xr--  1 larry  system    0 Jun 5 11:03 record6
drwxr-xr-x  2 larry  system   32 Jun 5 10:31 reports

2.2.2.1.4    絶対アクセス許可の設定

絶対アクセス許可 (=) の割り当ては,ファイル (複数も可) に対するすべてのアクセス許可をそれまでの設定状態に関係なくリセットします。

file3 というファイルに対するすべてのアクセス許可をリセットするときは,以下の手順に従います。

  1. ファイルのアクセス許可を表示します。

    $ ls -l file3
    -rw-r-x-r--  1 larry  system  130 Jun 5 10:06 file3
     
     
    

  2. すべてのユーザ (a) に 3 つのアクセス許可 (rwx) をすべて割り当てます。

    $ chmod a=rwx file3
     
     
    

  3. ファイルの新しいアクセス許可を表示します。

    $ ls -l file3
    -rwxrwxrwx   1 larry  system  130 Jun 5 10:06 file3
    

絶対アクセス許可の割り当ては,アクセス許可を削除する場合にも適用できます。

file3 というファイルに対する実行アクセス許可を削除するときは,以下の手順に従います。

  1. file3 からすべてのグループ (a) に対する実行アクセス許可 (x) を削除します。

    $ chmod a=rw file3
     
     
    

  2. ファイルの新しいアクセス許可を表示します。

    $ ls -l file3
    -rw-rw-rw-   1 larry  system  130 Jun 5 10:06 file3
    $
    

2.2.2.2    8 進数を使ってアクセス許可を指定する方法

8 進数を使ってファイルやディレクトリのアクセス許可を変更できます。

以下は,8 進数を使う場合の chmod コマンドの形式です。

chmod octalnumber filename

octalnumber エントリには,所有者,グループ,その他のユーザに対するアクセス許可を指定する 3 桁の 8 進数を指定します。filename エントリには,アクセス許可を変更するファイルの名前 (またはスペースで区切ったファイル名のリスト) を指定します。パターン・マッチング文字を使ってファイルを指定することもできます。詳細については,2.2.2.1.3 項を参照してください。

8 進数は,次のようにアクセス許可の種類に対応しています。

4 = 読み取り (r) 2 = 書き込み (w) 1 = 実行 (x)

1 つのアクセス許可フィールドに対するアクセス許可をまとめて指定するには,次のように該当する 8 進数を合計します。

3 = -wx (2 + 1) 6 = rw- (4 + 2) 7 = rwx (4 + 2 + 1) 0 = --- (アクセス許可なし)

表 2-2 にアクセス許可を示す 8 進数の可能な組み合わせを示します。

表 2-2:  アクセス許可を示す 8 進数の組み合わせ

8 進数 2 進数 アクセス許可 説明
0 000 なし アクセスは一切許可されない
1 001 --x 実行
2 010 -w- 書き込み
3 011 -wx 書き込み/実行
4 100 r-- 読み取り
5 101 r-x 読み取り/実行
6 110 rw- 読み取り/書き込み
7 111 rwx 読み取り/書き込み/実行

ファイルやディレクトリのアクセス許可コード全体は 3 桁の 8 進数で指定します。各桁の数値は,それぞれ ownergroup,および others に対応します。 表 2-3 に一般的なアクセス許可コードと各アクセス許可フィールドとの対応関係を示します。

表 2-3:  8 進数とアクセス許可フィールドの対応関係

8 進数 owner フィールド group フィールド others フィールド 完全なコード
777 rwx rwx rwx rwxrwxrwx
755 rwx r-x r-x rwxr-xr-x
700 rwx --- --- rwx------
666 rw- rw- rw- rw-rw-rw-

例 2-1 では,ls -l コマンドで file3 というファイルのアクセス許可を表示しています。次に,chmod 754 コマンドによって,ユーザには 3 つのアクセス許可すべて (rwx) を,グループには読み取りと実行のアクセス許可 (rx) を,他のすべてのユーザには読み取りアクセス許可のみ (r) をそれぞれ割り当てています。

例 2-1:  8 進数によるアクセス許可の設定

$ ls -l file3
-rw-rw-rw-  1 larry  system  130 Jun 5 10:06 file3
$ chmod 754 file3
$ ls -l file3
-rwxr-xr--  1 larry  system  130 Jun 5 10:06 file3
$

2.2.3    省略時のアクセス許可の設定

ファイルまたはディレクトリを作成すると,省略時のアクセス許可が設定されます。省略時のアクセス許可は,オペレーティング・システムか,そのファイルまたはディレクトリを作成したプログラムのどちらかによって設定されます。省略時のアクセス許可を設定することにより,ユーザはファイルやディレクトリを作成するたびにアクセス許可コードを明示的に指定する作業から解放されます。オペレーティング・システムは,省略時のアクセス許可値として実行可能ファイルに読み取り,書き込み,実行 (777) を,それ以外のすべてのファイルに読み取りと書き込み (666) をそれぞれ割り当てます。

新規に作成するファイルおよびディレクトリに対する省略時のアクセス許可を変更するには,umask コマンドを使ってユーザ・マスクを設定します。ユーザ・マスクは,ファイルやディレクトリを作成したときの省略時のデフォルトのアクセス許可を決定する数値です。ファイルやディレクトリを作成すると,作成したプログラムが指定するアクセス許可の種類からユーザ・マスク値によって禁止された種類を差し引いた値がアクセス許可として設定されます。

以下は,umask コマンドの形式です。

umask octal_number

octal_number エントリには,省略時のアクセス許可 (777 または 666) から差し引くアクセス許可を示す 3 桁の 8 進数を指定します。

ユーザ・マスクの設定は,8 進数を使ったアクセス許可の設定とほぼ同じです (2.2.2.2 項)。ファイルやディレクトリのアクセス許可コードを 3 桁の 8 進数で指定します。各桁は,アクセス許可の種類を示します。各桁 (1 桁目,2 桁目,3 桁目) は,次の対応関係を持つ 3 ビットの値を表します。

ユーザ・マスクを設定すると,実際には作成したプログラムの要求に関係なく許可しないアクセスの種類が指定されます。表 2-4 にユーザ・マスクのアクセス許可の組み合わせを示します。umask のアクセス許可値は,通常のアクセス許可コードに指定する値とは逆になっています。

表 2-4:  ユーザ・マスクのアクセス許可の組み合わせ

各桁の値 許可されるアクセス 説明
0 rwx 読み取り/書き込み/実行
1 rw- 読み取り/書き込み
2 r-x 読み取り/実行
3 r-- 読み取り
4 -wx 書き込み/実行
5 -w- 書き込み
6 --x 実行
7 --- アクセスは一切許可されない

たとえば,(実行可能ファイルに対して) 027 というユーザ・マスクを指定すると,次のような結果になります。

省略時のユーザ・マスクは 022 です。これは,所有者にすべてのアクセスを許可し,ユーザ・グループと他のすべてのユーザには所有者のファイルへの書き込みを許可しないことを示します。

自分が所有するファイルやディレクトリに設定するユーザ・マスクの適切な値は,システム上の情報リソースがどの程度自由に共有されているかによって変わります。次のガイドラインを参考にしてください。

ユーザ・マスクのしくみを理解するため,次のコマンドを入力した場合を考えます。

$ umask 037

このコマンドにより,実行可能ファイルに対して Tru64 UNIX のアクセス許可コード 740 (Tru64 UNIX の省略時のアクセス許可コード 777 から umask のコード 037 を差し引いた値) が設定され,次のような結果が得られます。

さらに,単純にファイルを作成した場合を考えます。省略時では,所有者にすべてのアクセスを許可し,他のすべてのユーザに読み取りと実行だけを許可する省略時のアクセス許可がテキスト・エディタによって常に割り当てられます。ここでは,既にユーザ・マスク 037 が設定されているので,ファイルのアクセス許可がさらに制限されます。この結果,所有者にはすべてのアクセスが許可されますが,グループはファイルを実行できなくなり,他のすべてのユーザにはアクセスが一切許可されません。

2.2.3.1    ユーザ・マスクの設定

ユーザ・マスクは,次のいずれかの方法で設定します。

次の手順は,テキスト・エディタを使って作成するファイルのアクセス許可をユーザ・マスクによってどのように制限するかを詳しく示した例です。

  1. ユーザ・マスクの現在の値を表示します。

    $ umask
    

  2. ユーザ・マスクの値を 000 に設定して,ファイル作成プログラムによって設定されるアクセス許可に制限が一切かからないようにします。ユーザ・マスクの値を元に戻す必要がある場合は,値をリセットする前に必ず現在の値を書き留めてください。

    $ umask 000
    

  3. ファイルを作成して保存し,テキスト・エディタを終了します。

  4. 作成したファイルのアクセス許可を表示します。ここでは,すべてのユーザに読み取りおよび書き込みのアクセスが許可されるものとします。

    $ ls -l
    -rw-rw-rw-  1 user-name   15 Oct 27 14:42 yourfile
    

  5. ユーザ・マスクを 022 にリセットします。

    $ umask 022
    

    ユーザ・マスク 022 により,所有者にはすべてのアクセスを許可し,他のすべてのユーザには読み取りおよび実行のアクセスだけを許可するというアクセス許可制限が設定されます。

  6. もう 1 つのファイルを作成して保存し,テキスト・エディタを終了します。

  7. 作成したファイルのアクセス許可を表示します。

    $ ls -l
    -rw-r--r--  1  user-name   15 Oct 27 14:45 yourfile2
    

    ユーザ・マスクの値 022 に従って,グループと他のすべてのユーザに対する書き込みアクセス許可が取り消されています。

  8. ユーザ・マスクを元の値または別の値にリセットする (必要に応じて)。

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

ACL は,ファイルおよびディレクトリに対する Tru64 UNIX のアクセス許可の機能拡張です。ACL を使用すると,ファイルやディレクトリのアクセス許可を特定のユーザやグループごとに設定することができます。ファイルやディレクトリに対する通常のアクセス許可とは別に,ACL にはアクセス許可が個別に指定されたユーザやグループのリストが含まれています。

1 つのファイルには,1 つの ACL (アクセス ACL) を対応付けることができます。1 つのディレクトリには,3 つの ACL (アクセス ACL,省略時アクセス ACL,および省略時ディレクトリ ACL) を対応付けることができます。アクセス ACL は,ファイルやディレクトリにアクセスできるユーザを決定するために使われます。各省略時 ACL は,ディレクトリ内に作成されるファイルやサブディレクトリに継承する ACL を決定するために使われます。

ACL はいつでも設定できますが,ACL のアクセス・チェックや継承は ACL を有効にしたときのみ行われます。システム上で ACL を無効にすると,ACL コマンドの実行時に警告メッセージが表示されます。また,ファイル・システムによっては ACL をサポートしないものがあります。ACL を設定できるのは,ACL をサポートするファイル・システム上のファイルとディレクトリだけです。

ACL は,ファイルやディレクトリのプロパティ・リストに保存された拡張ファイル属性です。システム上で ACL を無効にした場合も,プロパティ・リストをサポートするファイル・システム上の任意のファイルやディレクトリに ACL を対応付けることができます。ACL のアクセス・チェックや継承は ACL を有効にしたときのみ行われます。詳細については, acl(4) および proplist(4) を参照してください。

次のファイル・システムは,プロパティ・リストをサポートしています。

2.3.1    ACL の有効化と無効化

ACL サブシステムは基本システムの一部として出荷されますが,基本システムの構成要素は現行の動作に ACL を必要としないため,ACL に関するファイルは組み込まれていません。ACL を使う場合や,レイヤード・プロダクトが ACL のサポートを必要とする場合は,ACL を有効にする必要があります。

システム起動時に ACL を有効にするには,secconfig ユーティリティを使用するか,または次の手順に従います。

  1. 次のように,ACL モードを enable にするエントリを含む stanza ファイルを作成します。

    sec:
        acl_mode = enable
    

  2. /etc/sysconfigtab ファイルを更新します。

    # sysconfigdb -m -f acl_mode.stanza sec
    

ACL を無効にするには,次のコマンドを入力します。

# sysconfig -r sec acl_mode=disable

注意

ACL を無効にすると,ACL でアクセスを禁止しているファイルやディレクトリに対してプロセスがアクセスできるようになります。このため,NFS を使ってファイルを共有するシステムでは,共通のセキュリティ・ドメインを持つことが特に重要です。

ACL を無効にしてもファイルやディレクトリに ACL を設定できますが,その場合はアクセス許可のチェックに ACL が使われず,新規に作成したファイルやディレクトリには省略時 ACL が継承されません。

2.3.1.1    NFS 上での ACL の有効化

NFSv3 を使用していて,Tru64 UNIX NFS サーバで ACL が有効ならば,ACL のアクセス・チェックと NFS クライアントからの ACL の継承が適切に行われます。ただし,NFS クアイアントで ACL を設定できるようにするには,次の手順を実行する必要があります。

  1. NFS サーバ上で,プロパティ・リストのデーモン (proplistd) を起動します。

    # /usr/sbin/proplistd 4
    

  2. NFS クライアント上で,次のいずれかの方法を使って proplist オプション付きでファイル・システムをマウントします。

注意

ACL を使う場合は,NFSv2 は使用できません。NFSv2 のプロトコル上の制限により,NFSv2 を使用すると ACL が必ずしも適用されない可能性があります。詳細については, acl(4) の nfs-flatten-mode を参照してください。

2.3.2    ACL の構造

ACL は,ACL エントリのリストで構成されます。各 ACL には,少なくとも次の 3 つのエントリがあります。

これらのエントリは,ファイルやディレクトリに対する Tru64 UNIX のアクセス許可に対応しています。コマンドによってこれらの ACL エントリを変更すると,Tru64 UNIX のアクセス許可も変更されます。

ACL の外部 (印字可能) 表現は,カンマ (,) または改行で区切られたエントリで構成されます。ACL エントリ内のフィールドはコロン (:) で区切られます。次の例は,典型的な ACL エントリです。

user::rwx
user:peter:r-w
user:sam:r-x
group::rwx
other::---
 
 

ACL エントリのキーワードと修飾子は以下のように定義されています。

user::

修飾子フィールドが空の user エントリは,ファイルを所有するユーザのアクセス許可を定義します。このエントリ (所有ユーザ・エントリと呼ばれる) は,UNIX のユーザに対するアクセス許可と常に同じです。ACL には,user:: エントリが 1 つだけ含まれていなければなりません。

user:

修飾子フィールドが空でない user エントリは,修飾子フィールドで指定されたユーザのアクセス許可を定義します。修飾子フィールドには,ユーザ名とユーザ識別情報 (UID) のどちらかが含まれていなければなりません。ACL には 0 または 1 個以上の user: エントリを含めることができます。

group::

修飾子フィールドが空の group エントリは,ファイルを所有するグループのメンバのアクセス許可を定義します。このエントリ (所有グループ・エントリと呼ばれる) は,UNIX のグループに対するアクセス許可と常に同じです。ACL には,group:: エントリが 1 つだけ含まれていなければなりません。

group:

修飾子フィールドが空でない group エントリは,修飾子フィールドで指定されたグループのメンバのアクセス許可を定義します。修飾子フィールドには,グループ名とグループ識別情報 (GID) のどちらかが含まれていなければなりません。ACL には 0 または 1 個以上の group: エントリを含めることができます。

other::

other エントリは,修飾子が空の場合のみ有効です。このエントリは,ACL の他のエントリのどれとも一致しないユーザすべてのアクセス許可を定義します。このエントリは,UNIX の other に対するアクセス許可と常に同じです。ACL には,other:: エントリが 1 つだけ含まれていなければなりません。

アクセス許可フィールドの文字列は,ls コマンドで Tru64 UNIX のアクセス許可を表示したときの文字列と同じで,順序も同じです。r は読み取りアクセス,w は書き込みアクセス,x は実行または検索アクセスを示します。これらの文字の代わりにハイフン (-) が使われている場合は,そのアクセスが拒否されることを示します。

ACL の user,group,other の各エントリは,そのファイルまたはディレクトリに対する Tru64 UNIX のアクセス許可に対応しています。ACL が有効で,chmod コマンドを使用してファイルやディレクトリの Tru64 UNIX のアクセス許可を変更した場合,chmod は所有ユーザ・エントリ,所有グループ・エントリ,および other エントリ用のアクセス ACL を適切に変更します。

表 2-5 に一般的な ACL エントリを示します。

表 2-5:  ACL エントリの例

エントリ 照合基準
group:acct:r-- acct グループのすべてのユーザに対し,読み取りを許可します。
user:joe:rw- ユーザ joe に対し,読み取りと書き込みを許可します。
user::rwx オブジェクトの所有ユーザ (ファイルの作成後に所有ユーザが変更された場合も含む) に対し,読み取り,書き込み,および実行を許可します。
group::r-- オブジェクトの所有グループ (ファイルの作成後に所有グループが変更された場合も含む) に対し,読み取りを許可します。
other::r-- 所有ユーザ,所有グループ,および ACL エントリにリストされたユーザとグループを除くすべてのユーザおよびグループに対し,読み取りを許可します。

2.3.3    ACL を使ったアクセス・チェック

ファイルまたはディレクトリにアクセス ACL が設定されている場合は,そのファイルまたはディレクトリへのアクセスを許可する前に追加的なアクセス・チェックが実行されます。具体的には,次のチェックが次の順序で実行されます。

  1. プロセスにスーパユーザ権限がある場合,ファイルやディレクトリへのアクセスが許可されます。アクセス ACL と Tru64 UNIX のアクセス許可はチェックされません。

  2. ACL が無効になっている場合や,ACL は有効になっているがファイルやディレクトリに対応するアクセス ACL がない場合は,Tru64 UNIX のアクセス許可がチェックされます。

  3. ファイルやディレクトリに対するアクセス ACL の追加エントリは,以下のようにチェックされます。

    1. プロセスのユーザ ID (UID) がオブジェクトの所有者のものである場合,所有ユーザ (user::) のエントリに指定されたアクセスが許可されます。他の ACL エントリはチェックされません。これは,Tru64 UNIX の user に対するアクセス許可を使用するのと同じです。

    2. プロセスの UID が user: エントリに指定された UID に一致するか,または user: エントリに指定されたユーザ名で解決できる場合,そのエントリに指定されたアクセスが許可されます。他の残りの ACL エントリはチェックされません。

    3. プロセスのグループ ID (GID) がファイルの GID に一致するか,またはプロセスの補助グループのうち 1 つがファイルの GID に一致する場合,group:: エントリと (次のリスト項目で説明するように) 一致する他の group: エントリのアクセス許可を合わせたものがそのプロセスに対して許可されます。

    4. プロセスの GID がいずれかの group: エントリの GID に一致するか,いずれかの group: エントリに指定されたグループ名で解決できる場合,またはプロセスのいずれかの補助グループの GID またはグループ名が ACL のいずれかの group: エントリに一致する場合は,一致するすべてのグループ・エントリの保護属性 (アクセス許可) を合わせたものがそのプロセスに対して許可されます。たとえば,グループ sales とグループ eng に属するユーザがいて,ファイルのアクセス ACL がグループ sales に読み取りアクセスを許可し,グループ eng に書き込みアクセスを許可する場合,そのユーザにはそのファイルに対する読み取りと書き込みのアクセスが許可されます。

    5. other:: エントリで指定されたアクセスが許可されます。これは,Tru64 UNIX の other に対するアクセス許可を使用するのと同じです。

注意

Tru64 UNIX のアクセス許可を持つファイルやディレクトリと 3 つの必須エントリ (user::group::,および other::) だけを含むアクセス ACL を持つファイルやディレクトリは,区別できません。

2.3.4    ACL の継承

ファイルやディレクトリを作成すると,親ディレクトリから ACL が継承されます。親ディレクトリ内に作成したファイルやサブディレクトリに継承される ACL は,省略時 ACL によって次のように決定されます。

ディレクトリに省略時 ACL を設定しても,そのディレクトリ内の既存のファイルやサブディレクトリの ACL は変更されません。

2.3.4.1    ACL の継承の例

ACL の継承の例を以下に示します。

2.3.5    ACL の管理

以下のコマンドを使って,ACL の表示や変更を行います。

dxsetacl

ファイルやディレクトリの ACL を作成,表示,および変更するためのグラフィック・インタフェースです。

getacl

ファイルやディレクトリの ACL を表示します。

setacl

ファイルやディレクトリの ACL を作成,変更,および削除します。

注意

ファイルまたはディレクトリの ACL を作成,変更,削除するには,あらかじめそのファイルまたはディレクトリの所有者になる (またはスーパーユーザ特権を持つ) 必要があります。

2.3.5.1    dxsetacl インタフェースの使用

dxsetacl グラフィカル・インタフェースを使って,ファイルやディレクトリの ACL を作成,表示,および変更することができます。dxsetacl インタフェースは,「アプリケーション・マネージャ」の「CDE デスクトップ・アプリケーション」の中にあります。また,コマンド行で次のコマンドを実行して開くこともできます。

 
% /usr/bin/X11/dxsetacl &

詳細については, dxsetacl(1)dxsetacl のオンライン・ヘルプを参照してください。

2.3.5.2    getacl コマンドの使用

ファイルやディレクトリの ACL を表示するには,getacl コマンドを使います。例 2-2 では,getacl file.txt コマンドによって file.txt というファイルの ACL を表示しています。

例 2-2:  ファイルの ACL の表示

$ getacl file.txt
#
# file: file.txt
# owner: peter
# group:system
#
user::rw-
user:jdoe:rw-
group::r--
other::r--

getacl コマンドを使って,アクセス ACL が設定されていないファイルやディレクトリの ACL を表示すると,Tru64 UNIX のアクセス許可が ACL の形式で表示されます。

詳細については, getacl(1) を参照してください。

2.3.5.3    setacl コマンドの使用

setacl コマンドを使って,ファイルやディレクトリの ACL を作成,変更,または削除することができます。例 2-3 では,getacl file.txt コマンドによって file.txt というファイルの ACL を表示しています。続いて,setacl コマンドによって ACL を更新しています。

例 2-3:  ファイルに対する ACL の設定

$ getacl file.txt
#
# file: file.txt
# owner: peter
# group:system
#
user::rw-
user:jdoe:rw-
group::r--
other::r--
$ setacl -u group::rw-,user:evan:rw- file.txt 
$ getacl file.txt
#
# file: file.txt
# owner: peter
# group:system
#
user::rw-
user:jdoe:rw-
user:evan:rw-
group::rw-
other::r--
 
 

所有グループのエントリが更新され,書き込みアクセス許可が追加されています。evan というユーザ・エントリは既存のエントリと一致しないので,読み取りと書き込みのアクセス許可とともに追加されています。other エントリは変更されていません。

詳細については, setacl(1) を参照してください。

2.3.6    コマンドやアプリケーションと ACL の相互作用

ACL は,POSIX P1003.6 ドラフト 13 に基づく,POSIX および System V 互換の UNIX 拡張です。既存のすべてのコマンド,ユーティリティ,およびアプリケーション (特に POSIX 互換でないアプリケーション) が ACL を適切に使用または伝達するとは限りません。このため,コマンド,ユーティリティ,またはアプリケーションを使って ACL が設定されているファイル・システム・オブジェクト (ファイルまたはディレクトリ) をアクセスまたは操作した場合は,処理の完了後に ACL が削除または変更されていないことを確認する必要があります。

ファイルを変更するプログラムの多くは,以下の手順で処理を実行します。

変更しているファイルに ACL があっても,ファイルの一時的なバージョンの作成時にプログラムが ACL を複製しない場合,上記の手順ではファイルの ACL が削除されるか,または (もしあれば) 親ディレクトリの省略時アクセス ACL で置き換えられます。ACL を持つファイルに対してそのようなプログラムを使用した場合は,後で ACL を復元しなければなりません。また,この手順ではファイルからハード・リンクが削除されます。この方法でファイルを変更する一般的なコマンドには,以下のものがあります。

この問題を回避するには,元のファイルを一時ファイルへコピーし,一時ファイルに対して処理を行ってから,-p オプションを指定せずに cp を実行して,元のファイルにコピーし戻します。この手順によって元の ACL を維持できます。

ACL のあるファイルをコピーするときは,必ず cp -p コマンドを使って ACL やその他の拡張属性 (プロパティ・リスト) を正しくコピーしてください。

2.3.6.1    pax コマンドと tar コマンド

pax コマンドと tar コマンドは,特に指定がなければアーカイブ作成時にファイルやディレクトリの ACL とその他の拡張属性をアーカイブします。ただし,pax コマンドや tar コマンドを使ってアーカイブからファイルおよびディレクトリを抽出するときは,特に指定されない限りアーカイブされたファイルやディレクトリの ACL がアーカイブから抽出されません。この場合,格納先のディレクトリに省略時 ACL が定義されていれば,アーカイブから抽出したファイルおよびディレクトリはその省略時 ACL を継承します (2.3.4 項)。

アーカイブから ACL やプロパティ・リストの情報を復元するには,アーカイブからファイルやディレクトリを抽出する際に tar コマンドには -p オプションを指定し,pax コマンドには -p p または -p e オプションを指定します。pax コマンドと tar コマンドは,ACL のユーザおよびグループの情報を UID および GID として保存します。したがって,tar -ppax -p p または pax -p e コマンドを使って,アーカイブ元のシステムとユーザやグループの情報を共有していないシステム上にアーカイブを復元すると,意図していないファイル・アクセスを許可する可能性があります。

現時点では,ACL および拡張属性 (プロパティ・リスト) についての正式な業界標準はありません。このため,pax コマンドと tar コマンドでプロパティ・リストと ACL をサポートする機能拡張は,Tru64 UNIX 独自のものです。他のベンダの pax および tar では,Tru64 UNIX 独自の機能拡張は無視されます。ただし,他のベンダのシステムとの相互運用性を確保するためには,複数のベンダに配布するアーカイブの作成時に -V オプションを指定して,ACL やその他の拡張属性がアーカイブされないようにしてください。

2.3.6.2    アーカイブ・コマンド

アーカイブ・コマンドの dumprdumprestorerrestorevdumprvdumpvrestore,および rvrestore は,常に ACL を含むすべての拡張属性 (プロパティ・リスト) を保存および復元します。このため,省略時ディレクトリ ACL または省略時アクセス ACL を持つディレクトリにファイルを抽出すると,抽出されたファイルに対して予期しない ACL が作成されることがあります。ACL がで有効になっているシステムでは,抽出の終了後に必ずすべての ACL を確認してください。