ユーザの識別と認証が終わると,Tru64 UNIX は任意アクセス制御 (DAC: Discretionary Access Control) 機能を使ってシステム・リソース (ディレクトリ,ファイル,デバイス,プロセスなど) へのアクセスを管理します。Tru64 UNIX では,Tru64 UNIX のアクセス許可とアクセス制御リスト (ACL) によって DAC を実現しています。
この章には,次の情報が含まれています。
Tru64 UNIX オペレーティング・システム・ソフトウェアは,Tru64 UNIX のアクセス許可と ACL を使ってファイルやディレクトリへのアクセスを制御します。所有ユーザ,所有ユーザ・グループ,およびその他すべてのユーザに対してファイルやディレクトリの読み取り,書き込み,および実行アクセス許可を設定する場合は,Tru64 UNIX のアクセス許可と ACL を使用します。また,特定のユーザやグループに対してファイルやディレクトリの読み取り,書き込み,および実行アクセス許可を設定する場合は,ACL を使用します。
プロセスがファイルやディレクトリへのアクセスを要求すると,以下の手順で Tru64 UNIX のアクセス許可と ACL がチェックされます。
要求しているプロセスに root ユーザ特権がある場合は,ファイルやディレクトリへのアクセスが許可されます。ACL や Tru64 UNIX のアクセス許可はチェックされません。
ACL が無効になっている場合,または該当するファイルやディレクトリに対応する ACL がない場合は,Tru64 UNIX のアクセス許可がチェックされます。
ACL が有効になっていて,該当するファイルやディレクトリに対応する ACL がある場合は,サーバが要求されたリソースへのパスに含まれる各オブジェクトの ACL を収集して,アクセスの可否を決定します。アクセスを禁止する ACL が 1 つでもパスに含まていれる場合は,アクセスが拒否されます。
ファイルまたはディレクトリを作成すると,省略時の設定ではオペレーティング・システムまたは実行しているプログラムが Tru64 UNIX の読み取り,書き込み,および実行の各アクセス許可を次の 3 種類のユーザに割り当てます。
u (ユーザ/所有者)
g (グループ)
o (他のすべてのユーザ/world とも呼ばれる)
表 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 種類があります。
文字と演算記号を使ってアクセス許可を指定する方法
8 進数を使ってアクセス許可を指定する方法
2.2.2.1 文字と演算記号を使ってアクセス許可を指定する方法
文字と演算記号を使ってファイルやディレクトリのアクセス許可を変更できます。
以下は,文字と演算記号を使う場合の
chmod
コマンドの形式です。
chmod
userclass-operation-permission filename
userclass-operation-permission エントリは,実際には次のように 3 つのコードを表しています。
userclass には,次のいずれかの文字を指定します。
u
―― ユーザ (所有者) を示します。
g
―― グループを示します。
o
―― 他のすべてのユーザ (所有者とグループを除く) を示します。
a
―― すべてのユーザ (ユーザ,グループ,および他のすべてのユーザ) を示します。
operation には,次のいずれかの記号を指定します。
+
―― アクセス許可を追加します。
-
―― アクセス許可を削除します。
=
―― それまでの設定に関係なくアクセス許可を割り当てます。
permission には,次のいずれかの文字を指定します。
r
。読み取りを示します。
s
。ユーザまたはグループの ID を設定します。このアクセス許可は,ファイル実行中の実効ユーザ ID またはグループ ID をそのファイルの所有者またはグループ所有者の ID に設定します。このアクセス許可は,u または g の
userclass
エントリとともに設定して,通常は他のユーザがアクセスできないファイルに一時的または限定的なアクセスを許可する場合に使用します。ls
-l
コマンドを使ってアクセス許可を表示すると,ユーザまたはグループの実行許可の位置に
s
が表示され,設定したユーザ ID または設定したグループ ID のアクセス許可でファイルが実行されることが示されます。
w
―― 書き込みを示します。
x
―― 実行を示します。
filename
エントリには,アクセス許可を変更するファイルの名前を指定します (複数指定も可能)。パターン・マッチング文字を使ってファイルを指定することもできます。詳細については,2.2.2.1.3 項を参照してください。
2.2.2.1.1 ファイルのアクセス許可の変更
file1
という名前のファイルに対するアクセス許可を変更するときは,以下の手順に従います。
file1
に対するアクセス許可を表示します。
$ ls -l file1 -rw-r--r-- 1 larry system 101 Jun 5 10:03 file1
所有者 (larry
) は読み取り/書き込みのアクセス許可を持ち,グループとその他のユーザは読み取りアクセス許可だけを持っています。
グループ (g
) とその他のユーザ (o
) の両方のアクセス許可を拡張するには,既存の読み取り (r
) アクセスに加えて書き込みアクセス (+w
) を
file1
に許可します。
$ chmod go+w file1
ファイルの新しいアクセス許可を表示します。
$ ls -l file1 -rw-rw-rw- 1 larry system 101 Jun 5 10:03 file1
グループと他のすべてのシステム・ユーザが
file1
に対して読み取りと書き込み (rw
) のアクセス許可を持っています。
ディレクトリのアクセス許可の変更手順は,ファイルのアクセス許可を変更する場合と同じです。ただし,ディレクトリについての情報を表示するときは,ls -ld
コマンドを入力します。
project
という名前のディレクトリに対するアクセス許可を変更するときは,以下の手順に従います。
project
に対するアクセス許可を表示します。
$ ls -ld project drwxr-xr-x 2 larry system 32 Jun 5 10:07 project
グループ (g
) のアクセス許可を拡張するには,既存の読み取りと実行 (r-x
) のアクセスに加えて書き込みアクセス (+w
) を
project
に許可します。
$ chmod g+w project
新しいディレクトリのアクセス許可を表示します。
$ ls -ld project drwxrwxr-x 2 larry system 32 Jun 5 10:07 project
グループが
project
ディレクトリに対して読み取り,書き込み,および実行 (rwx
) のアクセス許可を持っています。
ディレクトリ内のすべてのエントリに対して同じ変更を行いたいときは,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
絶対アクセス許可 (=
) の割り当ては,ファイル (複数も可) に対するすべてのアクセス許可をそれまでの設定状態に関係なくリセットします。
file3
というファイルに対するすべてのアクセス許可をリセットするときは,以下の手順に従います。
ファイルのアクセス許可を表示します。
$ ls -l file3 -rw-r-x-r-- 1 larry system 130 Jun 5 10:06 file3
すべてのユーザ (a
) に 3 つのアクセス許可 (rwx
) をすべて割り当てます。
$ chmod a=rwx file3
ファイルの新しいアクセス許可を表示します。
$ ls -l file3 -rwxrwxrwx 1 larry system 130 Jun 5 10:06 file3
絶対アクセス許可の割り当ては,アクセス許可を削除する場合にも適用できます。
file3
というファイルに対する実行アクセス許可を削除するときは,以下の手順に従います。
file3
からすべてのグループ (a
) に対する実行アクセス許可 (x
) を削除します。
$ chmod a=rw file3
ファイルの新しいアクセス許可を表示します。
$ ls -l file3 -rw-rw-rw- 1 larry system 130 Jun 5 10:06 file3 $
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 進数の可能な組み合わせを示します。
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 進数で指定します。各桁の数値は,それぞれ
owner
,group
,および
others
に対応します。
表 2-3
に一般的なアクセス許可コードと各アクセス許可フィールドとの対応関係を示します。
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 $
ファイルまたはディレクトリを作成すると,省略時のアクセス許可が設定されます。省略時のアクセス許可は,オペレーティング・システムか,そのファイルまたはディレクトリを作成したプログラムのどちらかによって設定されます。省略時のアクセス許可を設定することにより,ユーザはファイルやディレクトリを作成するたびにアクセス許可コードを明示的に指定する作業から解放されます。オペレーティング・システムは,省略時のアクセス許可値として実行可能ファイルに読み取り,書き込み,実行 (777) を,それ以外のすべてのファイルに読み取りと書き込み (666) をそれぞれ割り当てます。
新規に作成するファイルおよびディレクトリに対する省略時のアクセス許可を変更するには,umask
コマンドを使ってユーザ・マスクを設定します。ユーザ・マスクは,ファイルやディレクトリを作成したときの省略時のデフォルトのアクセス許可を決定する数値です。ファイルやディレクトリを作成すると,作成したプログラムが指定するアクセス許可の種類からユーザ・マスク値によって禁止された種類を差し引いた値がアクセス許可として設定されます。
以下は,umask
コマンドの形式です。
umask
octal_number
octal_number エントリには,省略時のアクセス許可 (777 または 666) から差し引くアクセス許可を示す 3 桁の 8 進数を指定します。
ユーザ・マスクの設定は,8 進数を使ったアクセス許可の設定とほぼ同じです (2.2.2.2 項)。ファイルやディレクトリのアクセス許可コードを 3 桁の 8 進数で指定します。各桁は,アクセス許可の種類を示します。各桁 (1 桁目,2 桁目,3 桁目) は,次の対応関係を持つ 3 ビットの値を表します。
1 桁目は,ファイルの
owner
に対応します。
2 桁目は,ファイルの
group
に対応します。
3 桁目は,others
に対応します。
ユーザ・マスクを設定すると,実際には作成したプログラムの要求に関係なく許可しないアクセスの種類が指定されます。表 2-4
にユーザ・マスクのアクセス許可の組み合わせを示します。umask
のアクセス許可値は,通常のアクセス許可コードに指定する値とは逆になっています。
各桁の値 | 許可されるアクセス | 説明 |
0 | rwx |
読み取り/書き込み/実行 |
1 | rw- |
読み取り/書き込み |
2 | r-x |
読み取り/実行 |
3 | r-- |
読み取り |
4 | -wx |
書き込み/実行 |
5 | -w- |
書き込み |
6 | --x |
実行 |
7 | --- |
アクセスは一切許可されない |
たとえば,(実行可能ファイルに対して) 027 というユーザ・マスクを指定すると,次のような結果になります。
owner
には,ファイルを作成したプログラムによって要求されるアクセスがすべて許可されます。
group
には,書き込みアクセスが許可されません。
others
には,すべてのアクセスが許可されません。
省略時のユーザ・マスクは 022 です。これは,所有者にすべてのアクセスを許可し,ユーザ・グループと他のすべてのユーザには所有者のファイルへの書き込みを許可しないことを示します。
自分が所有するファイルやディレクトリに設定するユーザ・マスクの適切な値は,システム上の情報リソースがどの程度自由に共有されているかによって変わります。次のガイドラインを参考にしてください。
開放的なコンピュータ環境では,ユーザ・マスク値として 000 を指定し,ファイルやディレクトリへのアクセスに対して一切制限を設定しない方法が考えられます。これにより,プログラムがファイルを作成してアクセス許可コードを指定すると,プログラムが指定したアクセス許可コードに対してユーザ・マスクによる制限が一切かかりません。
もう少し安全なコンピュータ環境では,ユーザ・マスクとして 066 を指定することにより,所有者には完全なアクセスを許可しながら,それ以外のユーザにはファイルの読み取りと書き込みを禁止する方法が考えられます。これにより,ファイルを作成すると,作成したプログラムが指定するアクセス許可の種類から所有者以外のユーザによる読み取りまたは書き込みアクセスを禁止するユーザ・マスクの制限値を差し引いた値がアクセス許可として設定されます。
安全が確保されたコンピュータ環境では,ユーザ・マスク値として 077 を指定し,所有者だけがファイルにアクセスできるようにする方法が考えられます。これにより,ファイルを作成すると,作成したプログラムが指定するアクセス許可の種類から所有者以外のユーザによる読み取り,書き込み,および実行を禁止するユーザ・マスクの制限値を差し引いた値がアクセス許可として設定されます。
ユーザ・マスクのしくみを理解するため,次のコマンドを入力した場合を考えます。
$ umask 037
このコマンドにより,実行可能ファイルに対して Tru64 UNIX のアクセス許可コード 740 (Tru64 UNIX の省略時のアクセス許可コード 777 から
umask
のコード 037 を差し引いた値) が設定され,次のような結果が得られます。
所有者には,すべてのアクセスが許可されます (7)。
所有者のグループのメンバには,読み取りアクセスだけが許可されます (4)。
他のユーザには,すべてのアクセスが許可されません (0)。
さらに,単純にファイルを作成した場合を考えます。省略時では,所有者にすべてのアクセスを許可し,他のすべてのユーザに読み取りと実行だけを許可する省略時のアクセス許可がテキスト・エディタによって常に割り当てられます。ここでは,既にユーザ・マスク 037 が設定されているので,ファイルのアクセス許可がさらに制限されます。この結果,所有者にはすべてのアクセスが許可されますが,グループはファイルを実行できなくなり,他のすべてのユーザにはアクセスが一切許可されません。
2.2.3.1 ユーザ・マスクの設定
ユーザ・マスクは,次のいずれかの方法で設定します。
ユーザのログイン・スクリプトに
umask
コマンドを指定する方法。指定した値がユーザのログイン時に自動的に設定されるため,最も一般的で効率的なユーザ・マスクの指定方法です。
ログイン・セッション中にシェル・プロンプトで
umask
コマンドを入力する方法。設定したユーザ・マスクの値は,そのログイン・セッションの間のみ有効です。
次の手順は,テキスト・エディタを使って作成するファイルのアクセス許可をユーザ・マスクによってどのように制限するかを詳しく示した例です。
ユーザ・マスクの現在の値を表示します。
$ umask
ユーザ・マスクの値が 000 であれば,ファイル作成プログラムによって設定されるアクセス許可に制限が一切かかりません。手順 3 に進みます。
ユーザ・マスクの値が設定されている場合は,それを書き留めます。手順 2 に進みます。
ユーザ・マスクの値を 000 に設定して,ファイル作成プログラムによって設定されるアクセス許可に制限が一切かからないようにします。ユーザ・マスクの値を元に戻す必要がある場合は,値をリセットする前に必ず現在の値を書き留めてください。
$ umask 000
ファイルを作成して保存し,テキスト・エディタを終了します。
作成したファイルのアクセス許可を表示します。ここでは,すべてのユーザに読み取りおよび書き込みのアクセスが許可されるものとします。
$ ls -l -rw-rw-rw- 1 user-name 15 Oct 27 14:42 yourfile
ユーザ・マスクを
022
にリセットします。
$ umask 022
ユーザ・マスク 022 により,所有者にはすべてのアクセスを許可し,他のすべてのユーザには読み取りおよび実行のアクセスだけを許可するというアクセス許可制限が設定されます。
もう 1 つのファイルを作成して保存し,テキスト・エディタを終了します。
作成したファイルのアクセス許可を表示します。
$ ls -l -rw-r--r-- 1 user-name 15 Oct 27 14:45 yourfile2
ユーザ・マスクの値 022 に従って,グループと他のすべてのユーザに対する書き込みアクセス許可が取り消されています。
ユーザ・マスクを元の値または別の値にリセットする (必要に応じて)。
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)
次のファイル・システムは,プロパティ・リストをサポートしています。
AdvFS (Advanced File System)
AdvFS ファイル・システムでは,プロパティ・リストのエントリに 1560 バイトという上限があります。ACL はプロパティ・リストのエントリに保存されるため,これは 3 つのディレクトリ ACL の他に,62 の ACL エントリを指定できることを意味します。この上限を超えると,EINVAL
エラーが返されます。
クライアントとサーバの両方が Tru64 UNIX システムであるネットワーク・ファイル・システム (NFS)。NFS 上で ACL を有効にする方法の詳細については,2.3.1.1 項を参照してください。
UNIX ファイル・システム (UFS)
UFS ACL の省略時の上限は 1548 バイトであり,これは AdvFS の 62 エントリ + 必須の 3 エントリという上限と同じです (AdvFS の上限にはヘッダも含まれています)。
UFS の ACL に対する上限は構成可能で,sec
サブシステムの
ufs-sec-proplist-max-entry
という属性で定義されます。UFS のプロパティ・リストの要素サイズは構成可能で,sec
サブシステムの
ufs-proplist-max-entry
という属性で定義されます。これらの属性は,sysconfig
コマンドを使って動的に構成することができます。また,sysconfigdb
コマンドを使って
sysconfigtab
ファイル内のこれらの属性を構成することもできます。
ufs-proplist-max-entry
の値は,ufs-sec-proplist-max-entry
属性の値にプロパティ・リスト要素のヘッダを保持するスペースを足した値以上にする必要があります。sysconfig
ユーティリティは,ufs-proplist-max-entry
を自動調整してこの要件を達成します。ufs-proplist-max-entry
の省略時の値は 8192
バイトです。詳細については,
sysconfig
(8)sysconfigdb
(8)sysconfigtab
(4)
ACL サブシステムは基本システムの一部として出荷されますが,基本システムの構成要素は現行の動作に ACL を必要としないため,ACL に関するファイルは組み込まれていません。ACL を使う場合や,レイヤード・プロダクトが ACL のサポートを必要とする場合は,ACL を有効にする必要があります。
ACL の情報を表示するには,次のコマンドを入力します。
# sysconfig -q sec
ACL を動的に有効にするには,次のコマンドを入力します。
# sysconfig -r sec acl_mode=enable
システム起動時に ACL を有効にするには,secconfig
ユーティリティを使用するか,または次の手順に従います。
次のように,ACL モードを enable にするエントリを含む
stanza
ファイルを作成します。
sec: acl_mode = enable
/etc/sysconfigtab
ファイルを更新します。
# sysconfigdb -m -f acl_mode.stanza sec
ACL を無効にするには,次のコマンドを入力します。
# sysconfig -r sec acl_mode=disable
注意
ACL を無効にすると,ACL でアクセスを禁止しているファイルやディレクトリに対してプロセスがアクセスできるようになります。このため,NFS を使ってファイルを共有するシステムでは,共通のセキュリティ・ドメインを持つことが特に重要です。
ACL を無効にしてもファイルやディレクトリに ACL を設定できますが,その場合はアクセス許可のチェックに ACL が使われず,新規に作成したファイルやディレクトリには省略時 ACL が継承されません。
NFSv3 を使用していて,Tru64 UNIX NFS サーバで ACL が有効ならば,ACL のアクセス・チェックと NFS クライアントからの ACL の継承が適切に行われます。ただし,NFS クアイアントで ACL を設定できるようにするには,次の手順を実行する必要があります。
NFS サーバ上で,プロパティ・リストのデーモン (proplistd
) を起動します。
# /usr/sbin/proplistd 4
NFS クライアント上で,次のいずれかの方法を使って
proplist
オプション付きでファイル・システムをマウントします。
/etc/fstab
ファイルのオプション・フィールドに
proplist
を追加します。
servername:/advfs /nfs_advfs nfs rw,proplist 0 0
mount
コマンドに
proplist
オプションを追加します。
# mount -o proplist servername:/advfs /nfs_advfs
注意
ACL を使う場合は,NFSv2 は使用できません。NFSv2 のプロトコル上の制限により,NFSv2 を使用すると ACL が必ずしも適用されない可能性があります。詳細については,
の nfs-flatten-mode を参照してください。 acl
(4)
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 エントリにリストされたユーザとグループを除くすべてのユーザおよびグループに対し,読み取りを許可します。 |
ファイルまたはディレクトリにアクセス ACL が設定されている場合は,そのファイルまたはディレクトリへのアクセスを許可する前に追加的なアクセス・チェックが実行されます。具体的には,次のチェックが次の順序で実行されます。
プロセスにスーパユーザ権限がある場合,ファイルやディレクトリへのアクセスが許可されます。アクセス ACL と Tru64 UNIX のアクセス許可はチェックされません。
ACL が無効になっている場合や,ACL は有効になっているがファイルやディレクトリに対応するアクセス ACL がない場合は,Tru64 UNIX のアクセス許可がチェックされます。
ファイルやディレクトリに対するアクセス ACL の追加エントリは,以下のようにチェックされます。
プロセスのユーザ ID (UID) がオブジェクトの所有者のものである場合,所有ユーザ (user::
) のエントリに指定されたアクセスが許可されます。他の ACL エントリはチェックされません。これは,Tru64 UNIX の
user
に対するアクセス許可を使用するのと同じです。
プロセスの UID が
user:
エントリに指定された UID に一致するか,または
user:
エントリに指定されたユーザ名で解決できる場合,そのエントリに指定されたアクセスが許可されます。他の残りの ACL エントリはチェックされません。
プロセスのグループ ID (GID) がファイルの GID に一致するか,またはプロセスの補助グループのうち 1 つがファイルの GID に一致する場合,group::
エントリと (次のリスト項目で説明するように) 一致する他の
group:
エントリのアクセス許可を合わせたものがそのプロセスに対して許可されます。
プロセスの GID がいずれかの
group:
エントリの GID に一致するか,いずれかの
group:
エントリに指定されたグループ名で解決できる場合,またはプロセスのいずれかの補助グループの GID またはグループ名が ACL のいずれかの
group:
エントリに一致する場合は,一致するすべてのグループ・エントリの保護属性 (アクセス許可) を合わせたものがそのプロセスに対して許可されます。たとえば,グループ
sales
とグループ
eng
に属するユーザがいて,ファイルのアクセス ACL がグループ
sales
に読み取りアクセスを許可し,グループ
eng
に書き込みアクセスを許可する場合,そのユーザにはそのファイルに対する読み取りと書き込みのアクセスが許可されます。
other::
エントリで指定されたアクセスが許可されます。これは,Tru64 UNIX の
other
に対するアクセス許可を使用するのと同じです。
注意
Tru64 UNIX のアクセス許可を持つファイルやディレクトリと 3 つの必須エントリ (
user::
,group::
,およびother::
) だけを含むアクセス ACL を持つファイルやディレクトリは,区別できません。
ファイルやディレクトリを作成すると,親ディレクトリから ACL が継承されます。親ディレクトリ内に作成したファイルやサブディレクトリに継承される ACL は,省略時 ACL によって次のように決定されます。
親ディレクトリに省略時 ACL がない場合
ディレクトリ内に作成される新しいファイルの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | なし |
ディレクトリ内に作成される新しいサブディレクトリの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | なし |
省略時アクセス ACL | なし |
省略時ディレクトリ ACL | なし |
Tru64 UNIX のアクセス許可だけが使われます。
親ディレクトリに省略時アクセス ACL はあるが,省略時ディレクトリ ACL がない場合
ディレクトリ内に作成される新しいファイルの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | 親の省略時アクセス ACL |
ディレクトリ内に作成される新しいサブディレクトリの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | 親の省略時アクセス ACL |
省略時アクセス ACL | 親の省略時アクセス ACL |
省略時ディレクトリ ACL | なし |
親ディレクトリに省略時アクセス ACL はないが,省略時ディレクトリ ACL がある場合
ディレクトリ内に作成される新しいファイルの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | なし |
ディレクトリ内に作成される新しいサブディレクトリの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | 親の省略時ディレクトリ ACL |
省略時アクセス ACL | なし |
省略時ディレクトリ ACL | 親の省略時ディレクトリ ACL |
親ディレクトリに省略時アクセス ACL と省略時ディレクトリ ACL の両方がある場合
ディレクトリ内に作成される新しいファイルの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | 親の省略時アクセス ACL |
ディレクトリ内に作成される新しいサブディレクトリの ACL は,次のように設定されます。
ACL の種類 | ステータス |
アクセス ACL | 親の省略時ディレクトリ ACL |
省略時アクセス ACL | 親の省略時アクセス ACL |
省略時ディレクトリ ACL | 親の省略時ディレクトリ ACL |
ディレクトリに省略時 ACL を設定しても,そのディレクトリ内の既存のファイルやサブディレクトリの ACL は変更されません。
2.3.4.1 ACL の継承の例
ACL の継承の例を以下に示します。
temp
ディレクトリに省略時 ACL がない状況で,次のコマンドを実行して
temp
ディレクトリに省略時アクセス ACL を設定したとします。
% setacl -d -u user::rw-,group::r--,other::r--,user:jdoe:rw-\ temp
この場合,temp
ディレクトリの中に作成されるすべてのファイルやディレクトリは,アクセス ACL として次の ACL を継承します。
# # file: temp # owner:smith # group:system # user::rw- user:jdoe:rw- group::r-- other::r--
temp
ディレクトリに省略時 ACL がない状況で,次のコマンドを実行して
temp
ディレクトリに省略時ディレクトリ ACL を設定したとします。
% setacl -D -u user::rw-,group::r--,other::r--,\ user:jdoe:rwx temp
この場合,temp
ディレクトリの中に作成されるすべてのディレクトリは,アクセス ACL および省略時ディレクトリ ACL として次の ACL を継承します。
# # file: temp # owner:smith # group:system # user::rw- user:jdoe:rwx group::r-- other::r--
temp
ディレクトリに省略時 ACL がない状況で,次のコマンドを実行して
temp
ディレクトリに省略時アクセス ACL と省略時ディレクトリ ACL を設定したとします。
% setacl -D -u user::rw-,group::r--,other::r--,\ user:jdoe:rw- temp % setacl -d -u user::rw-,group::r--,other::r--,\ user:wilson:rwx temp
この場合,temp
ディレクトリの中に作成されるすべてのディレクトリは,アクセス ACL および省略時ディレクトリ ACL として次の ACL を継承します。
# # file: temp # owner:smith # group:system # user::rw- user:jdoe:rw- group::r-- other::r--
次の ACL は,省略時アクセス ACL として継承されます。
# # file: temp # owner:smith # group:system # user::rw- user:wilson:rwx group::r-- other::r--
temp
ディレクトリの中に作成されるすべてのファイルは,アクセス ACL として次の ACL を継承します。
# # file: temp # owner:smith # group:system # user::rw- user:wilson:rwx group::r-- other::r--
dxsetacl
ファイルやディレクトリの ACL を作成,表示,および変更するためのグラフィック・インタフェースです。
getacl
ファイルやディレクトリの ACL を表示します。
setacl
ファイルやディレクトリの ACL を作成,変更,および削除します。
注意
ファイルまたはディレクトリの ACL を作成,変更,削除するには,あらかじめそのファイルまたはディレクトリの所有者になる (またはスーパーユーザ特権を持つ) 必要があります。
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 を復元しなければなりません。また,この手順ではファイルからハード・リンクが削除されます。この方法でファイルを変更する一般的なコマンドには,以下のものがあります。
gzip
compress
emacs
この問題を回避するには,元のファイルを一時ファイルへコピーし,一時ファイルに対して処理を行ってから,-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 -p
,pax -p p
または
pax -p e
コマンドを使って,アーカイブ元のシステムとユーザやグループの情報を共有していないシステム上にアーカイブを復元すると,意図していないファイル・アクセスを許可する可能性があります。
現時点では,ACL および拡張属性 (プロパティ・リスト) についての正式な業界標準はありません。このため,pax
コマンドと
tar
コマンドでプロパティ・リストと ACL をサポートする機能拡張は,Tru64 UNIX 独自のものです。他のベンダの
pax
および
tar
では,Tru64 UNIX 独自の機能拡張は無視されます。ただし,他のベンダのシステムとの相互運用性を確保するためには,複数のベンダに配布するアーカイブの作成時に
-V
オプションを指定して,ACL やその他の拡張属性がアーカイブされないようにしてください。
2.3.6.2 アーカイブ・コマンド
アーカイブ・コマンドの
dump
,rdump
,restore
,rrestore
,vdump
,rvdump
,vrestore
,および
rvrestore
は,常に ACL を含むすべての拡張属性 (プロパティ・リスト) を保存および復元します。このため,省略時ディレクトリ ACL または省略時アクセス ACL を持つディレクトリにファイルを抽出すると,抽出されたファイルに対して予期しない ACL が作成されることがあります。ACL がで有効になっているシステムでは,抽出の終了後に必ずすべての ACL を確認してください。