OSWikiHK: 請協力 GPLv3 的中文翻譯工作。

如何設定 Courier imapd 和 pop3d 使用 LDAP 確認用戶身份

OSWikiHK,自由中文開源知識庫

Jump to: navigation, search

目录

courier-imap 和 Courier 的簡介

courier-imap 在 Linux 世界最被系統使用者樂於採用的電郵接收伺服器之一。(起碼這是我最喜歡的 MRA 伺服器)

其實 Courier 也有它本身的外送伺服器的 ( smtp ) ,但是它的愛用者卻遠遠不及 courier-imap 來得出名。其實在 OpenSource 世界下最完整的電郵方案可以算是 courier 了。

courier 的簡單歷史

courier 其實最早期的創作是 courier-imap 。它是一個 imap 伺服器,為什麼要建立這一套伺服器,基本上的原因是因為 qmail 所提出的 Maildir/ mail storage 方式,而當時能支援 Maildir/ 的接收伺服器只有 qmail-pop3d ,而根本就沒有 imap2 伺服器,所以有見及此 courier 就創造了 courier-imap 伺服器。

courier 的特點

當然它是支援 Maildir/ 的 mail storage 。但是另一方面來說它也只支援 Maildir/ 的 mail storage 方式,也就是說你絕不可能使用 courier-imap 來閱讀收在 mailbox 下的郵件。

另一方面 courier 更把 Maildir/ 的 mail storage 發展致極至。要仔細地介紹它對 Maildir/ 的改進,可以好好寫上幾千字。所以在這裡暫且不提。

courier 的優點與特點

另外 courier-imap 也有它特別的特點,不然不會有這樣多系統管理者愛用它。首先它是一個分開不同部件的接收伺服器,也就是它除了提供 imap2 的連接外,亦提供了 pop3 的連接。更有 imap-ssl 和 pop-ssl 的伺服器。可以說是你能想出來的功能它也有提供給電郵系統。

courier 的使用者認証工作

但是你或許會問︰這樣多的接收伺服器系統,如何統一管理它的認証工作?如果每一部分都有它的認証工作分開而獨立的話,那麼只會加重系統的管理工作。

使用不同使用者資料庫的使用者認証

當然早期的接收伺服器,它的認証工作全交給 Linux 的認証系統來管理,例如交給 pam 來管理,當然沒有這個問題,但是如果你的使用者只是 LDAP 或 SQL 內的一筆資料的話,那麼設定工作就會沒完沒了。(其實你可以想像得到如果 pop3 伺服器有它的認証系統,而 imap2 有它另一組的認証系統,那麼你系統中就有一套認証設定了。或許你真的需要這樣設定 :) ,如果是這樣的話你就或許不能使用 courier 來作你的 MRA 伺服器了。 )

courier 下的 authdaemond 伺服器

所以 courier 在設計上使用了另一伺服器來管理這方面的認証資訊,在 courier 世界中,這認証伺服器在 courier 中被稱為作 courier-authdaemond 的。你可以把它看成一個認証 daemon 。

這方面的設計使得 courier 的認証工作得以集中和簡化。而且所有有關 courier 的伺服器,甚至是 sqwebmail ( courier 下的 webmail 網頁電郵系統。) 的認証工作的設定都可以得到簡化,當然在設定當中最被一人提起的就是 LDAP 的認証工作。

authdaemond 的設定檔案

至於 courier 的認証伺服器的設定檔在 file:///etc/courier/authdaemonrc 下。它的重要內容如,下︰

authmodulelist="authpam"
authmodulelistorig="authcustom authcram authuserdb authldap authpgsql authmysql authpam"
daemons=5
version=""
authdaemonvar=/var/run/courier/authdaemon

這是被完全簡化後得出來的設定檔案。主要有一個很重要的地方,你是會需要設定的,就是

authmodulelist="authpam"

authdaemond 下的不同使用者資料系統

這裡是說使用 authpam 來作認証,也就是使用 pam 的模組來作出認証的工作。其實你還可以選用不同的模式來作為認証的用途,例如︰

  • authldap 這是使用 LDAP 來作為認証的工作。
  • authpgsql 這是使用 postgresql 來作為認証的工作。
  • authmysql 這是使用 mysql 來作認証的工作。

這些都是認証資料被放到不同的伺服器下,而 authdaemond 就會查詢這些伺服器來接收到這些不同的認証資料。

authuserdb 的簡單介紹

另外還有一個我十分喜愛的 authuserdb ,這是把認証資料放到 Local system 下的一個 cdb 認証檔案內。這可以一些不喜歡 SQL 或 LDAP 的使用者也可以用來作為這些認証伺服的 cash 的工作,減少連接是所用來的網絡資源

authdaemond 的限制

雖然 courier 可以查詢不同的伺服器,但是有一個重大的問題,就是這些不同的伺服器本身是不可以同一時間處理不同認証使用者資料庫下的使用者的,也就是說要就是你把使用者全放在 LDAP 下,不然就把它全放在 mysql 或 postgresql 下,你就是不可以把某些使用者放在 LDAP ,而某些放在 MySQL 下的,而希望 courier 能同時向這些使用者提供認証的, 這方面其實 postfix 和 exim 都可以支援的,而且 postfix 是擁有一個我見過而又最具彈性的資料查詢結構。

courier-ldap 的 debian 套人件

所以如果你是選定了要支援 LDAP 伺服器的話,如果你使用的是 debian ,那麼你就要安裝 courier-ldap 的套件。而當你起動 courier-authdaemond 的時候,你會起動了 authdaemond.ldap ,如果你發現你所起動的時是 authdaemond.plain 的話,也就是表示你的 courier 並未支援 ldap 的認証工作。

courier-ldap 認証模組下的 authldaprc 設定檔

另外如果你是使用 ldap 或 sql 作你的認証工作的話,另一方面你也要留意一件事就是不同模組下也有不同的認証的設定檔需要作出設定的。

例如你使用 LDAP 作認証的話,你的認証檔案就會是 file:///etc/courier/authldaprc 了。不如我們現在也打開這檔案看一看。

authldaprc 的設定檔和其中設定

LDAP_SERVER             localhost
LDAP_PORT               389
LDAP_PROTOCOL_VERSION   3

# 這是你 LDAP 下的 BASEDN 。

LDAP_BASEDN dc=samba,dc=hk

# LDAP 下的資料可能需要某些使用者的身份才可以查詢的。
# 但是如果不要的話,可以不加上以下這兩行。

#LDAP_BINDDN cn=administrator, o=example, c=com
#LDAP_BINDPW toto
LDAP_TIMEOUT 5

# 我喜歡使用 LDAP 的 auth bind 來作使用者的認証工作。
# 這過程是先尋找使用 entry 的 DN ,
# 然後再使用這 DN 和使用者所輸入的 password 來作認証工作,
# 如果認証工作順利的話,使用者就被認成功。

LDAP_AUTHBIND 1

# 這是使用者的登入資料。
# 通常來說會使用 mail address 來作為使用者的登入帳號。

LDAP_MAIL mail

# 這是說在電郵系統下所有的使用都使用這使用者的 uid 和 gid
# 來作為管理工作。

LDAP_GLOB_UID vmail
LDAP_GLOB_GID vmail

# 這是說使用者的電郵放在那一檔案目錄下。
# 這資料放在 homeDirectory 這 attribute 下。

LDAP_HOMEDIR homeDirectory

LDAP_FULLNAME cn

# 如果你不使用 LDAP_GLOB_UID 和 LDAP_GLOB_GID 這兩選項的話,
# 你就需要設定 uidNumber 和 gidNumber 這兩個 attribute 了。
# 但是可行的話,我還是喜歡使用 LDAP_GLOB_UID 和 LDAP_GLOB_GID 來管理。

#LDAP_UID uidNumber
#LDAP_GID gidNumber

LDAP_DEREF never
LDAP_TLS 0

好了如何設定 SQL 認証的,暫且不提了。

|| courier-imap.png || 如希望對 Courier 有更深入了解,可以參考 http://www.courier-mta.org/imap/ || 感謝 SWPEARL 的支援

Personal tools