Postfix + Dovecot 和 MySQL 後端:md5-hashed 密碼和 CRAM-MD5 auth
我的問題
在數據庫中從 MD5 切換到 CRAM-MD5 密碼有什麼風險,特別是考慮到以下內容,以及如何處理現有安裝(假設我知道純文字密碼)?
使用(切換到)CRAM-MD5,
doveadm pw
對於加密/驗證,PostfixAdmin 必須在使用者創建和密碼更改時恢復為外部工具 ( ),因此明文密碼至少會很快出現在程序列表1中- 我可能會引入一個新的依賴項(完全相同的工具)
- 不確定其他(第 3 方)工具是否可以處理該問題
第 2 項可能沒什麼大不了的,因為我不打算替換 Dovecot(即使它有詳細記錄的遷移路徑,恕我直言)。第 3 項還不是什麼大問題(因為我不知道這些工具)。在幕後還有 SASL,IIRC 再次在 Dovecot 的幫助下完成了這部分工作(例如
smtpd_sasl_type=dovecot
在 Postfix 配置中)。但這可能是我錯過了一些東西——可能是更多的麻煩,或者是另一種選擇。有什麼提示嗎?您會推薦什麼(除了完全不同的設置)?
TL;DR(背景)
我正在設置一個新的郵件伺服器,使用 Dovecot、Postfix、PostfixAdmin、Sieve 和一些額外的組件——所有這些都與 MySQL 作為後端連接(勉強遵循這個德語教程)。到目前為止,我已經啟動並執行了所有內容,但後來注意到它僅提供 PLAIN 和 LOGIN 用於 IMAP 身份驗證。對於本地連接(例如同一台機器上的 Roundcube 網路郵件程序)和其他“加密連接”(HTTPS/IMAPS/POP3S/SMTPS)來說沒什麼大不了的——但恐怕有些使用者會改用未加密的連接,這我不想完全禁用(在某些情況下可能需要這些)。
所以我在 Dovecot 中啟用了 CRAM-MD5 和 DIGEST-MD5——這當然不能工作:PostfixAdmin 使用其內部 MD5 過程將密碼儲存在數據庫中,因此 Dovecot 無法匹配它們(有關詳細資訊,請參閱我的答案)。這基本上給我留下了 3 個選項,其中一個甚至不是這樣:
- 保持原樣(具有上述風險)
- 切換到數據庫中的純文字密碼(哎呀,不,不會這樣做)
- 切換到數據庫中的 CRAM-MD5 密碼
更新
通過調查“參與者”,以下是可能性的比較:
PwdStore MD5 PwdStore CRAM-DM5 網路郵件(圓形立方體) 僅客戶端/伺服器 HTTPS(將升級 HTTP 請求,因此 PLAIN = OK) IMAP PLAIN PLAIN / CRAM-MD5(內部)² SMTP PLAIN PLAIN / CRAM-MD5(內部)² 本機客戶端(連接到 Postfix/Dovecot) IMAP³ PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5 SMTP³ PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5 POP3³ PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5 IMAPS PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5 SMTPS PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5 POP3S PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5 後綴管理員 創建/更新 MD5(內部)CRAM-MD5(通過 dovecotadm)⁴
**1:**我剛剛檢查了來源,
postfixadmin/functions.inc.php
在第 928 行發現了以下內容:所以這個反駁似乎成立了。
Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table
2:
roundcube/program/lib/Roundcube/rcube_imap_generic.php
第 90 行,在function authenticate()
3: PLAIN/LOGIN 通常在未加密的連接上禁用
**4:**可以使用 Roundcube 的程式碼重新編寫,因為兩者都是用 PHP 編寫的——但是 PostfixAdmin
由於我沒有得到任何答案,我自己進行了實驗,最終完成了切換——進展順利。
CRAM-MD5
如最初所述,優勢在於,如果加密傳輸不可用(是的,發生這種情況),至少可以在未加密傳輸上進行身份驗證——另外,對於那些已經在那裡使用 CRAM-MD5 的人來說,從舊伺服器遷移更順暢。除此之外,我還沒有看到任何副作用——儘管可能需要一段時間才能出現:)因此,對於那些感興趣的人,以下是執行步驟:
Dovecot:在您的(或您正在使用的相應文件)中
default_pass_scheme
從更改MD5-CRYPT
為,然後添加到CRAM-MD5``/etc/dovecot/dovecot-mysql.conf``cram-md5``auth_mechanisms``/etc/dovecot/dovecot.conf
Postfix:就我而言,Postfix 通過 SASL (
smtpd_sasl_type=dovecot
) 使用 Dovecot 進行身份驗證 - 所以這裡無事可做後綴管理員:
- 首先登錄到 PostfixAdmin WebIF 並保持登錄狀態——否則在配置更改後您將無法這樣做 :)
- 更改
config.inc.php
:$CONF['encrypt'] = 'md5crypt';
必須更改為$CONF['encrypt'] = 'dovecot:CRAM-MD5';
。還要檢查$CONF['dovecotpw'] = "/usr/sbin/doveadm pw";
- 例如在 Debian Wheezy 上,doveadm
駐留在/usr/bin
其中,因此需要調整此設置- 現在轉到 PostfixAdmin WebIf(您仍然登錄)並更新使用者密碼:導航到“虛擬列表”,滾動到“郵箱”,點擊每個郵箱的“編輯”連結,然後儲存“新密碼”(這意味著您要麼必須知道他們的密碼,要麼設置“一些”密碼並讓他們稍後更新。據我所知,無法“轉換”現有密碼)。
通過“管理員列表”對管理員重複相同的操作 - 否則他們/您將無法再次登錄
重新啟動郵件服務。基本上,重啟 Dovecot 或者 Postfix 就足夠了。
完畢。現在您可以驗證一切是否仍在工作。就我而言,它是:Roundcube 仍然能夠對 PLAIN 進行身份驗證——並且遠端客戶端現在能夠使用 CRAM-MD5。對我來說,案子解決了。