最近在計畫將公司的 Mail Server 換掉並重新規劃,繼上一篇 Postfix SMTP + Dovecot 加密 SSL / TLS 之後,這篇的目的要將 Mail Server 帳號整合於 LDAP。
此次的範例用到的服務有 Postfix + Dovecot + OpenLDAP,之後還會增加 Webmail 進來,以及 LAB AD 的驗證。
由於小弟用的是 CentOS 6.5 版的設定或許跟一些網友不同,請自行斟酌
LDAP 整合的概念是利用 PAM 與 LDAP 溝通取得帳號後再與其他服務進行整合
設定 PAM 整合 LDAP 登入
step.1 首先你必須先安裝以下套件才能進行整合
pam
pam-devel
pam_ldap
nss-pam-ldapd
step.2 再來進行 LDAP 設定透通,可以使用 authconfig-tui 來輕鬆建立
✔ Use LDAP ✔ Use MD5 Passwords ✔ Use Shadow Passwords ✔ Use LDAP Authentication
step.3 輸入你的 LDAP Url & Base DN,並點選 OK
之後你會看到 service nslcd start [OK]
nslcd 即是 nss-pam-ldapd 的服務
如果你不想用 authconfig-tui 的方式進行設定,也可以手動編輯 pam_ldap.conf
shell# vim /etc/pam_ldap.conf uri ldap://192.168.100.55 base o=xxx pam_password md5 scope sub \\ 搜尋 o=xxx 以下的子區域 pam_filter objectclass=posixAccount \\ search條件,可以減少搜尋的 Loading
step.4 確認 pam 的系統驗證有包含 ldap
auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account required pam_unix.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so
step.5 編輯 nsswitch.conf,修改系統認證優先順序
passwd: ldap files
shadow: ldap files
group: files
※如果 LDAP 也有建立 group 也可加上 ldap
step.6 reboot 重開機並使用 LDAP 帳號登入測試。範例使用 eric 這個帳號進行登入
第一次登入因為沒有建立家目錄,所以會提示 No directory 並且起始為 / 根目錄
No directory /home/domain/eric Logging in with home = "/". -bash-2.05b$
在這邊會看到我 LDAP 的家目錄為 /home/domain/eric 而不是 /home/eric,是為了方便管理,不將 domain 使用者與本機使用者混在一起使用。
※一般使用者建議權限都使用 /sbin/nologin,僅有測試或管理者才給予 bash login 權限。
step.6 幫使用者建立信箱及家目錄
shell# cd /home shell# mkdir -p domain/eric shell# chmod 700 domain/eric shell# mkdir mailspool shell# rm -rf /var/spool/mail shell# ln -s /var/spool/mail /home/mailspool shell# touch mailspool/eric shell# chown eric.mail mailspool/eric
由於習慣將 home 的目錄切比較大,所以將有成長空間的 /var/spool/mail ln 到 /home/mailspool
Postfix SMTP 整合 LDAP
檢查 Postfix 是否支援 LDAP 驗證
shell# postconf -m | grep ldap ldap
由於 Postfix 的驗證走的是 SASL,SASL 用的就是 PAM 所以 Postfix 不需要進行調整,但還是必須要測試一下。
shell# testsaslauthd -s smtp -u eric -p password 0: OK "Success.
OK Success 代表驗證 LDAP 沒問題。
Dovecot 整合 LDAP
要讓 Dovecot 支援 LDAP,其實在 2.0.9 之後已經很完善了,也有範例的設定檔
step.1 設定 dovecot 的驗證檔
auth-system.conf.ext 是驗證 pam 用
auth-ldap.conf.ext 是搜尋 ldap 帳號用
shell# vim /etc/dovecot/conf.d/10-auth.conf !include auth-system.conf.ext !include auth-ldap.conf.ext 取消註解 auth-ldap.conf.ext
step.2 確認 auth-system.conf.ext 採用 pam 驗證無誤
passdb { driver = pam } userdb { driver = passwd }
step.3 確認 auth-ldap.conf.ext
shell# vim /etc/dovecot/conf.d/auth-ldap.conf.ext passdb { driver = ldap args = /etc/dovecot/dovecot-ldap.conf } userdb { driver = ldap args = /etc/dovecot/dovecot-ldap.conf }
可以看到這邊也 include 了 dovecot-ldap.conf
step.4 dovecot-ldap.conf 這隻設定檔必須自行建立,這是讓 dovecot 登入 LDAP 使用的
shell# vim /etc/dovecot/dovecot-ldap.conf hosts = 192.168.100.55:636 dn = uid=tpldap,ou=server,o=xxx dnpass = tppassword base = o=xxx 試試設定檔能否查到 LDAP 的資料 shell# ldapsearch -x -f /etc/dovecot/dovecot-ldap.conf
step.5 restart dovecot
使用 MUA 測試登入成功,搞定收工!!