ubuntu上にOpenLDAPの構築

学科というか琉大では学生のアカウント管理にLDAPを使っている。 学科の場合はセンター(大本)のLDAP情報を同期した、学科システム上に構築したslapdをLDAPサーバーとして活用している。

今年は学科システムの式年遷宮の年なので、Centosで従来動いていたシステムを参考に、UbuntuOpenLDAPを構築した。

すでにDocker環境はakatsukiの構築で作っていたのだけれど、とりあえず安心感のあるVMopenldapの構築をしたかったので、ansibleを書いていた。

init.ldifとかは現在動いているLDAPのバックアップ。

---
- name: install ldap
  become: yes
  apt:
    name:
      - slapd
      - ldap-utils
  environment:
    DEBIAN_FRONTEND: noninteractive

- name: copy ldap.conf
  become: yes
  copy:
    src: ldap.conf
    dest: /etc/ldap/ldap.conf
    owner: openldap
    group: openldap
    mode: 0664

- name: copy slapd.conf
  become: yes
  copy:
    src: slapd.conf
    dest: /etc/ldap/slapd.conf
    owner: openldap
    group: openldap
    mode: 0640

- name: copy schemas
  become: yes
  copy:
    src: schema
    dest: /etc/ldap/
    owner: openldap
    group: openldap
    mode: 0644

- name: copy init.ldif
  become: yes
  copy:
    src: init.ldif
    dest: /tmp/init.ldif
    owner: openldap
    group: openldap
    mode: 0664

- name: copy DB_CONFIG
  become: yes
  copy:
    src: DB_CONFIG
    dest: /var/lib/ldap/DB_CONFIG
    owner: openldap
    group: openldap
    mode: 0664

- name: remove /etc/ladp/slapd.d/cn=config
  become: yes
  file:
    path: /etc/ldap/slapd.d/cn=config
    state: absent

- name: slapadd -f /etc/ldap/slapd.conf
  become: yes
  command: echo '' | slapadd -f /etc/ldap/slapd.conf

- name: stop slabd
  become: yes
  systemd:
    name: slapd
    state: stopped
    daemon_reload: yes
    enabled: yes

- name: chown cn=config
  become: yes
  file:
    path: /etc/ldap/slapd.d/cn=config
    state: directory
    recurse: yes
    owner: openldap
    group: openldap

- name: chown /var/lib/ldap
  become: yes
  file:
    path: /var/lib/ldap/
    state: directory
    recurse: yes
    owner: openldap
    group: openldap

- name: slaptest
  become: yes
  become_user: openldap
    # ignore_errors: yes
  command: slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d

- name: slapadd -l /tmp/init.ldif
  become: yes
  command: slapadd -l /tmp/init.ldif


- name: enable slabd
  become: yes
  systemd:
    name: slapd
    state: restarted
    daemon_reload: yes
    enabled: yes

openldapはaptでslapdを指定すれば入るけれど、 DEBIAN_FRONTEND: noninteractiveを指定しないと上手く入らない(唐突にGUI的なあの画面が出てくる)のが注意点。

詰まったのは slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.dする時にopenldapユーザーでやらないと、/var/lib/ldapの中で生成されるBerkeley DBのパーミッションが変になること。

解決方法としてはbecome_useropenldapを指定し、プロジェクトルートのansible.cfgに次の用に書く。

[defaults]
allow_world_readable_tmpfiles=true

微妙に再起動するとパーミッションが異なるとかはあったが、まぁ大丈夫だろうと信じている。。。