2013-01-02 39 views
0

好的,所以我有我的快遞安裝非常奇怪的問題..當我嘗試登錄時,我需要用戶名和密碼吧?除了我可以作爲密碼使用任何字符串,其中前綴相同就像我的密碼。例如:courier authdaemon奇怪的密碼處理

讓我們說,這是我的密碼:

#password# 

我可以成功地與下列任何密碼登錄:

#password# 
#password#FOO 
#password#BAR 

等。

我使用mysql用於存儲用戶數據,這是我的/ etc/courier/authmysqlrc

MYSQL_SERVER localhost 
MYSQL_USERNAME #USER 
MYSQL_PASSWORD #PASSWORD 
MYSQL_PORT 0 
MYSQL_DATABASE mail 
MYSQL_USER_TABLE users 
MYSQL_CRYPT_PWFIELD password 
#MYSQL_CLEAR_PWFIELD password 
MYSQL_UID_FIELD 5000 
MYSQL_GID_FIELD 5000 
MYSQL_LOGIN_FIELD email 
MYSQL_HOME_FIELD "/home/vmail" 
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') 
#MYSQL_NAME_FIELD 
MYSQL_QUOTA_FIELD quota 

哪裏可能有問題?在此先感謝您的幫助

回答

2

問題是使用操作系統的crypt()函數來加密密碼,該函數僅查看密碼的前8個字符以生成加密哈希。
作爲解釋here

如果你有密碼超過8個字符,只要在第一 8個字符匹配,隱窩()將其稱之爲有效匹配。例如,如果您的密碼是「password」,並且作爲加密散列存儲在htpasswd文件中,則 將與對「password」,「password123」等進行檢查時檢查「passwordX」 完全相同;也就是說, 將作爲有效支票返回,因爲前8個字符正確匹配 。同樣,如果您的密碼是「longpassword」,並且您僅針對「longpass」檢查 ,那麼該返回值也會有效。

+0

謝謝,不知道那個..小嚇人:/有什麼我可以做的嗎?像告訴authdaemon切換到另一個哈希函數? – Paladin

+0

@Paladin也許你可以嘗試使用CRAM-MD5認證,因爲'authmysqlrc'支持它,你可以閱讀[here](http://www.courier-mta.org/authlib/README.authmysql.html)。你可以找到關於CRAM-MD5身份驗證的更多信息[這裏](http://www.inter7.com/courierimap/INSTALL.html#crammd5) – 2013-01-19 09:41:18

+0

是的,我考慮過CRAM-MD5,但是「CRAM-MD5身份驗證也是由authldap,authpgsql和authmysql支持,只要使用明文密碼。「..我不喜歡明文密碼.. – Paladin