Postfix

Postfix + Dovecot 和 MySQL 後端:md5-hashed 密碼和 CRAM-MD5 auth

  • August 14, 2015

我的問題

在數據庫中從 MD5 切換到 CRAM-MD5 密碼有什麼風險,特別是考慮到以下內容,以及如何處理現有安裝(假設我知道純文字密碼)?

使用(切換到)CRAM-MD5,

  1. doveadm pw對於加密/驗證,PostfixAdmin 必須在使用者創建和密碼更改時恢復為外部工具 ( ) ,因此明文密碼至少會很快出現在程序列表1中
  2. 我可能會引入一個新的依賴項(完全相同的工具)
  3. 不確定其他(第 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。對我來說,案子解決了。

引用自:https://serverfault.com/questions/713442