p4 protect

概要

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

構文


p4 [g-opts] protect
p4 [g-opts] protect -o
p4 [g-opts] protect -i

解説

p4 protectは、Perforceパーミッションを制御します。以下のようにp4 protectを使用できます。

  • どのユーザがどのファイルにアクセスできるかを制御します。

  • どのユーザがどのコマンドを使用できるかを制御します。

  • 上記の2点を組み合わせると、あるユーザに対して、あるファイルセットへは書き込み可能で他のファイルは読み取りのみ、という制御ができます。

  • p4 groupで定義したユーザグループにパーミッションを与えます。

  • ユーザに対して特定のアクセス権限を付与または拒否するには、=read=open=write=branchの各権限を使用します。それより下位の権限を再度付与する必要はありません。

  • 特定のIPアドレス上のユーザのみがPerforceを実行できるよう、アクセスをこのIPアドレスに限定します。

一般的に、ユーザまたはグループごとにアクセスレベルが1つ与えられ、さらにより細かい制御が必要であれば、1つ以上の特定の権限を選択的に拒否することができます。

以下に、Perforceのパーミッションレベルとアクセス権限を示します。

パーミッションレベル/権限

ユーザが実行できること

list

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

read

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

=read

この権限が拒否されると、ユーザはファイルに対してp4 printp4 diffp4 syncを実行できません。

open

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

=open

この権限が拒否されると、ユーザはp4 addp4 editp4 deletep4 integrateによってファイルを作業状態にすることができません。

write

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

=write

この権限が拒否されると、ユーザは作業状態のファイルをサブミットできません。

=branch

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

review

Perforceにアクセスする外部プログラム専用のパーミッションです。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 -fおよびp4 verifyです。

super

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

フォームフィールド

p4 protectを実行すると、PerforceはProtections:フィールドだけのフォームを表示します。各パーミッションは、[Protections:]の見出しに対してインデントされた、専用の行に指定されます。各行には次の5つの設定値があります。

解説

アクセスレベル

前項で定義された、listreadopenwritereviewsuperまたは=read=open=write=branchの各権限のうちの1つ。

ユーザまたはグループ

プロテクションが適用されるのは、usergroupかの指定。

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

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

Host

クライアントホストの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以降になっている必要があります。

ディポファイルのパス

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

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

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

除外マッピングが設定されていない場合、各ユーザにはユーザ、ユーザのIPアドレス、およびユーザがアクセスしようとしているファイルと適合するすべてのマッピングにリストされたパーミッションレベルの中で最高のレベルが与えられます。この場合、マッピングの順序は関係ありません。

除外マッピングが設定されている場合、マッピングの順序が関係します。除外マッピングは、それより上の行にリストされているプロテクションのうち適合するものはすべて無効にします。除外プロテクションでどのアクセスレベルが拒否されていても、適合するユーザ、ファイル、IPアドレスに対するすべてのアクセスレベルが拒否されます。

除外マッピングを使用して、group1のメンバーに対してディポのある領域へのアクセスを拒否し、group2のメンバーに対してはディポの同じ領域へのアクセスを許可した場合、group1group2の両方のメンバーであるユーザは、プロテクションテーブル内でどちらの行が後に記述されているかによってアクセスの可否が決まります。

オプション

-i

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

-o

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

g-opts

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

使用上の留意点

ファイル引数にリビジョン指定子を使えるか?

ファイル引数にリビジョン範囲を使えるか?

最低限必要なアクセスレベル

使用不可

使用不可

super

  • 下図のように、各パーミッションのレベルはその下にあるすべてのアクセスレベルを含みます。

  • 特殊な権限である=read=open=write=branchを使用して、下位のアクセスレベルを自動的に包含しないようにすることができます。これにより、個々の権限を無効にすることができ、後で下位の権限を再度付与する必要はありません。

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

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

    この例では、ユーザjoeは管理機能を実行でき、このパーミッションはシステム内のすべてのディポに適用されます。adminパーミッションレベルでは黙示的にそれより下位にあるすべてのアクセスレベルが認められるため、joe//depot/build/を含むシステム内のどのファイルにも、書き込み、オープン、読み取り、一覧表示が可能です。buildの階層を保護するには、=writeおよび=openの排他行をテーブルに追加します。ユーザjoeは、build階層にあるすべてのファイルを編集目的で開くことができなくなります。また、すでに開いている可能性のある、この階層で加えられた変更はサブミットすることができません。ファイルの作成および変更は引き続き可能ですが、保護された階層//depot/build/...の外にそれらのファイルがある場合に限られます。

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

    コマンド

    アクセスレベル

    備考

    add

    open

    admin

    super

    annotate

    read

    archive

    admin

    attribute

    write

    サブミットされたファイルに属性を設定するための-fオプションには、admin権限が必要です。

    branch

    open

    既存のメタデータや他のユーザのデータをオーバライドするための-fオプションには、admin権限が必要です

    branches

    list

    change

    open

    -oオプション(変更を標準出力に表示)にはlist権限さえあれば十分です。既存のメタデータや他のユーザのデータをオーバライドするための-fオプションには、admin権限が必要です

    changes

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    client

    list

    既存のメタデータや他のユーザのデータをオーバライドするための-fオプションには、admin権限が必要です

    clients

    list

    configure

    super

    copy

    list

    コピー元ファイルにはlist権限、コピー先ファイルにはopen権限が必要です。

    counter

    review

    既存のカウンターの値を表示するには、ディポ内の1つ以上のファイルに対するlistのアクセス権が必要です。カウンターの値を変更する、または新しいカウンターを作成するには、reviewのアクセス権が必要です。

    counters

    list

    cstat

    list

    dbschema

    super

    dbstat

    super

    dbverify

    super

    delete

    open

    depot

    super

    このコマンドに対する-oオプションは、フォームの編集ではなく読み取りを可能にするもので、listのアクセス権があれば十分です。

    depots

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    describe

    read

    このコマンドに対する-sオプションは、ファイルの内容を表示しません。listのアクセス権があれば十分です。

    diff

    read

    diff2

    read

    dirs

    list

    diskspace

    super

    edit

    open

    export

    super

    filelog

    list

    files

    list

    fix

    open

    fixes

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    flush

    list

    fstat

    list

    grep

    read

    group

    super

    このコマンドに対する-oオプションは、フォームの編集ではなく読み取りを可能にするもので、listのアクセス権があれば十分です。

    このコマンドに対する-aオプションは、ユーザがグループ所有者としてリストされている場合、listのアクセス権があれば十分です。

    -Aオプションには、adminアクセス権が必要です。

    groups

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    have

    list

    help

    none

    info

    none

    integrate

    open

    ユーザは対象ファイルのopenのアクセス権と、ソースファイルのreadのアクセス権が必要です。

    integrated

    list

    interchanges

    list

    istat

    list

    job

    open

    このコマンドに対する-oオプションは、フォームの編集ではなく読み取りを可能にするもので、listのアクセス権があれば十分です。

    既存のメタデータや他のユーザのデータをオーバライドするための-fオプションには、adminアクセス権が必要です

    jobs

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    journaldbchecksums

    super

    key

    review

    既存のキーの値を表示するには、ディポ内の1つ以上のファイルに対するlistのアクセス権が必要です。キーの値を変更する、または新しいキーを作成するには、reviewのアクセス権が必要です。

    key

    list

    dm.keys.hide構成可能変数が2に設定されている場合、adminのアクセス権が必要です。

    keys

    list

    dm.keys.hide構成可能変数が1または2に設定されている場合、adminのアクセス権が必要です。

    label

    open

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    既存のメタデータや他のユーザのデータをオーバライドするための-fオプションには、adminアクセス権が必要です

    labels

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    labelsync

    open

    license

    super

    ライセンス使用量を表示する-uオプションには、adminのアクセス権のみが必要です。

    list

    open

    lock

    write

    lockstat

    super

    logappend

    list

    logger

    review

    login

    list

    logout

    list

    logparse

    super

    logrotate

    super

    logschema

    super

    logstat

    super

    logtail

    super

    merge

    open

    monitor

    list

    処理を終了または取り消す、あるいは引数を参照するにはsuperのアクセス権が必要です。

    move

    open

    obliterate

    admin

    opened

    list

    passwd

    list

    ping

    admin

    populate

    open

    print

    read

    protect

    super

    protects

    list

    -a-g-uオプションを使用するには、superのアクセス権が必要です。

    property

    list

    読み取りにはlist、新しいプロパティの追加または削除、およびプロパティ設定の表示や全ユーザおよびグループの表示にはadminの権限が必要です。

    proxy

    none

    Perforceプロキシに接続している必要があります。

    pull

    super

    reconcile

    open

    reload

    open

    p4 reload -fを使用して他のユーザのワークスペースとラベルをリロードするには、adminのアクセス権が必要です。

    reopen

    open

    replicate

    super

    resolve

    open

    resolved

    open

    restore

    admin

    revert

    list

    review

    review

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    reviews

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    server

    super

    serverid

    list

    サーバIDを設定するには、super権限が必要です。

    set

    none

    shelve

    open

    p4 shelve -f -dにより保留状態のファイルを強制的に削除するには、adminのアクセス権が必要です。

    sizes

    list

    status

    open

    stream

    open

    streams

    list

    submit

    write

    sync

    read

    tag

    list

    tickets

    none

    triggers

    super

    typemap

    admin

    このコマンドに対する-oオプションは、フォームの編集ではなく読み取りを可能にするもので、listのアクセス権があれば十分です。

    unload

    open

    p4 unload -fを使用して他のユーザのワークスペースとラベルをアンロードするには、adminのアクセス権が必要です。

    unlock

    open

    既存のメタデータや他のユーザのデータをオーバライドするための-fオプションには、adminアクセス権が必要です

    unshelve

    open

    update

    list

    user

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    -fオプション(ユーザの作成と編集に使用)には、superのアクセス権が必要です。

    users

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

    構成可能変数run.users.authorizeが1に設定されている場合、p4 usersを実行するためにはユーザ自身がサーバの認証を受ける必要があります。

    verify

    admin

    where

    list

    このコマンドは特定のファイルに作用するものではありません。つまり、ユーザがディポの少なくとも1つのファイルに対してアクセス権を指定されていれば、コマンド実行の権限が付与されています。

  • 新しいPerforceをインストールしたときは、Perforceを使用したい人すべてがサービスに接続でき、すべてのPerforceユーザがスーパーユーザとなります。p4 protectを最初に実行すると、その実行したユーザがスーパーユーザとなり、他のユーザにすべてのファイルに対するwriteパーミッションが与えられます。インストール後すぐにp4 protectを実行してください。

  • 通常の操作で与えられるアクセスレベルは、主にlistreadwriteおよびsuperです。openreviewはあまり使用されません。

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

  • いくつかのコマンド(例えば、p4 changeで以前サブミットされたチェンジリストを編集する場合など)では-fオプションをとりますが、これはadminもしくはsuperアクセス権が必要です。

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

  • reviewアクセスレベルは、カウンタ値にアクセスする必要のあるレビューデーモンを意図しています。

  • review権限とwrite権限の両方を必要とするがsuper権限は必要としないレビューデーモンを記述する場合、プロテクションテーブルの別々の行でreview権限とwrite権限の両方をデーモンに付与してください。

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

  • 詳細については、『Perforceサーバ管理者ガイド: 基本』の「プロテクション」を参照してください。

ユーザjoep4 groupによってdevgroupグループとbuggroupグループのメンバーに設定されており、この組織がIPv4接続のみを使用していると仮定すると、プロテクションテーブルは次のようになります。

super   user    bill      *                 //...
write   group   devgroup  *                 //depot/...
write   group   buggroup  *                 -//depot/proj/...
write   user    joe       192.168.100.0/24  //...

Joeはいくつかの操作を試みます。各操作が成功するか失敗するかは次のとおりです。

操作元IPアドレス

試みる操作

結果

10.14.10.1

p4 print //depot/misc/...

成功します。2行目で、これらのファイルへのwrite権限がJoeに与えられています。write権限はread権限を含み、以降のどの行でもこのプロテクションは除外されていません。

10.14.10.1

p4 print //depot/proj/README

失敗します。3行目で、このディレクトリ中のあらゆるファイルに対するJoeのすべてのパーミッションが除去されています。(2番目と3番目のプロテクションが入れ替わっていた場合、以降のプロテクションが除去を無効にするので、Joeはこの操作に成功します。)

192.168.100.123

p4 print //depot/proj/README

成功します。Joeのワークステーションは、4行目でこのパーミッションを与えられたIPアドレスに位置しています。

192.168.100.123

p4 verify //depot/misc/...

失敗します。p4 verifysuper権限を必要とし、どのIPアドレスからアクセスしてもJoeはこのアクセスレベルを持っていません。

関連コマンド

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

p4 group

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

p4 groups