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