p4 protect

ユーザによるファイル、ディレクトリ、コマンドへのアクセスを管理します。

注意

ここで説明するアクセス権限は、p4 grant-permission (グラフ)に記載されているグラフディポの権限とは異なっていることに注意してください。

構文規則

p4 [g-opts] protect
p4 [g-opts] protect -o p4 [g-opts] protect -i
p4 [g-opts] protect --convert-p4admin-comments -o | -i

サブプロテクションの場合:

p4 protect path
p4 protect -o path
p4 protect -i path

説明

警告

以下の理由により、 新しいHelixサーバをインストールしたら、 すぐにp4 protectを実行することをお勧めします。

  • Helixサーバを使用するすべてのユーザに対して、 サービスへの接続が許可されるため。
  • すべてのHelixサーバユーザが スーパーユーザとして認識されるため。

p4 protectコマンドを初めて実行したユーザがスーパーユーザになり、その他すべてのユーザには、 すべてのファイルに対するwrite権限が設定されます。p4 protectコマンドを使用して追加のコントロールを作成することをお勧めします。

p4 passwd」に記載されているセキュリティ警告も参照してください。

p4 [g-opts] protectコマンドを実行すると、superアクセス権限を持つユーザが、プロテクションテーブルをテキスト形式で編集できるようになります。

以下のいずれかの方法でHelixサーバの権限を設定する場合は、 p4 protectコマンドを使用します。

  • 特定のユーザがアクセスできるコマンドを制御する
  • 特定のユーザが実行できるコマンドを制御する
  • p4 groupコマンドを使用して定義されたユーザグループに対して権限を付与する
  • ユーザまたはグループの特定のパスについて、p4 protectコマンドへのアクセス権限を付与する
  • =read=open=write=branchを 除外マッピングと組み合わせて使用する
  • 特定のIPアドレスのみにアクセスを制限する

通常は、listreadwriteownersuperのいずれかのアクセス権を指定します。 openreviewアクセスレベルは あまり使用されません。

通常は、以下のような運用方法になります。

  1. 以下のいずれかに対して、特定のアクセスレベルを付与します。
    • グループ(ベストプラクティスとしてお勧めします)
    • 個別のユーザ(複数のユーザを1つのグループにまとめることができない場合)
  2. アクセスレベルを詳細に制御する必要がある場合は、1つ以上のアクセス権限を 個別に除外します。
ヒント

「除外マッピング」の動作については、『Helix Coreサーバ管理者ガイド』の「プロテクションの実装のしくみ」を参照してください。

権限レベルとアクセス権

権限レベル名に「=」というプレフィックスが付いている場合、その権限が拒否されるということを表しています。

権限レベル/アクセス権限 ユーザが実行できること

list

すべてのHelixサーバメタデータにアクセスできますが、 ファイルの内容にはアクセスできません。 p4 filesp4 clientp4 jobp4 describep4 branchなどのHelixサーバオブジェクトを 記述するコマンドをすべて実行できます。

p4 describeのようなファイルを一覧表示するコマンドは、 ユーザが最低listアクセス権を持っているファイルのみを 一覧表示します。

read

list権限で許可されていることをすべて実行できます。さらに、ファイルのデータの 読み取りを伴うコマンド(p4 printp4 diffp4 syncなど)も すべて実行できます。

=read

この権限が拒否されている場合、ユーザはファイルに対してp4 printp4 diffp4 syncを使用できません。以下に例を示します。

=read group Dev1 * -//depot/dev/prodA/...

open

read権限で実行できることをすべて許可します。 また、ファイルをp4 addp4 editp4 deletep4 integrateするパーミッションを与えます。 ただし、ファイルのロックやディポへのサブミットは許可されていません。

openアクセスレベルでは、ユーザにファイル変更を許可しますが、 ディポへのファイルのサブミットは行いません。 一時的にコードラインを凍結させたいが開発者の作業を止めたくない場合や、 試験担当者に対し、個人使用のためのコード変更は認めるが コードラインに永久的な変更を加えることは認めないような場合などに、 このレベルの権限を割り当ててください。

=open

この権限が拒否されている場合、ユーザはp4 addp4 editp4 deletep4 integrateを使用してファイルを開くことはできません。以下に例を示します。

=open group Dev1 * -//depot/dev/prodA/...

write

上記のすべてを実行できます。さらに、p4 submitによるファイルへの書き込み、 p4 lockによるファイルのロックを実行できます。

=write

この権限が拒否された場合、ファイルを開いて編集することはできますが、ファイルをサブミットすることはできません。以下に例を示します。

=write group Admins * -//depot/dev/prodA/...

この場合、製品リリース用に開発者が承認したファイルを、管理者が誤って変更することがなくなります。

=branch

この権限が拒否されると、ユーザはファイルをp4 integrateの 反映元として使用できません。以下に例を示します。

=branch group Dev1 * -//depot/dev/prodA/...

review

Helixサーバにアクセスする外部プログラム専用の権限です。 list権限とread権限で実行できることすべての権限を 外部プログラムに与えます。 また、p4 reviewp4 counterを実行する権限を与えます。 ただし、openおよびwrite権限は 含まれません。

admin

上記すべてに加え、メタデータへの変更をオーバライドする管理者用コマンドが 含まれますが、サービスの動作に影響することはありません。

これには、p4 branch -fp4 change -fp4 client -fp4 job -fp4 jobspecp4 label -fp4 obliteratep4 shelve -f -dp4 typemapp4 unlock -fp4 verifyが含まれます。

super

上記のすべてに加え、 さらにp4 adminp4 counterp4 triggersp4 protect、 およびp4 user -fによるユーザ作成機能などの スーパーユーザコマンドにもアクセスできます。

owner

この権限を使用して、特定パスに対してp4 protectを実行する権限を 特定のユーザまたはグループに割り当てます。 詳細については、『Helix Coreサーバ管理者ガイド』の 「アクセスの認証」を参照してください。

サブプロテクション

superアクセス権を持つユーザはサブプロテクションを使用して、super権限を持っていないユーザやグループに対して、プロテクションテーブルの一部の管理を委任することができます。これを行うには、ownerを使用して、エントリをモードとして作成します。これらのエントリでは、ワイルドカードを使用せずに一意のパスを指定する必要があります。ただし、末尾に「...」を指定することができます。

super権限を持っているユーザや、パスに対するowner権限が付与されているユーザは、許可されているパスを引数として指定してp4 protectコマンドを実行することにより、そのパスのサブプロテクションテーブルにアクセスすることができます。

サブプロテクションテーブル内のすべてのエントリが、ownerエントリ直下の対応するプロテクションテーブルに追加されます。

  • ownerエントリを削除すると、そのエントリのパスに対するサブプロテクションテーブル内のエントリがすべて削除されます。

  • owner権限を持っているユーザは、指定されたパスのサブプロテクションテーブルにのみアクセスすることができます。そのパスのユーザやグループにアクセスすることはできません。

  • owner権限を持つユーザは、指定したパス上で、自分自身に対してadmin権限を設定することができます。

  • ownerエントリやsuperエントリをサブプロテクションテーブルに追加することはできません。その他のエントリのパスは、サブプロテクションテーブルのパスの範囲内にある必要があります。

フォームフィールド」のサブパスを参照してください。

ストリーム仕様の権限

重要

リリース2020.1よりも前のリリースでは、ストリーム仕様専用のプロテクションモードはありませんでした。ストリーム仕様の一覧表示権限、読み取り権限、編集権限は、対応するファイル仕様プロテクションモードを基に、以下のように認識されていました。

  • list権限(特定のディポに対する権限)の場合、p4 streamsを実行して、そのディポ内のストリームを一覧表示することができる
  • open権限またはwrite権限の場合(特定のファイル仕様に対する権限)、そのファイル仕様に一致するストリームルートを持つ任意のストリーム仕様を編集して保存することができる

リリース2020.1では、ストリーム仕様専用のプロテクションモードが導入されました。デフォルトの場合、ここで説明した権限はプロテクションテーブル内に含めることができますが、dm.protects.streamspec構成可能変数の値を「1」に設定しない限り、使用することはできません。プロテクションテーブル内にストリーム仕様の権限が含まれている状態で、dm.protects.streamspec構成可能変数の値を「1」に設定した場合、リリース2020.1よりも前の権限は適用されなくなります。また、adminユーザとsuperユーザを除くすべてのユーザについて、ストリーム仕様の権限を明示的に指定する必要があります。

古いリリースの権限をストリーム仕様の権限に実装する場合は、以下の操作を行います。

  • 以下のコマンドを実行して、readstreamspec権限を必要とするすべてのユーザが属するユーザグループを作成する。

    readstreamspec group readgroup * //...

  • 以下のコマンドを実行して、writestreamspec権限を必要とするすべてのユーザが属する別のユーザグループを作成する。

    writestreamspec group writegroup * //...

readstreamspec この権限を持つユーザは、 p4 stream -oコマンドを使用してストリーム仕様を表示することができます。

例えば、//streamD1/main1がストリームの場合は、以下のように指定します。

readstreamspec user user1 * //streamD1/main1

=readstreamspec この権限が拒否されているユーザは、p4 stream -oコマンドを実行することはできません。

例えば、//streamD1/dev2がストリームの場合は、以下のように指定します。

=readstreamspec user user1 * -//streamD1/dev2

openstreamspec この権限を持つユーザは、ストリーム仕様について、 元に戻す、衝突を解決する、保留する、編集用に開く、という操作を実行することができます。
=openstreamspec この権限が拒否されているユーザは、ストリーム仕様について、 元に戻す、衝突を解決する、保留する、編集用に開く、という操作を実行することはできません。
writestreamspec この権限を持つユーザは、 ストリーム仕様のサブミットと変更を行うことができます。
=writestreamspec この権限が拒否されている場合ユーザは、 ストリーム仕様のサブミットや変更を行うことはできません。

フォームフィールド

p4 protectを実行すると、HelixサーバProtections:フィールドのみのフォームを表示します。 各権限は、 Protections:に見出しの下でインデントされた専用の行に指定され、 次の5つの値を使用してプロテクションを定義します。

説明

アクセスレベルまたはモード

前項で定義された、listreadopenwriteadminsuperownerreviewのいずれかのアクセスレベル、 または=read=open=write=branchのいずれかの権限です。

ユーザまたはグループ

このプロテクションがuserまたはgroupに適用されるかを指定します。

グループ名またはユーザ名

ユーザ名またはp4 groupで定義したグループ名。 すべてのユーザにこの権限を与えるときは、ワイルドカード「*」を 使用します。

ホスト

クライアントホストのIPアドレス(複数の場合は、コンマ区切りのIPアドレス)。

IPv6アドレスおよびIPv4アドレスがサポートされています。 また、CIDR表記を使用していない場合にのみ、すべてのIPアドレスを参照するために ワイルドカード「*」を使用できます。

IPv6アドレスに*ワイルドカードを使用する場合は、IPv6アドレス全体を 角括弧で囲む必要があります。 例えば、[2001:db8:1:2:*][2001:db8:1:2::]/64に相当します。 CIDR表記を使用し、IPV6アドレスを角括弧で囲み、 *ワイルドカードの使用を避けることをお勧めします。

システムは、dm.proxy.protects変数の設定によりどのようにしてホストの アドレスを作成するのでしょうか。デフォルトでは、この変数は1に設定されています。 これは、クライアントのホストが中間サーバ(プロキシ、ブローカ、レプリカ)を使用して サーバにアクセスしている場合、プレフィックスproxy-が クライアントホストアドレスの前に付き、その接続が直接では ないことを示すことを意味します。 proxy-*Hostフィールドに指定した場合、 プロキシ、ブローカ、レプリカを経由する すべての接続に影響します。proxy-10.0.0.5のような値は、 IPアドレスが10.0.0.5のクライアントマシンが中間サーバを通して サーバにアクセスしていると認識します。

dm.proxy.protects変数を0に設定すると、プレフィックスproxy-が削除され、 プロテクションエントリを1セット書き込むことができます。 これは、直接接続しているクライアントと中間サーバを 経由して接続しているクライアントの両方に適用されます。 これは便利ですが、中間サーバを経由して接続することに問題がある場合、 安全性が低下します。この設定を使用する場合は、 すべての中間サーバがリリース2012.1以降になっている必要があります。

ディポファイルのパス

Helixサーバディポシンタックスで、この権限が 与えられているディポファイルのパス。ファイルの指定は、 のHelixサーバワイルドカードを含むことができます。

このマッピングを権限セットから除外するには、設定値の頭に ダッシュ(-)を付けます。

ディポが除外された場合、アクセスを拒否されたユーザは p4 depotsの出力でディポを見ることができなくなります。 また、このユーザに対してデフォルトのブランチビュー、クライアントビュー、 ラベルビューでディポは表示されません。

サブパス

 

サブプロテクションテーブルのルートパス。

  • サブパスは、プロテクションテーブルには含まれていません。
  • サブパスは、サブプロテクションテーブルを編集する場合にのみ使用されます。

サブプロテクションテーブルの使用例については、『Helix Coreサーバ管理者ガイド』の「プロテクションテーブルの一部の管理を委任する」を参照してください。

更新

 

この仕様が最後に変更された日付(読み取り専用)。

  • この日付を変更すると、プロテクションテーブルが保存されなくなります。
  • このフィールドを省略すると、変更チェックがスキップされます。

このフィールドは、プロテクションテーブルには含まれていません。

コメント

プロテクションテーブルは解釈やデバッグが難しくなる場合があります。そのような場合にコメントを付け加えることで、 分かりやすくすることができます。

  • ##記号を使用することで、行の最後にコメントを追加することができます。

    write user *   10.1.1.1   //depot/test/...  ## my comment
  • または、行の先頭に##記号を付けることで、 コメント行を作成できます。

    ## my comment
    write user *   10.1.1.1   //depot/test/...
警告

P4Adminツールを使用して作成したコメントには、バージョン2016.1以降の p4 protectコマンドを使用して作成されたコメントとの 互換性がありません。次のコマンドを使用することで、 P4Adminで作成されたコメントを含むファイルを p4 protectタイプのコメントを含むファイルに 変換することができます。

$ p4 protect --convert-p4admin-comments -o

その後、変換後のファイルを保存します。

コメントの変換が完了したら、p4 protectを使用して プロテクションの定義と管理を行う必要があります。 P4Adminではp4 protectのコメントが解析できないため、 変換後のコメントは使用できなくなります。

オプション

-i

エディタを起動せずに、標準出力からフォームを読み取ります。

-o

エディタを起動せずに、フォームを標準出力に書き出します。

--convert-p4admin-comments

P4Adminツールを使用して作成された 既存のプロテクション形式(およびコメント)を、 p4 protectで使用可能な形式に変換します。

g-opts

グローバルオプション」を参照してください。

使用上の注意点

ファイル引数でリビジョン指定子を使用できるか? ファイル引数でリビジョン範囲を使用できるか? 最低限必要なアクセスレベル

いいえ

いいえ

super

各権限のレベルはその下にあるすべてのアクセスレベルを含みます。

特殊な権限である=read=open=write=branchを使用して、下位のアクセスレベルを自動的に 包含しないようにオーバーライドできます。これにより、後で下位の権限を 再設定することなく、権限を個別に無効にすることができます

例えば、管理者に管理コマンドの実行権限を与えつつ、 ディポの特定の部分に対する変更権限を拒否したいという場合、 権限テーブルを次のように設定することができます。

Protections:
    admin       user      joe       *       //...
    =write      user      joe       *       -//depot/build/...
    =open       user      joe       *       -//depot/build/...

この例では、ユーザjoeは管理機能を実行でき、 この権限はシステム内のすべてのディポに適用されます。 admin権限レベルでは暗黙的にそれより下位にある すべてのアクセスレベルが認められるため、joe//depot/build/を含むシステム内のどのファイルにも、開く操作、 書き込み、読み取り、一覧表示が可能です。buildの階層をプロテクトするには、 =writeおよび=openの排他行を テーブルに追加します。

  • =open」排他行により、ユーザjoeは、//depot/build/ディレクトリ内のファイルを 編集用として開くことができなくなります:
  • =write」排他行により、ユーザjoeは、//depot/build/ディレクトリ内で行った 変更内容をサブミットできなくなります:

あるサーバ上のファイルを別のサーバからのリモートディポとして 使用する(p4 depotで定義)のを制限したり排除するには、 remoteユーザ(または別のサーバが認証に用いるサービスユーザ)に対する プロテクションを作成してください。 リモートディポは、ユーザのPerforceサービスに関連付けられたサービスユーザか、 remoteという名前の仮想ユーザによってアクセスされます。

使用できるコマンドは、アクセスレベルによって決まります。例えば、p4 addは少なくともopenのアクセス権を必要とするため、 writeopenadmin、またはsuperのアクセス権があれば p4 addを実行できます。

いくつかのコマンド(例えば、p4 changeで、以前サブミットされたチェンジリストを 編集するとき)は、管理者権限またはスーパーアクセス権限が必要な -fオプションを使用します。

各コマンドの詳細については、『Helix Coreサーバ管理者ガイド』の「Helixサーバコマンドが必要とするアクセスレベル」を参照してください。

関連コマンド

ユーザグループを作成または編集する

p4 group

すべてのユーザグループを一覧表示する

p4 groups

グラフタイプのディポとレポジトリに対する権限を許可する p4 grant-permission (グラフ)