Helix Coreサーバ管理者ガイド: 基本 (2019.1)

ユーザのグループにアクセス権を設定する

Helixサーバグループはプロテクションテーブルの管理を容易にします。同一のアクセス権限を必要とするユーザの名前を1つのグループに保存できます。その上で、そのグループ名をテーブルに記述すれば、そのグループのユーザ全員が指定の権限をもちます。

グループはp4 groupで管理し、プロテクションはp4 protectで割り当てます。これらのコマンドは、Helixサーバスーパーユーザのみが使えます。(Helixサーバ管理者もp4 group -Aを使用してグループを管理できますが、グループが既に存在していない場合に限られます)。

グループとLDAPに関する詳細については、HelixサーバユーザとグループをLDAPグループと同期するを参照してください。

グループの作成と編集

p4 group groupnameで、存在しないgroupnameを使用して呼び出すと、groupnameのついた新しいグループが作成されます。p4 groupを既存のgroupnameで呼び出すと、そのグループのユーザリストの編集が可能になります。

グループにユーザを追加するには、p4 groupgroupnameコマンドによって生成されたフォームのUsers:フィールドにユーザ名を追加します。ユーザ名はUsers:フィールドのヘッダの下に入力します。各ユーザ名は別々の行にインデントを付けて入力します。1つのユーザ名を多数のグループに登録しても構いません。グループの所有者は必ずしもグループのメンバーでなくても構いません。グループ所有者をグループのメンバーにするには、そのユーザIDもUsers:フィールドに追加する必要があります。

グループは個別のユーザだけでなく他のグループを含むこともできます。既に定義済みのグループのユーザ全員を作業中のグループに追加するには、p4 groupのフォームのSubgroups:フィールドにそのグループ名を含めます。ユーザ名とグループ名は別々のネームスペースを占めるため、グループとユーザは同じ名前を持つことができます。

存在しないユーザをグループ定義に追加しても、実際にはユーザは作成されず、ライセンスも消費されません。ユーザを作成するには、p4 userコマンドを使用します。

グループとプロテクション

p4 protectのフォームでグループを使用するときは、プロテクションテーブルのすべての該当する行にユーザ名ではなくグループ名を指定し、行の2番目のフィールドをuserではなくgroupにします。そのグループのユーザ全員に指定の権限が認められます。

Helixグループにアクセス権を設定する

下のプロテクションテーブルはグループdevgrpのメンバー全員にlist、ユーザedksuperのアクセス権を認めています。

list        group        devgrp      *        //...
super       user         edk         *        //...

次の3つの権限の行においては、グループac1は、//ac1/...への書き込みアクセス権、および//ac1/ac1_dev/...への読み取り専用アクセス権が与えられます。.

write        group        ac1      *        //ac1/...
list         group        ac1      *        -//ac1/ac1_dev/...
read         group        ac1      *        //ac1/ac1_dev/...

ユーザが複数のグループに属している場合、ある権限が他の権限をオーバーライドする場合があります。例えば、除外マッピングを使用して、group1のメンバーに対してディポのある領域へのアクセスを拒否し、group2のメンバーに対してはディポの同じ領域へのアクセスを許可した場合、group1group2の両方のメンバーであるユーザは、プロテクションテーブル内でどちらの行が最後に記述されているかによってアクセスの可否が決まります。実際にユーザに認められる権限を判断するには、プロテクションテーブル内で該当ユーザが属するすべてのグループ名をそのユーザ名に置き換えたうえで、本章で先に説明した各種のルールに則して解釈することで可能です。

HelixサーバユーザとグループをLDAPグループと同期する

特定のHelixサーバユーザまたはユーザグループをそのLDAPユーザまたはユーザグループと自動で同期するようにHelixサーバを設定できます。プロテクションは引き続きHelixサーバユーザまたはユーザグループのIDに基づいて(p4 protectコマンドを使用して)割り当てられます。ただし、Helixサーバグループに含まれるユーザはLDAPグループで設定されるメンバーに基づきます。

同期は1回ずつまたは指定した間隔で実行できます。詳細については、『Helix Core P4コマンドリファレンス』のp4 ldapsyncコマンドの解説を参照してください。

グループ同期の設定を行う前に、LDAP構成を定義する必要があります。

Note

LDAPサーバで読み取り専用クエリの実行にログインが必要とされる場合、LDAPコンフィギュレーションにおいて、LDAP仕様のSearchBindDNフィールドとSearchPasswdフィールドに有効なバインド資格情報が含まれていなければなりません。

グループの同期を設定するには、以下を実行します。

  1. Helixサーバgroup仕様で次のフィールドを定義します。

    • LdapConfig: p4 ldapcommand.コマンドを使用して作成されるLDAPコンフィギュレーションの名前です。

      LDAPコンフィギュレーションは次を行います。

      • LDAP接続におけるホスト名、ポート、暗号化情報を提供
      • 認証を行う際にSearchBindDNSearchPasswdGroupSearchBaseDNのフィールドをどのように使用するかを指定
    • LdapSearchQuery: グループメンバーのレコードを識別するための検索クエリです。
    • LdapUserAttribute: グループメンバーのユーザIDが含まれる属性を意味します。このユーザ名がHelixサーバグループのユーザ名に追加されます。
  2. Helixサーバグループのグループ所有者を定義します。所有者は該当するLDAPグループのメンバーでなくとも構いません。
  3. p4 ldapsyncコマンドを使用して、同期するHelixサーバグループを指定したうえで次のようなコマンドを使用し、予想される結果を確認します。

    $ p4 ldapsync -g -n my-perforce-group1 my-perforce-group2

    p4 ldapsync では、LDAPコンフィギュレーションによって提供されるコンテキストを使用して検索クエリが実行され、返された結果のうちすべての定義済みの属性が収集されます。グループのメンバーリストが結果一覧として表示されます。

  4. プレビュー結果に問題がなければ、p4 ldapsync(-nなし)を再び実行してグループを同期します。

    定期的に同期を実行するようにスケジュール設定するには、起動時にp4 ldapsyncコマンドを実行して間隔の値を指定する必要があります。詳細については、『Helix Core P4コマンドリファレンス』のp4 ldapsyncコマンドの例を参照してください。

Active Directoryと同期するおよびOpenLDAPと同期するに記載される次の例で、グループ同期を定義する2つの方法を説明します。これらの例は、別々のサーバに保存されたユーザとグループの参照に応じて、コンフィギュレーションがどのように異なるかを示しています。

  • OpenLDAPのグループレコードには、メンバーユーザIDのリストが保存されています。これらは大抵の場合Helixサーバユーザ名として直接使用することができます。
  • Active Directoryのグループレコードには、メンバーの完全な識別名(DN)が保存されています。またユーザレコードには、ユーザが属する各グループの完全なDNが保存されています。この例では、グループレコードを直接探すのではなく、グループへの後方参照が含まれるユーザレコードを探す必要があります。

LDAP仕様のGroupBaseDnによる違いに注意してください。Active Directoryではグループに属するユーザを探し、OpenLDAPではユーザが属するグループを探します。目的のパスはそれぞれ異なることになります。

以下の例では、両方のサーバでou=users,dc=example,dc=comのDNのもとにユーザが存在します。ここでは、developmentのLDAPグループの内容を反映したHelixサーバグループを作成しています。

Active Directoryと同期する

次のように定義されるmy-ad-exampleという名前のLDAPコンフィギュレーションをサンプルとして挙げます。

Name:              my-ad-example
Host:              ad.example.com
Port:              389
Encryption:        tls
BindMethod:        search
SearchBaseDN:      ou=users,dc=example,dc=com
SearchFilter:      (&(objectClass=user)(sAMAccountName=%user%))
SearchBindDN:      CN=agupta, OU=users, DC=foodomain, DC=com
SearchPasswd:      password
SearchScope:       subtree
GroupBaseDN:       ou=users,dc=example,dc=com
GroupSearchScope:  subtree

この場合、p4 group developmentコマンドで作成されるグループ仕様は以下のようになります。

Group:             development
LdapConfig:        my-ad-example
LdapSearchQuery:   (&(objectClass=user)(memberOf=cn=development,ou=groups,
                                                       dc=example,dc=com))
LdapUserAttribute: sAMAccountName
Owners:            super

OpenLDAPと同期する

次のように定義されるmy-openldap-exampleという名前のLDAPコンフィギュレーションをサンプルとして挙げます。

Name:              my-openldap-example
Host:              openldap.example.com
Port:              389
Encryption:        tls
BindMethod:        search
SearchBaseDN:      ou=users,dc=example,dc=com
SearchFilter:      (&(objectClass=inetOrgPerson)(uid=%user%))
SearchBindDN:      CN=agupta, OU=users, DC=foodomain, DC=com
SearchPasswd:      password
SearchScope:       subtree
GroupBaseDN:       ou=groups,dc=example,dc=com
GroupSearchScope:  subtree

この場合、p4 group developmentコマンドで作成されるグループ仕様は以下のようになります。

Group:             development
LdapConfig:        my-openldap-example
LdapSearchQuery:   (&(objectClass=posixGroup)(cn=development))
LdapUserAttribute: memberUid
Owners:            super

グループを削除する

グループを削除するには、次のコマンドを使います。

$ p4 group -d groupname

または、p4 group groupnameで呼び出される編集フォーム上のグループからすべてのユーザ、サブグループ、所有者を削除することもできます。フォームを閉じるとグループが削除されます。