本文件紀錄了基本的 LDAP 設置。
設定 LDAP Master
基本設置
首先編輯 /etc/ldap/ldap.conf
填上適當的網域名稱。例如:
BASE dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw
URI ldap://ldap.lab.csie.ntu.edu.tw
其中 URI 必須是可以連上 Master server 的 IP 或網域名稱。
緊接著,安裝 OpenLDAP:
sudo apt-get install slapd ldap-utils
此時它只會要你設定一個 admin 密碼,如果希望看到完整設定,可以事先執行以下指令,並設定 Dialog 為不高於 Medium 的層級。不過我偏好不改動這個設定,而是事後再重新執行設定程式。
sudo dpkg-reconfigure debconf
事後重新設定的指令則是:
sudo dpkg-reconfigure slapd
可按照喜好自行設定,但 domain name 要跟 /etc/lapd/lapd.conf
一致:
Omit OpenLDAP server configuration? No
DNS domain name: lab.csie.ntu.edu.tw
Organization name: lab.csie.ntu.edu.tw
Administrator password: <PASSWORD>
Confirm password: <PASSWORD>
Database backend to use: HDB
Do you want the database to be removed when slapd is purged? No
Move old database? Yes
Allow LDAPv2 protocol? No
以後如果想重設 LDAP 也可重新執行上述指令。他會將 old database 移動到 /var/backups
資料夾,不過如果已經移動過一次則指令會失敗,此時可先手動砍除舊的 /var/backups/<ldap directory>
。
可以執行以下兩個指令來確認設置成功:
ldapsearch -x
slapcat
轉移 NIS 資料
首先安裝轉移工具組:
sudo apt-get install migrationtools
接著編輯設定檔 /usr/share/migrationtools/migrate_common.ph
:
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "lab.csie.ntu.edu.tw";
# Default base
$DEFAULT_BASE = "dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw";
...
# Uncomment these to exclude Debian-managed system users and groups
$IGNORE_UID_BELOW = 1000;
# Don't uncomment this if you want to be able to add users to system groups
# $IGNORE_GID_BELOW = 1000;
# And here's the opposite for completeness
$IGNORE_UID_ABOVE = 29999;
$IGNORE_GID_ABOVE = 29999;
由於 Debian 的 LDAP 預設並沒有載入 misc.schema,所以如果要讀入 alias 資料就會出錯。因此我們只手動載入需要的部份,而不使用自動載入全部資料的方法。進入 /usr/share/migrationtools/
資料夾後執行以下指令:
# create basic data
./migrate_base.pl | ldapadd -x -W -h localhost -D "cn=admin,dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw" -c
# migrate passwd
./migrate_passwd.pl /etc/passwd | ldapadd -x -W -h localhost -D "cn=admin,dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw" -c
# migrate group
./migrate_group.pl /etc/group | ldapadd -x -W -h localhost -D "cn=admin,dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw" -c
執行 migrate_base.pl
會有部份內容無法處理是正常的。
設定 LDAP Client
在要透過 LDAP 登入的主機上進行以下步驟,若 LDAP Master server 本身也想透過 LDAP 登入的話,也是採用相同辦法。首先安裝相關程式
sudo apt-get install libpam-ldapd libnss-ldapd nslcd
並回答相關問題:
LDAP server URI: <this answer is the same as what you put in '/etc/ldap/ldap.conf'>
ldap://ldap.lab.csie.ntu.edu.tw/
LDAP server search base:
dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw
Name services to configure:
group, password, shadow
接著如果要讓 root 可以在不輸入 LDAP 密碼的情況下修改別人密碼,則可修改 /etc/nslcd.conf
,其中 rootpwmodpw
設為之前選擇的 LDAP 密碼:
ldap_version 3
rootpwmoddn cn=admin,dc=lab,dc=csie,dc=ntu,dc=edu,dc=tw
rootpwmodpw <PASSWORD>
如果要讓 client 也能執行 ldapsearch
等指令,也可依 master 的方法修改 /etc/lapd/lapd.conf
。
可重新開機測試是否成功。
TLS 加密連線
以上的作法,在連線時不夠安全,因此我們可以啟用 TLS 加密連線。
建立憑證
假設你有可供使用的憑證當然很好,但是一般人除了等待 Let’s Encrypt 以外,可能也只能自己的憑證自己建了。
在某個資料夾內建立相關憑證:
openssl genrsa -out my_root_key.pem 1024
openssl req -new -key my_root_key.pem -out my_root_csr.pem
openssl x509 -req -days 36500 -in my_root_csr.pem -signkey my_root_key.pem -out my_root_crt.pem
openssl genrsa -out ldap_key.pem 1024
openssl req -new -key ldap_key.pem -out ldap_csr.pem
openssl x509 -req -days 36500 -in ldap_csr.pem -CA my_root_crt.pem -CAkey my_root_key.pem -out ldap_crt.pem -set_serial 1
其中的資訊可以隨意填,但在建立 ldap_csr.pem
時,Common Name 一定要填 client 可以連到的,LDAP master server 的 domain name:
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NTU Lab
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ldap.lab.csie.ntu.edu.tw
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
然後在 master 上建立一個資料夾,並將相關檔案複製,設定適當的權限:
sudo mkdir /etc/ldap/ssl
sudo cp ldap_key.pem ldap_crt.pem /etc/ldap/ssl
sudo mkdir /usr/share/ca-certificates/my/
sudo cp my_root_crt.pem /usr/share/ca-certificates/my/my_root.crt
sudo chmod 644 /usr/share/ca-certificates/my/my_root.crt
sudo dpkg-reconfigure ca-certificates # choose to add my/my_root.crt
sudo update-ca-certificates
sudo chown -R root:openldap /etc/ldap/ssl
sudo chmod -R o-rwx /etc/ldap/ssl
然後在所有 client 上也可以複製 my_root_crt.pem
:
sudo cp my_root_crt.pem /usr/share/ca-certificates/my/my_root.crt
sudo chmod 644 /usr/share/ca-certificates/my/my_root.crt
sudo dpkg-reconfigure ca-certificates # choose to add my/my_root.crt
sudo update-ca-certificates
小心收藏剩餘的 key.pem,不要讓別人看到囉。
設定 LDAP Master Server
注意,這裡的設定若一不小心可能導致 LDAP server 無法運作,故設定時最好先備份所有檔案。
首先在 master 上更改 /etc/default/slapd
,將 LAPD_SERVICES
改成以下內容,也就是只允許本機不透過 TLS 連線:
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
緊接著建立一個 tls.ldif
檔案:
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca-certificates.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap_crt.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap_key.pem
並套用設定:
ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif
同時更改 /etc/ldap/ldap.conf
:
URI ldaps://ldap.lab.csie.ntu.edu.tw
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
最後重新啟動 ldap:
sudo service slapd restart
設定 LDAP Client
修改 /etc/nslcd.conf
:
uri ldaps://ldap.lab.csie.ntu.edu.tw
#ssl off
tls_reqcert demand
tls_cacertfile /etc/ssl/certs/ca-certificates.crt
重啟服務:
sudo service nslcd restart
可測試是否可以登入。