ディレクトリーおよびその中にあるすべてのファイルへのアクセスを制御するために、 UNIX ファイル・システム (UFS) では、モード・ビットを個々のファイルやディレクトリーと関連付けますが、 AFS では、モード・ビットではなく、アクセス制御リスト (ACL) をファイルやディレクトリーと関連付けます。 AFS ACL には、7 つのアクセス権および約 20 のユーザーまたはグループ項目のための空きがあるため、 3 つのアクセス権および 3 つの項目 (所有者、グループ、およびその他) だけしかない UFS に比べて、より調整されたアクセス制御を提供することができます。
この章では、指示されたコマンドを使って以下のタスクを実行する手順について説明します。
アクセス制御リストの検証 | fs listacl |
ACL の通常アクセス権機能グループの編集 | fs setacl |
ACL の禁止アクセス権機能グループの編集 | fs setacl、 -negative フラグを併用 |
ACL の置換 | fs setacl 、 -clear フラグを併用 |
ACL のコピー | fs copyacl |
古くなった AFS UID の削除 | fs cleanacl |
この機能グループでは、AFS および UFS ファイル保護システムの主な違い、ディレクトリー・レベル保護の含意、および 7 つのアクセス権について説明します。
UFS モード・ビット・データ保護システムおよび AFS ACL システムは、次の 2 点で異なります。
UFS は、9 つのモード・ビットのセットを各ファイルの要素に関連付け、3 つ (rwx) を要素の所有者、所有しているグループ、および他のすべてのユーザーにそれぞれ関連付けます。ファイルのディレクトリーにあるモード・ビットの類似セットは、間接的にそのファイルだけに適用されます。
代わりに、AFS ACL は、ディレクトリー内のすべてのファイルを同じように保護します。他のファイルより機密性が高い特定ファイルは、制限性の高い ACL を持つディレクトリーに保管してください。
ディレクトリー・レベルでアクセスを定義すると、次のような重大な影響が生じます。
一般的に、上位ディレクトリー (ホーム・ディレクトリーなど) には、かなり自由なアクセス権限を割り当てる必要があります。特に、少なくとも l アクセス権を、上位レベルのディレクトリーの system:anyuser または system:authuser グループに許可すると効果的です。詳しくは、 ACL 上でのグループの使用を参照してください。
モード・ビットは、UFS の唯一のファイル保護システムです。AFS では、UNIX モード・ビットをそのディレクトリー上の ACL のほかに、ファイルにも設定できます、しかし、モード・ビットの解釈のしかたは UNIX ファイル・システムとは異なります。AFS が UNIX モード・ビットを解釈する方法 を参照してください。
UFS では、アクセス権はモード・ビットの形式で定義されます。すなわち、r (読み取り)、w (書き込み)、および x (実行) です。 AFS では、7 つのアクセス権は以下のように定義され、より精度の高いアクセス制御が可能です。詳しくは、AFS ACL アクセス権 を参照してください。
a (管理)
d (削除)
i (挿入)
k (ロック)
l (ルックアップ)
r (読み取り)
w (書き込み)
UFS は、1 つのユーザーと 2 つのグループに対するアクセスを、モード・ビットの組を、それぞれ、ファイルまたはディレクトリーを所有するユーザー、単一の定義済みグループ、およびシステム上にアカウントを持つすべてのユーザーに与えることによって制御します。
それに対して、AFS では、ACL 上に多数の項目 (個々のユーザーまたはグループ) を配置し、項目ごとに別々のアクセス権限のセットを付与できます。配置可能な項目の数は、約 20 個です。この数は、ACL 自体に割り振られているメモリー内で書く項目が占有するスペースによって異なります。
AFS は、system:anyuser および system:authuser の 2 つのシステム・グループ定義します。これらは、すべてのユーザーおよび認証済みユーザーをそれぞれ表します。詳細は、 ACL 上でのグループの使用 を参照してください。さらに、ユーザーは、個々のユーザーまたはマシンの IP アドレスから構成される、独自のグループを保護データベースに定義することができます。 ACL に対して a アクセス権を持つユーザーは、自分または他のユーザーが定義したグループだけでなく、システム・グループの項目も作成できます。グループの定義についての詳細は、保護データベースの管理 を参照してください。
ユーザーがファイルまたはディレクトリーへのアクセスを要求すると、ファイル・サーバーは、関連する ACL がユーザーおよびユーザーが属するグループに拡張する許可をすべてまとめます。したがって、グループ項目を ACL に配置すると、 ACL が個々の項目として収容できる数よりも多くのユーザーに対して、アクセスを制御することができます。
機能的には、7 つの標準 ACL アクセス権は、2 つのグループに分けることができます。 1 つはディレクトリー自体に適用され、もう 1 つはディレクトリーに含まれるファイルに適用されます。
このグループの 4 つの権限はディレクトリーそのものに適用される場合に有効です。たとえば、i (挿入) アクセス権は、ファイルへのデータの追加を制御しませんが、新規ファイルまたはサブディレクトリーの作成を制御します。
このアクセス権によって、ユーザーは以下のコマンドを発行できます。
このアクセス権では、ユーザーはディレクトリー内のファイルの内容を読み取ったり、ディレクトリー内のファイルに対して ls -l コマンドを発行したり、ファイル名を -path 引き数にして fs listacl コマンドを発行することはできません。これらのオペレーションには、3 つのファイル・サーバー・アクセス権 で説明する r (読み取り) アクセス権が必要です。
同様に、このアクセス権は、ユーザーが、ディレクトリーのサブディレクトリーに対してls、ls -l、ls -ld、または fs listacl コマンドを発行することを許可しません。これらのオペレーションには、サブディレクトリーそのものの ACL 上での l アクセス権が必要です。
このグループの 4 つの権限はディレクトリーそのものに適用される場合に有効です。
AFS では、意味が定義されていない、上段シフト文字 A、B、C、 D、E、F、 G、Hの 8 つの追加アクセス権を使用できます。
1 つまたは複数のアクセス権への割り当てを意味するアプリケーション・プログラムを作成して、それを ACL 上に配置し、これらのプログラムによってファイル・アクセスを制御することができます。たとえば、印刷プログラムを変更してアクセス権を認識および解釈し、そのプログラムがアクセスするファイルを収容するディレクトリーにそのプログラムを配置できます。fs listacl fs setacl コマンドを使用して、標準の 7 つのアクセス権のように ACL に補助アクセス権を設定し、表示します。
7 つのアクセス権は、ACL 項目内で任意の方法で組み合わせることができます。しかし、組み合わせ方によってかなり便利になります。特に共通の 4 つの組み合わせには、対応する省略形があります。 fs setaclコマンドを使用して ACL 項目を定義する場合、権限を表す 1 つまたは複数の個々の文字を指定するか、または下記の省略形形式の 1 つを指定することができます。
ACL は、ディレクトリーおよびその中のファイルへのアクセスを許可および禁止することができます。アクセスを許可するには、ACL 項目の設定 で説明するように、fs setacl コマンドを使用して、アクセス権のセットをユーザーまたはグループに関連付ける ACL 項目を作成します。fs listacl コマンドを使用して ACL を表示すると (ACL の表示で説明するように) 、以下のヘッダーの下に項目が表示されます。rights という用語はアクセス権を表します。
Normal rights
アクセスを禁止する方法は 2 つあります。
Negative rights
どのタイプのアクセスをユーザーに許可するか決定すると、ファイル・サーバーは、まず ACL の Normal rights 機能グループのすべての項目を調べて、アクセス権のセットをコンパイルします。それから、ACL の Negative rights 機能グループ上にそのユーザー (またはユーザーが属しているグループ)に関連するすべてのアクセス権を抽出します。したがって、禁止アクセス権は、常に通常アクセス権を取り消します。
禁止アクセス権を使用すると、fs setacl コマンドの通常の意味が逆転し、これは潜在的に混乱を生じる可能性があります。特に、none 省略表記と -negative フラグを一緒に使用すると、二重否定になります。 ACL の Negative rights 機能グループから項目を削除することにより、 Normal rights 機能グループの項目を介して、ユーザーがもう一度アクセス権を取得できるようになります。all 省略表記と -negative フラグと一緒に使用すると、すべてのアクセス権を明示的に禁止します。
Normal rights 機能グループの項目が、禁止されているアクセス権を system:anyuser グループに対して許可した場合、Negative rights 機能グループに項目を作成するのは、無意味であることに注意してください。この場合、ユーザーは、単に unlog コマンドを使用してユーザーの持つトークンを廃棄することにより、アクセスを取得することができます。ユーザーがこれを行うと、ファイル・サーバーは、ユーザーを anonymous ユーザーとして認識します。anonymous ユーザーは、 system:anyuser グループに属していますが、ACL の Negative rights 機能グループの項目と一致しません。
前述したように、グループ項目を ACL に配置すると、一度に多数のユーザーにアクセスするのを制御することができます。新規ユーザーを、関連する ACL 上に表示されるグループに追加するだけで、そのユーザーに多数のファイルおよびディレクトリーへのアクセスを許可することができます。また、マシンのグループを作成することもできます。その場合は、マシンにログオンする任意のユーザーは、そのグループに許可されたアクセスを取得するようにできます。 ACL の a アクセス権を持つディレクトリー上では、ユーザーは独自のグループを定義したり、ユーザー自身が作成したグループや所有するグループだけでなく、任意のグループに対する ACL 項目を作成することができます。ユーザーまたはマシンのグループの作成についての説明、および異なるタイプのグループを使用する最も効果的な方法についての説明は、保護データベースの管理 を参照してください。
AFS は、以下の 2 つのシステム・グループも定義します。このグループは、大きなユーザー・グループを潜在的に表すため、ACL 上で非常に便利です。これらのグループについての詳細は、 システム・グループ を参照してください。
このグループに対してローカル認証アカウントを作成しない限り、このグループに ACL項目を作成することが、外部セルから AFS ユーザーへのアクセスを可能にする唯一の方法であることに注意してください。
特に、l (ルックアップ) 権をファイル・システム内にある大部分のディレクトリーの ACL 上の system:anyuser に付与するのに有用です。このアクセス権によって、ディレクトリー内のファイルとサブディレクトリーの名前がないとターゲット・ファイルへのパス内のディレクトリーと交信できないユーザーが、その名前を知ることができます。
少し制限的になりますが、代わりに l権を system:authuser グループに付与する方法があります。それでも制限がある場合、 l アクセス権を特定のユーザーまたはグループに付与できますが、1 つの指定された ACL 上の数が 約 20 を超えることはできません。
system:anyuser グループに特定のアクセス権を許可するもう 1つの理由は、印刷やメール送達などのサービスを提供するプロセスの正しいオペレーションが可能になることです。たとえば、l 権に加えて、印刷プロセスは、ファイルの内容を印刷するには r (読み取り) 権が必要です。また、メール送達プロセスは、新規メールを送達するために i (挿入) 権が必要です。
すべての新規に作成されたボリュームのルート・ディレクトリー上の ACL は、 system:administrators グループにすべてのアクセス権を許可します。この記入項目を削除したい場合は削除できますが、 system:administrators グループのメンバーは、すべてのディレクトリーの ACL で、暗黙的に常に a (管理) アクセス権を所有し、また、デフォルトで l アクセス権も所有しています。 a アクセス権を使用すると、他の必要なアクセス権を、自分自身に明示的に付与することができます。この権限のデフォルト設定の変更については、 system:administrators グループの管理 を参照してください。
ファイル、ディレクトリー、またはシンボリック・リンクに関連する ACL を表示するには、 fs listacl コマンドを発行します。シンボリック・リンクの出力は、そのシンボリック・リンクがあるディレクトリーの ACL ではなく、ターゲット・ファイルまたはディレクトリーに適用される ACL を表示します。
AFS/DFS 移行ツールキット・ユーザーへの注意:ユーザーが fs listacl コマンドを発行するマシンが、AFS/DFS 移行ツールキット経由で DCE セルの DFS ファイル・スペースにアクセスできるように構成されている場合は、このコマンドを使用して、DFS ファイルおよびディレクトリー上の ACL を表示できます。通常の ACL ではなく、DFS ディレクトリーの初期コンテナーおよび初期オブジェクト ACL を表示する場合、 fs listacl コマンドの -id または -if フラグを組み込みます。説明については、AFS/DFS Migration Toolkit Administration Guide and Reference を参照してください。 fs コマンド・インタープリターでは、AFS ACL を表示するときに組み込まれていても、-id および -if フラグは無視されます。
% fs listacl [<dir/file path>+]
ここで、
以下のエラー・メッセージは、ユーザーには、ACL を表示するために必要なアクセス権がないことを示しています。ディレクトリー名を dir/file path 引き数として指定するには、その ACL 上に l (ルックアップ) アクセス権がなくてはなりません。ファイル名を指定するには、ディレクトリーの ACL 上に r (読み取り) アクセス権がなくてはなりません。
fs: You don't have the required access permissions on 'dir/file path'
system:administrators グループのメンバー、およびそのディレクトリーの所有者 (ls -ld コマンドによってレポートされている) は、すべてのディレクトリーの ACL 上に a (管理) アクセス権を暗黙的に持ち、 fs setacl コマンドを使用して、自分に必要なアクセス権を付与することができます。説明については、ACL 項目の設定 を参照してください。
dir/file path として指定される各ファイルまたはディレクトリーの出力は、識別するため、以下のヘッダーで始まります。
Access list for dir/file path is
Normal rights ヘッダーが次の行に表示されます。その後、各行にユーザーまたはグループ名、アクセス権のセットの対が表示されます。権限は、AFS ACL アクセス権で定義された単一文字として、かならず rlidwkaの順序で表示されます。禁止アクセス権が含まれる場合は、 Negative rights ヘッダーが次に表示され、その後、禁止アクセス権の対が表示されます。
以下の例は、ABC Corporation セルにおける、ユーザー terryのホーム・ディレクトリーの ACL が表示されます。
% fs la /afs/abc.com/usr/terry Access list for /afs/abc.com/usr/terry is Normal permissions: system:authuser rl pat rlw terry rlidwka Negative permissions: terry:other-dept rl jones rl
ここでの pat、terry、および jones は、個々のユーザーです。system:authuser は、システム定義グループです。そして terry:other-dept は、terry が所有するグループです。通常アクセス権のリストでは、すべてのアクセス権を terry に許可し、 pat には、r (読み取り)、l (ルックアップ)、 w (書き込み) アクセス権を、そして system:authuser グループのメンバーには、 r および l アクセス権を許可します。
禁止アクセス権リストでは、jones およびterry:other-dept グループのメンバーに対し、 r および l アクセス権を禁止しています。これらの項目は、どのような方法にせよ terry のホーム・ディレクトリーへのアクセスを効果的に防止します。なぜなら、ユーザーは、自分たちに適用される可能性のある ACL の Normal rights 機能グループの唯一の項目である system:authuser グループに拡張されている r および l アクセス権を取り消されているからです。
ACL 項目を追加、削除、または編集するには、fs setacl コマンドを使用します。デフォルトでは、このコマンドは、ACL の通常アクセス権機能グループの項目を操作します。禁止アクセス権機能グループの項目を操作するには、-negative フラグを組み込みます。
ACL を編集するには、ACL 上に a (管理) アクセス権がなくてはなりません。ディレクトリーの所有者、およびsystem:administrators グループのメンバー ( ls -ld コマンドによってレポートされる) は、暗黙的にこのアクセス権をすべての ACL 上に持っています。 system:administrators グループのデフォルトのメンバーは、暗黙的に l (ルックアップ) アクセス権を持っています。
AFS/DFS 移行ツールキット・ユーザーへの注意:ユーザーが fs setacl コマンドを発行するマシンが、AFS/DFS 移行ツールキット経由で DCE セルの DFS ファイル・スペースにアクセスできるように構成されている場合は、このコマンドを使用して、DFS ファイルおよびディレクトリー上の ACL を設定できます。通常の ACL ではなく、DFS ディレクトリーの初期コンテナーおよび初期オブジェクト ACL を設定する場合、 fs setacl コマンドの -id または -if フラグを組み込みます。説明については、AFS/DFS Migration Toolkit Administration Guide and Reference を参照してください。 fs コマンド・インタープリターでは、AFS ACL の設定時に組み込まれていても、-id および -if フラグは無視されます。
% fs listacl [<dir/file path>]
% fs setacl -dir <directory>+ -acl <access list entries>+
ここで、
各ディレクトリーに読み取り / 書き込みパスを指定して、読み取り専用ボリュームを変更しようとするときに障害が発生するのを防ぎます。規則では、パス名の第 2 レベルのセル名の前にピリオドを付けて、読み取り / 書き込みパスを指定します (たとえば、 /afs/.abc.com)。ファイル・スペースの読み取り / 書き込みパス、および読み取り専用パスの概念についての詳細は、 マウント・ポイント横断の規則 を参照してください。
パス名自体またはパス名の一部として、以下の表記を使用することもできます。
fs: 'filename': Not a directory
1 つのディレクトリーまたはファイルのみを指定する場合は、 -dir スイッチと -acl スイッチを省略しても構いません。
アクセス権を定義するには、次のいずれかを指定します。
アクセス権および省略表現の詳細については、 AFS ACL アクセス権 を参照してください。
1 つのコマンド行に、ユーザーやグループの項目をいくつもつなげることができます。また、一部の対には個々の文字を使用し、それ以外の対には省略表現を使用することもできますが、 1 つの対の中で文字と省略表現を組み合わせて使用することはできません。
以下の例のいずれも、ユーザー pat に、発行者のホーム・ディレクトリーのnotes サブディレクトリーの ACL 上での r (読み取り) および l (ルックアップ) アクセス権を許可します。この例は、 1 つのディレクトリーだけを指定した場合に、-dir および -aclスイッチを省略する方法を示しています。
% fs sa ~/notes pat rl % fs sa ~/notes pat read
以下の例では、現行作業ディレクトリーに対する ACL を編集しています。この例では、system:anyuser グループの項目を削除し、2 つの項目を追加しています。すべてのアクセス権を新規ユーザーに許可し、1 つの項目は、a (管理) 以外のすべてのアクセス権を terry:colleagues グループのメンバーに付与し、もう 1 つの項目では、r (読み取り) および l (ルックアップ) アクセス権を system:authuser グループに付与します。コマンドがここで 2 行に表示されているのは、ただ見やすくするためです。
% fs sa -dir . -acl system:anyuser none terry:colleagues write \ system:authuser rl
% fs listacl [<dir/file path>]
% fs setacl -dir <directory>+ -acl <access list entries>+ -negative
ここで、
以下の例では、ユーザー pat に、現行作業ディレクトリーの project サブディレクトリーに対する、w (書き込み) および d (削除) アクセス権を禁止しています。
% fs sa project pat wd -neg
たとえば、通常アクセス権と禁止アクセス権が混在するためにユーザーのディレクトリーへのアクセスにそれらの相互作用がどう影響するか理解することが困難な場合などには、新しいアクセス権を定義する前に ACL を完全に消去するのが最も簡単な方法である場合があります。新規項目を定義するときに ACL を完全に消去するには、 -clear フラグを fs setacl コマンドに組み込みます。このフラグを組み込むと、ACL の通常アクセス権または禁止アクセス権のいずれかの機能グループに項目を作成できますが、両方の機能グループに一度に作成することはできません。
ディレクトリーの所有者に適切なアクセス権を付与する項目を作成することを忘れないでください。所有者は、削除した項目を置換するために必要な a (管理) アクセス権を暗黙的に持っていますが、欠落した ACL 項目 (特に ルックアップ権の欠如) の影響により、所有者が混乱するので、項目の欠落が問題となることを認識するのが困難になります。
% fs listacl [<dir/file path>]
% fs setacl -dir <directory>+ -acl <access list entries>+ -clear \ [-negative]
ここで、
fs copyacl コマンドは、送信元ディレクトリーの ACL を 1 つ以上のあて先ディレクトリーにコピーします。その場合、送信元 ACL は全く影響を受けません。しかし、各あて先 ACL は次のように変更します。
AFS/DFS 移行ツールキット・ユーザーへの注意:ユーザーが AFS/DFS 移行ツールキット経由で DCE セルの DFS ファイル・スペースにアクセスできるようにマシンが構成されている場合は、 fs copyacl コマンドを使用して、DFS ファイルおよびディレクトリー上に ACL リストをコピーすることもできます。コマンドには、-id および -if フラグが組み込まれているので、正規の ACL だけでなく、DFS ディレクトリーの初期コンテナーおよび初期オブジェクトを更新できます。AFS/DFS Migration Toolkit Administration Guide and Reference を参照してください。AFS ディレクトリーおよび DFS ディレクトリー間では ACL はコピーできません。使用している ACL 形式が異なるからです。 fs コマンド・インタープリターでは、AFS ACL のコピー時に組み込まれていても、-id および -if フラグは無視されます。
% fs listacl [<dir/file path>]
% fs copyacl -fromdir <source directory> -todir <destination directory>+ \ [-clear]
ここで、
各ディレクトリーに読み取り / 書き込みパスを指定して、読み取り専用ボリュームを変更しようとするときに障害が発生するのを防ぎます。規則では、パス名の第 2 レベルのセル名の前にピリオドを付けて、読み取り / 書き込みパスを指定します (たとえば、 /afs/.abc.com)。ファイル・スペースの読み取り / 書き込みパス、および読み取り専用パスの概念についての詳細は、 マウント・ポイント横断の規則 を参照してください。
以下の例では、ACL を、現行作業ディレクトリーの notes サブディレクトリーから plans サブディレクトリーにコピーしています。発行者が -clear フラグを組み込まないので、notes ディレクトリーの ACL 上に対応する項目はありませんが、ユーザー pat の項目は plans ディレクトリーの ACL 上に残しておきます。
% fs la notes plans Access list for notes is Normal permissions: terry rlidwka smith rl jones rl Access list for plans is Normal permissions: terry rlidwk pat rlidwk % fs copyacl notes plans % fs la notes plans Access list for notes is Normal permissions: terry rlidwka smith rl jones rl Access list for plans is Normal permissions: terry rlidwka pat rlidwk smith rl jones rl
保護データベースからユーザーまたはグループの項目を削除しようとすると、fs listacl コマンドにより、名前ではなく ACL 項目のユーザーの AFS UID (またはグループの AFS GID) が表示されます。次の例では、ユーザー terry が、グループ terry:friends (AFS GID -567) の ACL 項目を、 ABC Corporation セル内の自分のホーム・ディレクトリーに持っていて、そのグループを保護データベースから除去します。
% fs listacl /afs/abc.com/usr/terry Access list for /afs/abc.com/usr/terry is Normal permissions: terry:friends rlik system:anyuser l terry rlidwka % pts delete terry:friends % fs listacl /afs/abc.com/usr/terry Access list for /afs/abc.com/usr/terry is Normal permissions: -567 rlik system:anyuser l terry rlidwka
AFS ID を ACL に残しても何も機能しません。その ID がもうアクティブ・ユーザーまたはグループに対応していないからです。さらに、ID が新規ユーザーまたはグループに割り当てられた場合、ID の新規所有者はディレクトリーの所有者が実際に前の所有者に対して設定したアクセスを使用します(このような理由から、AFS ID の再利用は、明確にお勧めしません)。
使用されなくなった AFS ID を ACL から削除するには、fs cleanacl コマンドを使用します。
% fs listacl [<dir/file path>]
% fs cleanacl [<dir/file path>+]
ここで、
各ディレクトリーに読み取り / 書き込みパスを指定して、読み取り専用ボリュームを変更しようとするときに障害が発生するのを防ぎます。規則では、パス名の第 2 レベルのセル名の前にピリオドを付けて、読み取り / 書き込みパスを指定します (たとえば、 /afs/.abc.com)。ファイル・スペースの読み取り / 書き込みパス、および読み取り専用パスの概念についての詳細は、 マウント・ポイント横断の規則 を参照してください。
パス名自体またはパス名の一部として、以下の表記を使用することもできます。
fs: 'filename': Not a directory
ディレクトリーに、古くなった AFS ID があると、コマンド・インタープリターにより、以下のヘッダーの下に消去された ACL が表示されます。
Access list for directory is now
ディレクトリーの ACL に古くなった AFS ID がない場合、以下のメッセージがそのつど表示されます。
Access list for directory is fine.
AFS は、UFS が使用するモード・ビットではなく、ACL を使用してファイル・データを保護しますが、モード・ビットを完全に無視しているわけではありません。 chmod コマンドを AFS ファイルまたはディレクトリーに対して発行すると、AFS は、ビットを適切に変更します。ファイルのモード・ビットを変更するためには、ファイルのディレクトリーの ACL 上に AFS の w (書き込み) 権が必要です。ディレクトリーのモード・ビットを作成するには、ACL 上に、 d (削除)、 i (挿入)、および l (ルックアップ) アクセス権がなければなりません。
また、AFS は、UNIX モード・ビットを以下のように使用します。