AnsibleでOpenLDAP環境構築 -④ldapユーザの設定

投稿者: | 2018年1月23日

AnsibleでOpenLDAP環境構築 -③組織(ou)/グループ(cn)の設定の次はldapユーザの設定。

LDAP構築 まとめの例にならい、
ユーザ名⇒user01
パスワード⇒ldapuser01
ユーザID⇒1001

とする。


■ldapユーザ設定用playbook

以下の内容でplaybookを作成してみた。

[root@ansible_sv ~]# vi /etc/ansible/yml/4_useradd.yml
      1- hosts: ldap_sv
      2  remote_user: root
      3
      4  vars:
      5    gid: "ldapmanager"
      6    uid: "user01"
      7    gidnum: "1001"
      8    uidnum: "1001"
      9
     10  tasks:
     11  - name: openssh-lpk-openldap.ldif add schema
     12    shell: ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/share/doc/openssh-ldap-7.4p1/openssh-lpk-openldap.ldif
     13
     14  - name: slappasswd
     15    shell: slappasswd -s ldapuser01
     16    register: user01pass
     17
     18  - name: useradd
     19    ldap_entry:
     20      dn: uid={{ uid }},cn={{ gid }},ou=Group,dc=abc,dc=def,dc=com
     21      state: present
     22      server_uri: ldap://localhost/
     23      bind_dn: cn=Manager,dc=abc,dc=def,dc=com
     24      bind_pw: "manager"
     25      objectClass:
     26        - top
     27        - posixAccount
     28        - account
     29      attributes:
     30        gecos: ldapsystem manager
     31        cn: '{{ gid }}'
     32        uid: '{{ uid }}'
     33        uidNumber: '{{ uidnum }}'
     34        gidNumber: '{{ gidnum }}'
     35        homeDirectory: /home/{{ uid }}
     36        loginShell: /bin/bash
     37        userPassword: '{{ user01pass.stdout }}'

以下、各モジュールの説明。

hosts:(1行目)
処理を実行する対象ホストを指定。「ldap_sv」は/etc/ansible/hostsに記述したホスト名となる。

remote_user:(2行目)
hosts:で指定したホストで処理を実行する際に、どのユーザで処理を実行するかを指定。上記の例では先頭の階層に記述しているため、それ以降の全階層において適用される。

vars:(4行目)
変数を宣言するモジュール。変数の宣言は1行だけでなく複数可。またこの場合一番上位のhostsモジュールと同じ階層に位置されているので、それ以下のすべての階層に有効となる。

tasks:(10行目)
処理の内容を、tasks:以降に記述する。tasks:を記述しないとエラーになるので注意。

name:(11、14、18行目)
ansible-playbookコマンドを実行した際に、実行結果に出力させる文字列を指定する。

shell:(6、14行目)
linuxコマンドを直接指定できる。類似モジュールで「command:」もあるが、shellは複数行記述できる。

register:(29行目)
直前で実行したモジュールの標準出力結果を、指定した変数に代入してくれる。上記例の場合は、slappasswd -s ldapuser01の実行結果「{SSHA} ~」が出力されるので、それをuser01passという変数に代入している。
※ここで注意することは、registerで得た文字列は37行「user01pass.stdout」と記述しているように、.stdoutをつけて使用すること。

ldap_entry:(19行目)
ldap関連モジュール。ldap_attrやldap_sert,ldap_searchがある。詳細はansible公式ページのldap関連もしくはGitHubを参照。

モジュール引数 条件 説明
dn: 登録するベースDN(本稿ではdc=abc,dc=def,dc=com)を指定する。
state: present ベースDN/組織/グループ/ユーザを設定するときに指定する。
absent ベースDN/組織/グループ/ユーザを削除するときに指定する。
server_uri: OpenLDAPサーバのURLを「ldap://<OpenLDAPサーバのIPアドレス>」という記述で指定する。
bind_dn: 設定/削除する際にバインド(認証)する管理者DN(本稿では「cn=Manager,dc=abc,dc=def,dc=com」)を指定する。
bind_pw: 設定/削除する際にバインド(認証)する管理者パスワード(本稿では「manager」)を指定する。
objectClass: ベースDN/組織/グループ/ユーザに対し、設定/削除するオブジェクトクラスを指定する。オブジェクトクラスの記述の前に「‐」をつけて、複数指定することも可能。その際にオブジェクトクラスや属性の継承関係やスキーマの有無などは事前に確認すべし。
attributes: ベースDN/組織/グループ/ユーザに対し、設定/削除する属性を指定する。属性は「dc:」「o:」のように、実際にスキーマに登録されているものを指定する。

ldap系モジュールを使用するにあたって
事前に開発パッケージをインストールしておく必要がある。詳細はAnsibleでOpenLDAP環境構築 -③組織(ou)/グループ(cn)の設定を参照。

 

■ansible-playbookコマンドでplaybookを実行

いよいよansibleの実行。コマンドは
# ansible-playbook <playbook名(フルパス)>

[root@ansible_sv ~]# ansible-playbook /etc/ansible/yml/4_useradd.yml
SSH password:

PLAY [ldap_sv] ***************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************
ok: [192.168.3.6]

TASK [openssh-lpk-openldap.ldif add schema] **********************************************************************************
changed: [192.168.3.6]

TASK [slappasswd] ************************************************************************************************************
changed: [192.168.3.6]

TASK [useradd] ***************************************************************************************************************
changed: [192.168.3.6]

PLAY RECAP *******************************************************************************************************************
192.168.3.6                : ok=4    changed=3    unreachable=0    failed=0

[root@ansible_sv ~]#

今回は簡単にいけましたε-(´∀`*)ホッ

実行結果の説明はAnsibleでOpenLDAP環境構築 -①OpenLDAPサーバ関連のパッケージインストールを参照。

 

■OpenLDAPサーバで事後確認

念のためansible-playbookコマンドで実行したplaybookの内容がOpenLDAPサーバにちゃんと反映されたか確認。
ここで事後確認するポイントは、playbookに沿って以下。
・ldapユーザが登録されていること。(ldapsearchコマンドで確認)

[root@ldapserver ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=abc,dc=def,dc=com' 'uid=*'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: uid=user01,cn=ldapmanager,ou=Group,dc=abc,dc=def,dc=com
cn: ldapmanager
objectClass: top
objectClass: posixAccount
objectClass: account
loginShell: /bin/bash
userPassword:: e1NTSEF9RENZN2VsbGRPVlN6Mk5oS3ZDM2NNS1FOZXQrWmViVjQ=
uidNumber: 1001
gidNumber: 1001
gecos: ldapsystem manager
homeDirectory: /home/user01
uid: user01

[root@ldapserver ~]#

属性の順番がplaybookと違うのがちょと気になったけど 笑
ひとまずはユーザ名、ユーザID、グループID問題なし。

ldapユーザ設定のplaybookも成功!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA