歡迎轉載 . 轉載前請先以電子郵件或者書面方式告知. 如果有任何修改請來信通知小弟, 不得作為商業用途(包含轉變為任何形式的講義,書籍片段, 網頁文章, 或者教材, 本人會保留任何形式的訴訟權利), 轉載時並請保持此一宣告. 作者: 日京三子 <a843433{at}yahoo{dot}com>
在
第一篇裡面, 小弟告訴大家, 如何建立一個LDAP系統的根本. 這次, 就把目標放在跟PAM系統, 包含Sendmail 與 dovecot 這兩部分.
在第一篇的時候, 已經告訴大家如何建立一個基礎的LDAP系統. 基本上, 如果你很完整的按照小弟的步驟匯入LDAP server, 並且也用ldapsearch檢查過資料內容, 那應該是OK了才對.
小弟建立了一個使用者, 他"長"的像下面這樣:
dn: uid=abcd,ou=People,dc=your,dc=com
uid: abcd
cn: abcd
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$ahz3dh5h$TrjekyZu/y5yKXwud5zWO/
shadowLastChange: 12481
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 514
gidNumber: 502
homeDirectory: /home/abcd
(沒錯! 就是在第一篇裡面的範例人物, abcd! )
接著, 我們要讓這個abcd能夠像一般利用useradd所新增的使用者一樣, 可以透過LDAP服務, 登入到Linux系統. 想當然爾, 第一步就是結合PAM系統! 首先, 先修改
/etc/openldap/ldap.conf 這個檔案:
HOST 127.0.0.1
BASE dc=your,dc=com
URI ldap://127.0.0.1
HOST一定是你的正確IP, 或者是能透過DNS系統能夠找到的網域主機名稱. 如果這地方設定錯誤, 或者是一個不正確的IP, LDAP系統就跑不起來 ! 如果怕死, 請跟我一樣, 設定為127.0.0.1, 這樣最保險 :lol:
BASE 的設定值 則一定要跟你在
/etc/openldap/sldap.conf 裡面這段的設定相同:
suffix "dc=your,dc=com"
至於
URI ldap://127.0.0.1 這部分的描述, 很抱歉, 小弟只是按照該檔案的說明照抄的, 並沒有去深刻的瞭解是甚麼作用, 還請知道的朋友告知一下 ^^"[/list]
再來, 是修改
/etc/ldap.conf 這個檔案:
host 127.0.0.1
base dc=your,dc=com
此時, 請檢查一下, 因為我們要利用的是PAM系統, 而我們需要的pam_ldap模組是屬於nss_ldap的一部份, 所以請你用這個指令檢查一下(RedHat系的就不用檢查了, 一定有! ):
rpm -qa|grep nss_ldap
像我的RedHat Fedora Core 2的版本裡面, 內建的是這個模組
nss_ldap-217-1
當上面的部分修改完, 檢查OK的時候, 請深呼吸, 並先把
/etc/pam.d/system-auth複製一份到其他地方. 因為這是系統最重要的檔案, 如果你改錯了, 很抱歉, 系統就不會讓你登入了(除了進入單機救援模式之外...但太嚴重也會讓Single mode起不來, 必須靠救援磁片或開機光碟來搶救, 千萬要小心!).... 在複製備份之後, 請把
/etc/pam.d/system-auth修改成像下面一樣:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/pam_winbind.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
# ----------------------------
auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass
# ----------------------------
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so
# ----------------------------
account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] /lib/security/$ISA/pam_ldap.so
# ----------------------------
password required /lib/security/$ISA/pam_cracklib.so retry=3 type=
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
# ----------------------------
password sufficient /lib/security/$ISA/pam_ldap.so use_authtok
# ----------------------------
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
# ----------------------------
session optional /lib/security/$ISA/pam_ldap.so
中間有四個地方被新增進來(看到pam_ldap.so就是新增的啦~), 再次叮嚀, 要注意, 要小心, 有大小寫之分, 空格跟TAB沒關係. 但小心打錯字!
最後的一個部分, 就是修改系統認證的順序. 請開啟
/etc/nsswitch.conf,找到符合描述的片段並修改成像下面這樣
passwd: ldap files
shadow: ldap files
group: ldap files
在這步驟完成之後, 請再次確認與檢查
/etc/pam.d/system-auth這個檔案, 確保沒有問題, 然後重新開機....
#---------------------------------------#
驚險刺激的冒險....
驚心動魄的期待....
電腦順利重新
^_^"
#---------------------------------------#
過了幾分鐘的開機等候, 應該很順利的成功開機, 並且在那邊等著你輸入帳號密碼. 請嘗試一下我們所建立的abcd與他的密碼. 按照常理來說, 你應該可以快樂的登入系統. 但會遇到下面這個訊息:
No directory /home/abcd!
Logging in with home = "/".
-bash-2.05b$
(註)這是因為我們並沒有為這個使用者建立家目錄所引發的系統警告. 請做下面三行指令以建立abcd的家目錄:
mkdir /home/abcd
chown 514.502 /home/abcd
chmod 700 /home/abcd
順便, 為了讓這個abcd使用者能收發信件, 所以我順手幫他建立信箱:
touch /var/spool/mail/abcd
chown 514.mail /var/spool/mail/abcd
這一切都OK之後, 再次登入時應該就不會有系統警告了! 此時也可以快樂的利用這個abcd帳號進行
收信(當然, 前提是你有正確的設定Sendmail服務!), 但
發信的部分會遭遇到問題! 請編輯
/etc/dovecot.conf, 並修改這幾個標題的敘述如下面所示:
protocols = imap pop3
...
...
auth_userdb = ldap /etc/dovecot-ldap.conf
auth_passdb = ldap /etc/dovecot-ldap.conf
(大約分別在15, 384, 與400行的地方)
並且, 自己新增一個檔案, 為
/etc/dovecot-ldap.conf, 內容如下:
hosts = 127.0.0.1
dn = uid=root,ou=People,dc=your,dc=com
# Password for LDAP server
dnpass = your-dn-root-passwd
# LDAP protocol version to use. Likely 2 or 3.
ldap_version = 3
# LDAP base
base = dc=your,dc=com
在重新執行dovecot之後, 去看看
/var/log/message 裡面有沒有任何的錯誤訊息
當然, 你應該也會像我一樣, 採用sasl認證機制, 你也會遇到像我一樣的問題,
請看小弟發問的問題如果一切都很順利, 恭喜! 你已經完成 LDAP + Mail 的艱難任務了!
#--------------------------------------#
註: 事實上, 我沒遇到那個錯誤訊息. 我是從Linux網路管理實務(施威銘出版社 著)P4-38上面抄來的.
#--------------------------------------#
本篇資料來源:
1. Linux網路管理實務(施威銘出版社 著), ISBN 957-442-111-2
2.
www.idealx.org[/list]
-------------
期待 samba 篇吧 ^O^