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も成功!