OpenLDAPをUbuntu22.04上に構築してみたのでその時の構築手順メモ
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-user
とrocky-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等で作成してください。
- memberOfオーバーレイを有効化 ※1
- ouを作成
- グループを作成
- cnを作成
- ユーザを作成
- cnにユーザを追加
※1 memberOfオーバレイを有効化すると、DNを参照する他のエントリの属性が追加・削除されると、自動的に属性を作成・削除してくれるらしいです
1-3-1. memberOfオーバーレイを有効化するldifファイル
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ファイルを作成します。
dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users
1-3-3. グループを作成するldifファイル
グループを作成する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を追加しておきます。
dn: cn=sssd,dc=example,dc=com
objectClass: groupOfNames
cn: sssd
member: cn=admin,dc=example,dc=com
1-3-5. ユーザを作成するldifファイル
ユーザを作成する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ファイルを作成します。
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でインストールします。
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
参考にさせていただいたサイト等です。 🙇♂️
Discussion