11.6. ユーザーおよびグループへの外部プロビジョニングシステムの使用

Identity Management (IdM) は、ID 管理用の外部ソリューションを使用して IdM でユーザーおよびグループ ID がプロビジョニングされるように、お使いの環境を設定するサポートをします。以下のセクションは、このような設定の例について説明します。例には以下が含まれます。

11.6.1. 外部プロビジョニングシステムで使用されるようにユーザーアカウントを設定する手順

以下の手順では、外部プロビジョニングシステムが IdM ユーザーアカウントを使用するように設定する方法を説明します。適切なパスワードポリシーが指定されたグループにアカウントを追加すると、外部プロビジョニングシステムが IdM でユーザーのプロビジョニングを管理できるようになります。
  1. stage ユーザーの追加権限のあるユーザー provisionator を作成します。外部プロビジョニングシステムがこのユーザーアカウントを使用して新しい stage ユーザーを追加します。
    1. provisionator ユーザーアカウントを追加します。
      $ ipa user-add provisionator --first=provisioning --last=account --password
    2. provisionator ユーザーに必要な権限を割り当てます。
      stage ユーザーの追加を管理する System Provisioning というカスタムロールを作成します。
      $ ipa role-add --desc "Responsible for provisioning stage users" "System Provisioning"
      Stage User Provisioning の権限をロールに割り当てます。この権限により、stage ユーザーが追加できるようになります。
      $ ipa role-add-privilege "System Provisioning" --privileges="Stage User Provisioning"
      provisionator ユーザーをロールに追加します。
      $ ipa role-add-member --users=provisionator "System Provisioning"
  2. ユーザーアカウントの管理権限を持つ activator ユーザーを作成します。このユーザーアカウントを使用すると、外部プロビジョニングシステムにより追加された stage ユーザーが自動的にアクティベートされます。
    1. activator ユーザーアカウントを追加します。
      $ ipa user-add activator --first=activation --last=account --password
    2. activator ユーザーに必要な権限を割り当てます。
      デフォルトの User Administrator ロールにこのユーザーを追加します。
      $ ipa role-add-member --users=activator "User Administrator"
  3. サービスおよびアプリケーションアカウントのユーザーグループを作成します。
    $ ipa group-add service-accounts
  4. グループのパスワードポリシーを更新します。以下のポリシーは、アカウントのパスワードの期限切れやロックアウトがされないようにしますが、複雑なパスワードを求めることでリスクの可能性を低減します。
    $ ipa pwpolicy-add service-accounts --maxlife=10000 --minlife=0 --history=0 --minclasses=4 --minlength=20 --priority=1 --maxfail=0 --failinterval=1 --lockouttime=0
  5. サービスおよびアプリケーションアカウントのグループにプロビジョニングアカウントとアクティベーションアカウントを追加します。
    $ ipa group-add-member service-accounts --users={provisionator,activator}
  6. ユーザーアカウントのパスワードを変更します。
    $ kpasswd provisionator
    $ kpasswd activator
    新規の IdM ユーザーのパスワードはすぐに失効するため、パスワードを変更する必要があります。
追加リソース:

11.6.2. IdM が自動的に stage ユーザーアカウントをアクティベートするように設定する手順

以下の手順では、stage ユーザーをアクティベートするスクリプトを作成する方法を説明します。システムは指定した間隔で自動的にスクリプトを実行します。これにより、新規ユーザーアカウントを自動的にアクティベートし、作成後すぐに利用できるようにします。

重要

以下の手順では、スクリプトを IdM に追加する前に、新規ユーザーアカウントの検証が必要ないとの想定です。たとえば、外部プロビジョニングシステムの所有者によりユーザーがすでに検証済みの場合には、検証は必要ありません。
IdM サーバーの 1 つで、アクティベーションプロセスを有効化するだけで十分です。
  1. アカウントのアクティベート用に keytab ファイルを生成します。
    # ipa-getkeytab -s example.com -p "activator" -k /etc/krb5.ipa-activation.keytab
    複数の IdM サーバーでアクティベーションプロセスを有効にするには、1 つのサーバーでのみ keytab ファイルを作成し、他のサーバーにその keytab ファイルをコピーします。
  2. 以下の内容を含む /usr/local/sbin/ipa-activate-all スクリプトを作成して全ユーザーをアクティベートします。
    #!/bin/bash
    
    kinit -k -i activator
    
    ipa stageuser-find --all --raw | grep "  uid:" | cut -d ":" -f 2 | while read uid; do ipa stageuser-activate ${uid}; done
  3. ipa-activate-all スクリプトのパーミッションと所有者を編集して、実行可能なファイルに変更します。
    # chmod 755 /usr/local/sbin/ipa-activate-all
    # chown root:root /usr/local/sbin/ipa-activate-all
  4. systemd のユニットファイルである /etc/systemd/system/ipa-activate-all.service を作成して以下の内容を追加します。
    [Unit]
    Description=Scan IdM every minute for any stage users that must be activated
    
    [Service]
    Environment=KRB5_CLIENT_KTNAME=/etc/krb5.ipa-activation.keytab
    Environment=KRB5CCNAME=FILE:/tmp/krb5cc_ipa-activate-all
    ExecStart=/usr/local/sbin/ipa-activate-all
  5. systemd タイマーである /etc/systemd/system/ipa-activate-all.timer を作成して以下の内容を追加します。
    [Unit]
    Description=Scan IdM every minute for any stage users that must be activated
    
    [Timer]
    OnBootSec=15min
    OnUnitActiveSec=1min
    
    [Install]
    WantedBy=multi-user.target
  6. ipa-activate-all.timer を有効化します。
    # systemctl enable ipa-activate-all.timer
追加リソース:

11.6.3. 外部プロビジョニングシステムの LDAP プロバイダーが IdM のアイデンティティーを管理するように設定する手順

以下の章では、さまざまなユーザーおよびグループの管理オプションのテンプレートを紹介します。これらのテンプレートを使用すると、プロビジョニングシステムの LDAP プロバイダーが IdM ユーザーアカウントを管理できるように設定できます。たとえば、従業員が退職した後にユーザーアカウントを無効にするようにシステムを設定することができます。

LDAP を使用したユーザーアカウントの管理

下層の Directory Server データベースを編集して、新規ユーザーエントリーの追加、既存のエントリーの変更、異なるライフサイクルの状態間でのユーザーの移動、ユーザーの削除ができます。データベースを編集するには ldapmodify ユーティリティーを使用します。
以下の LDIF 形式のテンプレートには、ldapmodify を使用して変更する属性に関する情報が含まれます。例に関する詳しい手順は 例11.2「ldapmodify での stage ユーザーへの追加」 および 例11.3「ldapmodify でのユーザーの保存」を参照してください。
新規 stage ユーザーの追加
UID および GID が自動的に割り当てられたユーザーの追加
dn: uid=user_login,cn=staged users,cn=accounts,cn=provisioning,dc=example,dc=com
changetype: add
objectClass: top
objectClass: inetorgperson
uid: user_login
sn: surname
givenName: first_name
cn: full_name
UID および GID が静的に割り当てられたユーザーの追加
dn: uid=user_login,cn=staged users,cn=accounts,cn=provisioning,dc=example,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: inetorgperson
objectClass: organizationalperson
objectClass: posixaccount
uid: user_login
uidNumber: UID_number
gidNumber: GID_number
sn: surname
givenName: first_name
cn: full_name
homeDirectory: /home/user_login
stage ユーザーの追加時に IdM オブジェクトクラスを指定する必要はありません。IdM は、ユーザーのアクティベート後に、これらのクラスを自動的に追加します。
作成したエントリーの識別名 (DN) は uid=user_login で開始する必要がある点に注意してください。
既存ユーザーの変更
ユーザーを変更する前に、ユーザーの識別名 (DN) をユーザーのログインで検索して取得します。以下の例では、user_allowed_to_read ユーザーは、ユーザーおよびグループの情報を読み込む権限があり、password はユーザーのパスワードとなっています。
# ldapsearch -LLL -x -D "uid=user_allowed_to_read,cn=users,cn=accounts,dc=example, dc=com" -w "password" -H ldap://server.example.com -b "cn=users, cn=accounts, dc=example, dc=com" uid=user_login
ユーザーの属性を変更する方法:
dn: distinguished_name
changetype: modify
replace: attribute_to_modify
attribute_to_modify: new_value
ユーザーを無効化する方法:
dn: distinguished_name
changetype: modify
replace: nsAccountLock
nsAccountLock: TRUE
ユーザーを有効化する方法:
dn: distinguished_name
changetype: modify
replace: nsAccountLock
nsAccountLock: FALSE
ユーザーを保存する方法:
dn: distinguished_name
changetype: modrdn
newrdn: uid=user_login
deleteoldrdn: 0
newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=example
nssAccountLock 属性を更新しても、stage および preserved ユーザーには影響はありません。更新操作が正常に完了しても、属性の値は nssAccountLock: TRUE のままです。
新規グループの作成
新規グループの作成方法:
dn: cn=group_distinguished_name,cn=groups,cn=accounts,dc=example,dc=com
changetype: add
objectClass: top
objectClass: ipaobject
objectClass: ipausergroup
objectClass: groupofnames
objectClass: nestedgroup
objectClass: posixgroup
cn: group_name
gidNumber: GID_number
グループの変更
グループを変更する前に、グループ名で検索してグループの識別名 (DN) を取得します。
# ldapsearch -YGSSAPI  -H ldap://server.example.com -b "cn=groups,cn=accounts,dc=example,dc=com" "cn=group_name"
既存のグループの削除方法:
dn: group_distinguished_name
changetype: delete
グループにメンバーを追加する方法:
dn: group_distinguished_name
changetype: modify
add: member
member: uid=user_login,cn=users,cn=accounts,dc=example,dc=com
グループからメンバーを削除する方法:
dn: distinguished_name
changetype: modify
delete: member
member: uid=user_login,cn=users,cn=accounts,dc=example,dc=com
stage または preserved ユーザーをグループには追加しないでください。更新が正常に完了した場合でも、ユーザーはグループのメンバーとして更新されません。active ユーザーだけがグループに所属します。

例11.2 ldapmodify での stage ユーザーへの追加

標準の interorgperson オブジェクトクラスを使用して stageuser ユーザーを追加する方法:
  1. ldapmodify を使用してユーザーを追加します。
    # ldapmodify -Y GSSAPI
    SASL/GSSAPI authentication started
    SASL username: admin@EXAMPLE
    SASL SSF: 56
    SASL data security layer installed.
    dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=example
    changetype: add
    objectClass: top
    objectClass: inetorgperson
    cn: Stage
    sn: User
    
    adding new entry "uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=example"
  2. ステージエントリーの内容を検証し、必要とされる POSIX 属性がプロビジョニングシステムに追加され、ステージエントリーのアクティベートの準備ができていることを確認します。新規 stage ユーザーの LDAP 属性を表示するには、ipa stageuser-show --all --raw コマンドを使用します。ユーザーは nsaccountlock 属性で明示的に無効化されていることに注意してください。
    $ ipa stageuser-show stageuser --all --raw
      dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=example
      uid: stageuser
      sn: User
      cn: Stage
      has_password: FALSE
      has_keytab: FALSE
      nsaccountlock: TRUE
      objectClass: top
      objectClass: inetorgperson
      objectClass: organizationalPerson
      objectClass: person

例11.3 ldapmodify でのユーザーの保存

LDAP modrdn 操作を使用して user を保存する方法:
  1. ldapmodify ユーティリティーを使用してユーザーエントリーを変更します。
    $ ldapmodify -Y GSSAPI
    SASL/GSSAPI authentication started
    SASL username: admin@EXAMPLE
    SASL SSF: 56
    SASL data security layer installed.
    dn: uid=user1,cn=users,cn=accounts,dc=example
    changetype: modrdn
    newrdn: uid=user1
    deleteoldrdn: 0
    newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=example
    
    modifying rdn of entry "uid=user1,cn=users,cn=accounts,dc=example"
  2. オプションで、すべての preserved ユーザーを表示して、このユーザーが保存されたことを確認します。
    $ ipa user-find --preserved=true
    ---------------
    1 user matched
    ---------------
      User login: user1
      First name: first_name
      Last name: last_name
    ...
    ----------------------------
    Number of entries returned 1
    ----------------------------