Ansibleを使って10分でCentOS上にOpenLDAPサーバー構築してみた。

Microsoft Azure上で仮想マシンを作成すると、OSインストール済みでデプロイされるので便利ですが、
デプロイ後のソフトウェア導入や設定は手作業なので、台数が多いとちょっと大変です。

そこで、Ansibleを使ってデプロイ後の作業を簡略してみようと思います。
今回はOpenLDAPの導入・初期設定を10分くらいで完了出来るようにしてみました。

概要

Ansibleを使用して、Azure上のCentOSまたはRHELにOpenLDAPサーバーを構築します。

動作確認環境

  • Ansible実行サーバー(ローカル)
  • OS: CentOS 7
  • LDAPサーバー(Azure)

  • OS: Red hat Enterprise Linux 7.2 もしくは CentOS 7
  • デプロイモデル: リソースマネージャ

事前準備

  • Ansible実行サーバーでgitコマンド、ansibleコマンドが使用できる状態にしてください。

LDAPサーバーの準備

まずはAzure上でLDAPサーバー用の仮想マシンを準備します。
Azure上で [ Red Hat Enterprise Linux 7.X ] もしくは [ CentOS-based 7.X ] の仮想マシンを作成してください。
– SSHはパスワード認証にしてください。
– ネットワークセキュリティグループに、Ansible実行サーバーからSSH出来るよう設定しましょう。

デプロイ開始したら、次の作業に進みます。

Ansible実行サーバーの準備

Azure仮想マシンのデプロイが進行している間にAnsibleの設定をします。

  • GitHubからPlaybookをダウンロードします。
# git clone https://github.com/sios-tech/ansible-openldap-rhel7.git
  • Playbookのhostsファイルに、LDAPサーバーのパブリックIPを入力します。
# vim ./ansible-openldap-rhel7/hosts
-----
[ansible-openldap-rhel7]
xx.xx.xx.xx
-----
  • Playbook内のOpenLDAP用設定を編集します。
# vim ./ansible-openldap-rhel7/roles/ldap/vars/main.yml
-----
LDAP_DN: "dc=sios,dc=local"
ROOT_DN: "cn=Manager,dc=sios,dc=local"
ROOT_PW: "{SSHA}sLH9OmNJDPiTB7xi/JoT7Df2mZUTJQeL"
ROOT_PW_UNENCRYPTED: "secret"
DC_ATTRIBUTE_O: "SIOS Technology,Inc."
DC_ATTRIBUTE_DC: "sios"
-----

※ 変数について
- LDAP_DN ・・・ LDAPのベースDN
- ROOT_DN ・・・ LDAP管理者のDN
- ROOT_PW ・・・ LDAP管理者のパスワード(暗号化した値)
- ROOT_PW_UNENCRYPTED ・・・ LDAP管理者のパスワード(平文)
- DC_ATTRIBUTE_O ・・・ 組織名
- DC_ATTRIBUTE_DC ・・・ DN最左辺のDC値

これでAnsible実行サーバーの準備が整いました。
LDAPサーバーのデプロイ完了を待ちます。

Ansibleの実行

Azure仮想マシンのデプロイが完了したら、Ansibleを実行します。

  • Ansible実行サーバーからLDAPサーバーへの疎通確認を行います。
# cd ansible-openldap-rhel7/
# ansible [LDAPサーバーのパブリックIP] -u sios -m ping
SSH password:
SUDO password[defaults to SSH password]:

下記のメッセージが表示されれば成功です。

xx.xx.xx.xx | SUCCESS => {
"changed": false,
"ping": "pong"
}
  • Ansibleを実行します。
# ansible-playbook -u [SSHユーザ名] ansible-openldap-rhel7.yml
  • エラーなく終了すれば完了です。
PLAY [ansible-openldap-rhel7] **************************************************

TASK [setup] *******************************************************************
ok: [server1]

TASK [ldap : install openldap] *************************************************
changed: [server1] => (item=[u'openldap-clients', u'openldap-servers'])

TASK [ldap : SELinux Disabled] *************************************************
changed: [server1]

TASK [ldap : SELinux Disabled] *************************************************
changed: [server1] => (item={u'regexp': u'^\\s*SELINUX=', u'line': u'SELINUX=disabled'})

TASK [ldap : Stop slapd] *******************************************************
changed: [server1]

TASK [ldap : Remove /etc/openldap/slapd.d.org] *********************************
ok: [server1]

TASK [ldap : Copy the default slapd.d] *****************************************
changed: [server1]

TASK [ldap : Remove /var/lib/ldap/*] *******************************************
changed: [server1] => (item=/var/lib/ldap/*)
changed: [server1] => (item=/etc/openldap/slapd.d/*)

TASK [ldap : Create /etc/openldap/initial_settings] ****************************
changed: [server1]
[WARNING]: Consider using file module with state=directory rather than running mkdir

TASK [ldap : Place /etc/openldap/initial_settings/slapd.cfg] *******************
changed: [server1]

TASK [ldap : Place /etc/openldap/initial_settings/database.cfg] ****************
changed: [server1]

TASK [ldap : Place /etc/openldap/initial_settings/userdata.ldif] ***************
changed: [server1]

TASK [ldap : Importing the initial setting file - slapd.cfg] *******************
changed: [server1]

TASK [ldap : Change the permissions] *******************************************
ok: [server1] => (item=/var/lib/ldap)
changed: [server1] => (item=/etc/openldap/slapd.d/)

TASK [ldap : Start slapd] ******************************************************
changed: [server1]

TASK [ldap : Add LDAP schema] **************************************************
changed: [server1] => (item=/etc/openldap/schema/core.ldif)
changed: [server1] => (item=/etc/openldap/schema/cosine.ldif)
changed: [server1] => (item=/etc/openldap/schema/inetorgperson.ldif)
changed: [server1] => (item=/etc/openldap/schema/nis.ldif)
changed: [server1] => (item=/etc/openldap/schema/openldap.ldif)

TASK [ldap : Importing the initial setting file - database.cfg] ****************
changed: [server1]

TASK [ldap : Add LDAP Data] ****************************************************
changed: [server1] => (item=/etc/openldap/initial_settings/userdata.ldif)

PLAY RECAP *********************************************************************
server1 : ok=18 changed=16 unreachable=0 failed=0

動作確認

最後に、LDAPサーバーが動作しているか確認します。

  • LDAPサーバーにSSHします。
  • slapdサービスを確認します。

# systemctl status slapd.service
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2016-09-09 01:41:15 UTC; 12min ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
(...)
  • ldapsearchをします。
# ldapsearch -x -D 'cn=Manager,dc=sios,dc=local' -W -b 'dc=sios,dc=local'
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=sios,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# sios.local
dn: dc=sios,dc=local
objectClass: organization
objectClass: dcObject
o: SIOS Technology,Inc.
dc: sios

# users, sios.local
dn: ou=users,dc=sios,dc=local
objectClass: top
objectClass: organizationalUnit
ou: users

# testaccount, users, sios.local
dn: uid=testaccount,ou=users,dc=sios,dc=local
sn: testaccount
cn: testaccount
userPassword:: cGFzc3dvcmQ=
objectClass: inetOrgPerson
objectClass: top
uid: testaccount

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3

最後に

以上でOpenLDAP導入・初期設定は完了です。特に問題なければ10分程でLDAPサーバーが用意出来るようになったと思います。
後はLDAPサーバー上で詳細設定やテストユーザーなど、検証環境に適した情報を追加しましょう。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

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