📖

OpenLDAPをUbuntu22.04上に構築してみたのでその時の構築手順メモ

2024/05/16に公開

OpenLDAPの構築手順を検証する機会があったのでその時の構築手順メモ。
コマンドでの管理はやりずらい部分もあるので、一応phpLDAPadminも入れます。

なお、RockyLinux8にsssdを入れてOpenLDAPを使ったログイン認証をする検証もやりましたが、この記事に書くとボリュームが大きくなりすぎるので、次回の記事にでも書きたいと思います。

注意事項

検証(勉強)しながら作成した構築手順を書いています。
用語の正確性やセキュリティ(通信の暗号化等)は全く考慮していないのでご注意ください。
(この記事を参考にして何か起きても責任は取れません)

環境

Macbook(intel)にVagrantでVMを立てて検証しています。

  • ホストOS: macOS Ventura 13.6.6
  • VM上のOS: Ubuntu22.04(Vagrant)
  • OpenLDAPのバージョン: 2.5.17
  • phpLDAPadminのバージョン: 1.2.6.3-0.3
検証で使ったVagrantfileのサンプル

Vagrant+VirtualBoxでVMを建てたので、Vagrantfileをサンプルとして載せます。
ファイアウォール周りに悩まされるのは嫌だったので、事前に停止したりしています。
RockyLinux8にsssdを入れてOpenLDAPでログイン認証をする検証もしてみたので、Vagrantfile内にはrocky8のVMも作るようにしています。

Vagrant.configure("2") do |config|
  config.vm.define "ldap" do |host|
    host.vm.box = "bento/ubuntu-22.04"
    host.vm.hostname = "ldap"
    host.vm.network "private_network", ip: "192.168.56.10"

    host.vm.provision "shell", inline: <<-SHELL
      sudo apt update -y
      sudo systemctl stop ufw
      sudo systemctl disable ufw
    SHELL
  end

  config.vm.define "node" do |host|
    host.vm.box = "generic/rocky8"
    host.vm.hostname = "node"
    host.vm.network "private_network", ip: "192.168.56.11"

    host.vm.provision "shell", inline: <<-SHELL
      sudo dnf update -y
      sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
      sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config;
      sudo systemctl stop firewalld
      sudo systemctl disable firewalld
      sudo systemctl reload sshd
    SHELL
  end
end

1. 構築手順(OpenLDAP)

こんな感じの構成(LDAPツリー)を作っていきます。
RockyLinuxにsssdを入れてログイン認証をする時にcn=sssdに属するuidのみがログインできるようにしたいのでcn=sssdを作成し、sssd-userrocky-userを属するようにします。

dc=example,dc=com
├── cn=ldap
├── cn=sssd
└── ou=users
    ├── uid=user1
    ├── uid=sssd-user
    └── uid=rocky-user

1-1. OpenLDAPをインストール

まずは、slapdとldap-utils(OpenLDAP)をインストールします。

$ sudo apt update -y && sudo apt upgrade -y
$ sudo apt install slapd ldap-utils -y

1-2. OpenLDAPの初期設定

ドメイン(dc)やadminユーザの設定をします。色々聞かれるので以下を参考に適切な値を入れてください。

$ sudo dpkg-reconfigure slapd
Omit OpenLDAP server configuration: No
DNS domain name: example.com
Organization name: ExampleOrg
Administrator Password: 任意のパスワードを入力
Do you want the database to be removed when slapd is purged: No
Move old database: Yes

1-3. ldifファイルを作成

OpenLDAPにユーザ等を追加するためのldifファイルを作成していきます。
以下のファイルを作成していくので、vi等で作成してください。

  1. memberOfオーバーレイを有効化 ※1
  2. ouを作成
  3. グループを作成
  4. cnを作成
  5. ユーザを作成
  6. cnにユーザを追加

※1 memberOfオーバレイを有効化すると、DNを参照する他のエントリの属性が追加・削除されると、自動的に属性を作成・削除してくれるらしいです

1-3-1. memberOfオーバーレイを有効化するldifファイル

memberOfオーバーレイを有効にするldifファイルを作成します。
こちらの記事を参考にさせていただきました。ありがとうございます。
https://zenn.dev/jeffi7/articles/9b3ec4fd5ae1cc

1_memberof.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof
-
add: olcModuleLoad
olcModuleLoad: refint

dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfRefInt: TRUE
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

dn: olcOverlay=refint,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof member manager owner

1-3-2. ouを作成するldifファイル

ou=usersを作成するldifファイルを作成します。

2_add_ou.ldif
dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users

1-3-3. グループを作成するldifファイル

グループを作成するldifファイルを作成します。

3_add_group.ldif
dn: cn=ldap,dc=example,dc=com
objectClass: posixGroup
cn: ldap
gidNumber: 1001

1-3-4. cnを作成するldifファイル

cn(groupOfNames)を作成します。objectClassにgroupOfNamesを指定した場合、memberを1人は追加が必要なので、ここではadminを追加しておきます。

4_add_cn.ldif
dn: cn=sssd,dc=example,dc=com
objectClass: groupOfNames
cn: sssd
member: cn=admin,dc=example,dc=com

1-3-5. ユーザを作成するldifファイル

ユーザを作成するldifファイルを作成します。

5_add_users.ldif
# user1
dn: uid=user1,ou=users,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: user1
cn: user1
sn: user1
uidNumber: 10000
gidNumber: 1001
homeDirectory: /home/user1
loginShell: /bin/bash
userPassword: changeme

# sssd-user
dn: uid=sssd-user,ou=users,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: sssd-user
cn: sssd-user
sn: sssd-user
uidNumber: 10001
gidNumber: 1001
homeDirectory: /home/sssd-user
loginShell: /bin/bash
userPassword: changeme

# rocky-user
dn: uid=rocky-user,ou=users,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: rocky-user
cn: rocky-user
sn: rocky-user
uidNumber: 10002
gidNumber: 1001
homeDirectory: /home/rocky-user
loginShell: /bin/bash
userPassword: changeme

1-3-6. cn=sssdにユーザを追加するldifファイル

cn=sssdにユーザを追加するldifファイルを作成します。

6_modify_add_user_to_cn.ldif
dn: cn=sssd,dc=example,dc=com
changetype: modify
add: member
member: uid=sssd-user,ou=users,dc=example,dc=com
member: uid=rocky-user,ou=users,dc=example,dc=com

1-4. ldifファイルを読み込む

これまでに作成したldifファイルをldapaddコマンドやldapmodifyコマンドを使ってOpenLDAPに読み込んでいきます。
コマンドの<password>のところは、「1-2. OpenLDAPの初期設定」で設定したパスワードを入れてください。

# memberOfオーバーレイを有効化
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f 1_memberof.ldif

# 追加&変更
$ sudo ldapadd -x -w <password> -D cn=admin,dc=example,dc=com -f 2_add_ou.ldif
$ sudo ldapadd -x -w <password> -D cn=admin,dc=example,dc=com -f 3_add_group.ldif
$ sudo ldapadd -x -w <password> -D cn=admin,dc=example,dc=com -f 4_add_cn.ldif
$ sudo ldapadd -x -w <password> -D cn=admin,dc=example,dc=com -f 5_add_users.ldif
$ sudo ldapmodify -x -w <password> -D cn=admin,dc=example,dc=com -f 6_modify_add_user_to_cn.ldif

2. 構築手順(phpLDAPadmin)

phpLDAPadminをインストールします。
aptで入れるとphpLDAPadmin=1.2.6.3-0.2が入りますが、以下のStackOverflowにあるように、バグでエラーがでるので、1.2.6.3-0.3のdebファイルを個別でダウンロードして、dpkgでインストールします。
https://stackoverflow.com/questions/74384236/unrecognized-error-number-8192-trim-passing-null-to-parameter-1-string

2-1. phpLDAPadminのインストール

aptを使ってインストールします。前述した通り、aptでインストールするパッケージのバージョンはバグでエラーがでるので、修正されたパッケージを手動でインストールします。

$ sudo apt install phpldapadmin -y

# ここからはバージョン1.2.6.3-0.2のバグを修正するためにdebをダウンロード&インストールする
$ wget http://archive.ubuntu.com/ubuntu/pool/universe/p/phpldapadmin/phpldapadmin_1.2.6.3-0.3_all.deb
$ sudo dpkg -i phpldapadmin_1.2.6.3-0.3_all.deb
# 依存を修正
$ sudo apt -f install 

2-2. 設定ファイル変更

本記事作成時点では、phpLDAPadminの初期設定が、ここまでのOpenLDAPの設定と一致しているため修正はしません。
もし、OpenLDAPのdomain等の設定を別のものに変えた場合は、設定ファイル(/etc/phpldapadmin/config.php)を適宜修正してください。以下の箇所を変更すると接続できるようになると思います。

$servers->setValue('server','name','My LDAP Server');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=example,dc=com'));
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

2-3. phpLDAPadminへの接続確認

ここでは接続確認と、ログインをします。

2-3-1. phpLDAPadminに接続

ブラウザから http://192.168.56.10/phpldapadmin/ に接続します。
このような画面が表示されればOKです。
※ IPアドレスは適宜変更してください

2-3-2. ログイン

左側のloginを押下して、Passwordに「1-2. OpenLDAPの初期設定」で設定したパスワードを入れて[Authenticate]を押下します。
このような画面になればログインOKです。

最後に

やり方があっているかはともかく、とりあえず動くものを作れたので今回はOKとします。
次回は、RockyLinux8にsssdをインストールして本記事で構築したOpenLDAPを使ったログイン認証をする手順を書こうと思います。

Reference

参考にさせていただいたサイト等です。 🙇‍♂️

https://zenn.dev/jeffi7/articles/9b3ec4fd5ae1cc
https://stackoverflow.com/questions/74384236/unrecognized-error-number-8192-trim-passing-null-to-parameter-1-string
https://qiita.com/mypaceshun/items/9c3b3f0ef9580c6d60ea
https://zenn.dev/uchidaryo/books/ubuntu-2204-server-book/viewer/openldap
https://www.server-world.info/query?os=Ubuntu_16.04&p=openldap&f=7

Discussion