Mysql

純 FTPd 和 MySQL,使用 sha512

  • September 11, 2015

我目前正在開發一個用於共享主機的應用程序,為機器使用完整的 MySQL 後端。我已經設置了我所有的服務,它們執行良好,但是我對 pure-ftpd 有一點問題。

如您所知,Pure-FTPd 可以與 MySQL 一起使用,這要歸功於pure-ftpd-mysql. 這是基本配置的樣子:

MYSQLServer             127.0.0.1
MYSQLPort               3306
MYSQLSocket             /var/run/mysqld/mysqld.sock
MYSQLUser               myftpdbuser
MYSQLPassword           myftpdbpassword
MYSQLDatabase           myftpdb
MYSQLCrypt              md5
# Here come the selection queries...

如您所見,我選擇了 md5 作為加密算法,但這是一個問題。我正在使用 Symfony2,並且我為我的使用者將編碼器設置為 sha512,當我想創建一個與我的使用者使用相同密碼的 FTP 帳戶時,我必須將 sha512 雜湊複製到 FTP 帳戶。

這很令人滿意,但是,Pure-FTPd 是為 md5 配置的,因此,它將無法檢查此密碼。我想盡可能地保留 sha512,因為使用 md5 需要對我的程式碼進行一些修改以重新加密。

以下是 Pure-FTPd 配置範例的內容:

# Mandatory : how passwords are stored
# Valid values are : "cleartext", "crypt", "sha1", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "sha1", "md5" *and* "password"

所以這是我的問題:我有沒有機會將 Pure-FTPd 設置為與 sha512 一起使用,例如使用“crypt”?也許我可以在其他地方使用crypt並配置它以使用 sha512,我不知道……

編輯

我試過處理查詢,但找不到任何技巧。這是密碼查詢:

MYSQLGetPW              SELECT password FROM ftp_accounts WHERE username='\L'

解決方案

經過幾次搜尋,得到了答案,我推導出了 3 個解決方案:

  • 開發一個 Pure-FTPd 認證模組設計來執行 MySQL 查詢,並處理密碼加密機制。這意味著將 PHP 算法移植到 C(或其他語言),這是我使用 OpenSSL 庫所做的。啟動一個SHA512_CTX結構並獲得您的第一個摘要。使用正確的參數迭代 500 次,並執行 base 64 編碼。根據您的 Symfony 設置,您還可以使用十六進制結果。
  • 設置crypt(3)為在 PureFTPd 下使用加鹽 SHA512 雜湊。棘手的事情,當您開始談論 500 次迭代時。
  • 開發一個 Symfony2 命令,為您執行身份驗證。很簡單,就像一個魅力。創建一個可執行腳本(假設/usr/bin/pureftpd-auth它只是呼叫/path/to/php /path/to/app/console your:ftp:auth:command.chmod它,給它一個適當的解釋器(#!/bin/bash,…)並在共享套接字上啟動pure_authdpureftpd讓它們通信。請參閱http://download.pureftpd.org/pure-ftpd /doc/README.Authentication-Modules了解更多資訊。

glibc 2.7 及更高版本確實支持 sha512,但僅支持加鹽方式。如果您確實有鹽漬 SHA512 雜湊,則使用“crypt”應該會立即起作用。

如果您確實有未加鹽的 sha512-hashes:請務必避免使用它們 - 認真。有可用的預先計算的數據庫,因此從這些數據庫中查找雜湊將立即為您提供明文密碼或至少可以成功登錄的密碼。使用目前 GPU 計算雜湊值也非常快,因此需要避免使用任何不加鹽的方式。

例如,https: //www.crackstation.net/ 為您提供了一個很好的網路界面,用於從其雜湊中查找數百萬個未加鹽的密碼,以及一些有關“加鹽與非加鹽雜湊”、選擇正確(隨機)鹽和“好”的雜湊算法。

作為一個真實的例子,來自linkedin 和lastfm 的數百萬個未散列的密碼散列確實洩漏到了網際網路上,並且使用預先計算的散列數據庫或彩虹表只花了幾天時間就找到了其中大多數匹配的明文密碼. 使用加鹽雜湊,更有可能需要數月或數年才能找到與您的雜湊匹配的明文數據。

如果您確實了解無鹽雜湊的風險並且仍然絕對需要通過 MySQL 實現無鹽 sha512,您可以通過向 pure-authd 提供自定義腳本來實現(這樣做相當簡單)。有關這方面的更多資訊,請參閱http://download.pureftpd.org/pure-ftpd/doc/README.Authentication-Modules

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