ユーザのグループにアクセス権を設定する
Helixサーバグループはプロテクションテーブルの管理を容易にします。同一のアクセス権限を必要とするユーザの名前を1つのグループに保存できます。その上で、そのグループ名をテーブルに記述すれば、そのグループのユーザ全員が指定の権限をもちます。
グループはp4 group
で管理し、プロテクションはp4 protect
で割り当てます。これらのコマンドは、Helixサーバスーパーユーザのみが使えます。(Helixサーバ管理者もp4 group -A
を使用してグループを管理できますが、グループが既に存在していない場合に限られます)。
グループとLDAPに関する詳細については、HelixサーバユーザとグループをLDAPグループと同期するを参照してください。
グループの作成と編集
p4 group
で、存在しないgroupname
groupname
を使用して呼び出すと、groupname
のついた新しいグループが作成されます。p4
group
を既存のgroupname
で呼び出すと、そのグループのユーザリストの編集が可能になります。
グループにユーザを追加するには、p4 group
コマンドによって生成されたフォームのgroupname
Users:
フィールドにユーザ名を追加します。ユーザ名はUsers:
フィールドのヘッダの下に入力します。各ユーザ名は別々の行にインデントを付けて入力します。1つのユーザ名を多数のグループに登録しても構いません。グループの所有者は必ずしもグループのメンバーでなくても構いません。グループ所有者をグループのメンバーにするには、そのユーザIDもUsers:
フィールドに追加する必要があります。
グループは個別のユーザだけでなく他のグループを含むこともできます。既に定義済みのグループのユーザ全員を作業中のグループに追加するには、p4 group
のフォームのSubgroups:
フィールドにそのグループ名を含めます。ユーザ名とグループ名は別々のネームスペースを占めるため、グループとユーザは同じ名前を持つことができます。
存在しないユーザをグループ定義に追加しても、実際にはユーザは作成されず、ライセンスも消費されません。ユーザを作成するには、p4
user
コマンドを使用します。
グループとプロテクション
p4 protect
のフォームでグループを使用するときは、プロテクションテーブルのすべての該当する行にユーザ名ではなくグループ名を指定し、行の2番目のフィールドをuser
ではなくgroup
にします。そのグループのユーザ全員に指定の権限が認められます。
例Helixグループにアクセス権を設定する
下のプロテクションテーブルはグループdevgrp
のメンバー全員にlist
、ユーザedk
にsuper
のアクセス権を認めています。
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
のメンバーに対してはディポの同じ領域へのアクセスを許可した場合、group1
とgroup2
の両方のメンバーであるユーザは、プロテクションテーブル内でどちらの行が最後に記述されているかによってアクセスの可否が決まります。実際にユーザに認められる権限を判断するには、プロテクションテーブル内で該当ユーザが属するすべてのグループ名をそのユーザ名に置き換えたうえで、本章で先に説明した各種のルールに則して解釈することで可能です。
HelixサーバユーザとグループをLDAPグループと同期する
特定のHelixサーバユーザまたはユーザグループをそのLDAPユーザまたはユーザグループと自動で同期するようにHelixサーバを設定できます。プロテクションは引き続きHelixサーバユーザまたはユーザグループのIDに基づいて(p4 protect
コマンドを使用して)割り当てられます。ただし、Helixサーバグループに含まれるユーザはLDAPグループで設定されるメンバーに基づきます。
同期は1回ずつまたは指定した間隔で実行できます。詳細については、『Helix Core P4コマンドリファレンス』のp4 ldapsyncコマンドの解説を参照してください。
グループ同期の設定を行う前に、LDAP構成を定義する必要があります。
LDAPサーバで読み取り専用クエリの実行にログインが必要とされる場合、LDAPコンフィギュレーションにおいて、LDAP仕様のSearchBindDN
フィールドとSearchPasswd
フィールドに有効なバインド資格情報が含まれていなければなりません。
グループの同期を設定するには、以下を実行します。
-
Helixサーバ
group
仕様で次のフィールドを定義します。-
LdapConfig:
p4 ldap
command.コマンドを使用して作成されるLDAPコンフィギュレーションの名前です。LDAPコンフィギュレーションは次を行います。
- LDAP接続におけるホスト名、ポート、暗号化情報を提供
- 認証を行う際に
SearchBindDN
、SearchPasswd
、GroupSearchBaseDN
のフィールドをどのように使用するかを指定
- LdapSearchQuery: グループメンバーのレコードを識別するための検索クエリです。
- LdapUserAttribute: グループメンバーのユーザIDが含まれる属性を意味します。このユーザ名がHelixサーバグループのユーザ名に追加されます。
-
- Helixサーバグループのグループ所有者を定義します。所有者は該当するLDAPグループのメンバーでなくとも構いません。
-
p4 ldapsync
コマンドを使用して、同期するHelixサーバグループを指定したうえで次のようなコマンドを使用し、予想される結果を確認します。$ p4 ldapsync -g -n my-perforce-group1 my-perforce-group2
p4 ldapsync では、LDAPコンフィギュレーションによって提供されるコンテキストを使用して検索クエリが実行され、返された結果のうちすべての定義済みの属性が収集されます。グループのメンバーリストが結果一覧として表示されます。
-
プレビュー結果に問題がなければ、
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