Helix Coreサーバ管理者ガイド (2020.1)

プロテクションの実装のしくみ

このトピックは、『Helix Core P4コマンドリファレンス』のp4 protectコマンドの説明を既に読んでいるということを前提としています。

ユーザがコマンドを実行すると、サーバはプロテクションテーブルを読み込み、一致するユーザ、グループ、IPアドレス、ファイルパス、アクセスレベルが含まれている行を検索します。

一致する行が複数見つかった場合は、最後に見つかった行が優先されます。

プロテクションテーブルには、以下の情報を保管するための列が含まれています。

  • writesuperなどのアクセスレベル
  • groupまたはuser - テーブルの長さを短くするため、ユーザをグループとしてまとめることをお勧めします
  • groupまたはuserの名前 - ワイルドカードとして「*」を使用できますが、具体的なグループ名を指定することをお勧めします。
  • サーバ(ホスト)のIPアドレス - 任意のIPアドレスを指定する場合は、ワイルドカードとして「*」を使用することがでできます。
  • コメント(先頭に「##」が指定されているテキスト)

プロテクションテーブルの形式は、以下のようになっています。

write   group   Dev1  *                       //depot/...
list    group   Dev1  *                       -//depot/proj/...  ## exclusionary mapping
write   user    Maria 192.168.100.0/24        //...
super   user    Alice *                       //...  ## put super user at the bottom

ユーザMariaDev1グループのメンバーで、このグループ内でIPv4接続を使用している場合、Mariaは以下に示す4つのコマンドを実行します。

操作元IPアドレス... マリアが実行するコマンド 結果

10.14.10.1

p4 print //depot/misc/...

Dev1グループは、proj領域を除き、ディポ内の任意の場所に書き込むことができるため、このコマンドは正常に実行されます。

10.14.10.1

p4 print //depot/proj/README

-//depot/proj/...ディレクトリのexclusionaryマッピングにより、このディレクトリ内のファイルに対するマリアの権限がすべて削除されるため、このコマンドは失敗します。

192.168.100.1

p4 print //depot/proj/README

このIPアドレスの場合、マリアのwrite権限には印刷機能が暗示的に含まれているため、このコマンドは正常に実行されます。 最後に見つかった一致行が優先されます。

192.168.100.1

p4 verify //depot/misc/...

p4 verifyコマンドを実行する場合はsuperアクセス権が必要になるため、このコマンドは失敗します。 マリアには、writeアクセス権しか設定されていません。

除外マッピングがない場合は、最も権限レベルの高い行が優先される

除外マッピングの先頭にはマイナス符号(-)が指定されています。 例: -//depot/dev/productA/...

マリアがDev1グループとDev2グループにメンバーとして属していて、プロテクションテーブルに除外マッピングが含まれていないと仮定します。

write       group       Dev2    *    //depot/dev/...
read        group       Dev1    *    //depot/dev/productA/...
write       group       Dev1    *    //depot/elm_proj/...

この場合、Dev2グループのすべてのメンバーがp4 edit //depot/dev/productA/readme.txtコマンドを実行できるため、マリアもこのコマンドを実行することができます。

注意

ユーザが複数のグループに属していて、そのうち1つ以上のグループに特定のコマンドの実行権限が設定されている場合、そのユーザはそのコマンドを実行することができます。

以前の包含は除外によって上書きされる

ここでは、マリアによるproductAディレクトリ内のファイルの編集を禁止する除外マッピング-//depot/dev/productA/...がプロテクションテーブル内に含まれていると仮定します。

write   group   Dev1   *   //depot/dev/...            ## Maria is a member of Dev1
list    group   Dev1   *   -//depot/dev/productA/...  ## exclusionary mapping overrides the line above
super   group   super-users   *   //...               ## Maria is NOT a member

この場合、マリアは/depot/dev/productA/...ディレクトリから除外されいて、それよりも下の行にこの除外を上書きするコードも記述されていないため、Mariaはp4 edit //depot/dev/productA/readme.txtコマンドを実行することはできません。

除外マッピングと管理者

例えば、次を実行するとします。

write   group   Dev1   *   //depot/dev/...            
write    group   Dev1   *   -//depot/dev/productA/... 
super   group   super-users   *   //...

Dev1グループのメンバーには、productAに対するアクセス権が設定されていません。

ただし、管理者グループについては以下のように設定されています。

admin   group  Admins  *   //depot/...          
write   group  Admins   *   -//depot/dev/productA/... 
super   group  super-users   *   //...

この場合、AdminsグループのメンバーはproductAディレクトリ内のファイルは編集できませんが、p4 changesなどの管理コマンドについては、実行することができます。

除外マッピングが存在する場合と存在しない場合

除外マッピングが存在しない場合

除外マッピングが存在する場合

  • ユーザ、ユーザのIPアドレス、およびユーザがアクセスしようとしているファイルと適合するすべてのマッピングにリストされた権限レベルの中で最高のレベルがユーザに付与されます。
  • 一致する除外マッピングにより、そのマッピングよりも上の行に記述されているプロテクションのうち、一致するすべてのプロテクションが無効になります。

除外マッピングと「=」

ファイルパスの前に「-」を指定
write   group   Dev1    *   //depot/dev/...          
list   group    Rome    *   -//depot/dev/prodA/...   ## exclusion of list implies no read, no write, etc.
read    group   Rome    *   //depot/dev/prodA/...   ## Rome can only read this one path
write   group   Dev2    *   //depot/elm_proj/...      
super   user    Anne    *   //...                    
ファイルパスの前に「-」を指定し、アクセスレベルの前に「=」を指定
write   group   Dev1    *   //depot/dev/...            
=read  group    Rome    *  -//depot/dev/prodA/...   ## Rome cannot read this one path
write   group   Dev2    *   //depot/elm_proj/...       
super   user    Anne    *   //...                      

Helix Core P4コマンドリファレンス』のp4 protectコマンドの説明で、「権限レベルとアクセス権限」を参照してください。

アクセスレベルと「=」

行の内容 ... 指定されたユーザ、IPアドレス、ファイルパスに対する動作
read group Dev1 * -//depot/dev/prodA/... readレベル以下のアクセス権が拒否されます。
=read group Dev1 * -//depot/dev/prodA/... readアクセス権が拒否されますが、それよりも下位レベルのアクセス権については許可されます。
open group Dev1 * -//depot/dev/prodA/... openレベル以下のアクセス権が拒否されます。
=open group Dev1 * -//depot/dev/prodA/... openアクセス権が拒否されますが、それよりも下位レベルのアクセス権については許可されます。
write group Dev1 * -//depot/dev/prodA/... writeレベル以下のアクセス権が拒否されます。
=write group Dev1 * -//depot/dev/prodA/... writeアクセス権が拒否されますが、それよりも下位レベルのアクセス権については許可されます。
readopenwriteとは異なり、=branchには必ず「=」が付加されます。
=branch group Dev1 * -//depot/dev/prodA/... 指定されたパスに対する反映処理が拒否されます。