纯FTPd和MySQL,与sha512合作

我目前正在开发一个共享主机的应用程序,为机器使用一个完整的MySQL后端。 我已经build立了我的所有服务,而且他们运作得很好,但是我对pure-ftpd有点问题。

正如你可能知道的,Pure-FTPd可以使用pure-ftpd-mysql 。 以下是基本configuration的样子:

 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... 

正如你所看到的,我select了md5作为encryptionalgorithm,但这是一个问题。 我正在使用Symfony2,并且我已经为我的用户设置了sha512的编码器,当我想创build一个与我的用户相同密码的FTP帐户时,我必须将sha512哈希值复制到FTP帐户。

然而,这是非常令人满意的,Pure-FTPd是为md5configuration的,因此它将无法检查这个密码。 我想尽可能保持sha512,因为使用md5将需要对我的代码进行一些修改以重新encryption。

以下是Pure-FTPdconfiguration示例所说的内容:

 # 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并将其configuration为在其他地方使用sha512,我不知道…

编辑

我试图与查询工作,但我找不到任何技巧。 这是密码查询:

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

解决scheme

经过几次search,并得到了答案,我推断出3个解决scheme:

  • 开发一个Pure-FTPdauthentication模块devise来执行MySQL查询,并处理密码encryption机制。 这意味着将PHPalgorithm移植到C(或其他语言),我使用OpenSSL库。 启动一个SHA512_CTX结构并获得第一个摘要。 用正确的参数迭代500次,并执行base 64编码。 根据Symfony的设置,您也可以使用hex的结果。
  • crypt(3)设置为在PureFTPd下使用盐腌的SHA512散列。 棘手的事情,当你开始谈论500次迭代。
  • 开发一个为您执行身份validation的Symfony2命令。 就像地狱一样简单,就像魅力一样。 创build一个可执行的脚本(比如说/usr/bin/pureftpd-auth ,它只是简单地调用/path/to/php /path/to/app/console your:ftp:auth:command chmod it,给它一个合适的解释器( #!/bin/bash ,…),并在共享套接字上启动pure_authdpureftpd ,以使它们进行通信。有关更多信息,请参见http://download.pureftpd.org/pure-ftpd/doc/README.Authentication-Modules 。

glibc 2.7及更高版本确实支持sha512,但只能用盐腌方式。 如果你有腌SHA512哈希,使用“地穴”应该立即工作。

如果你确实拥有无懈可击的sha512哈希值,请认真回避它们。 有预先计算的数据库可用,所以从这些数据库查找散列会立即给你明确的密码,或者至less可以成功login的东西。 使用当前GPU计算散列速度也非常快,因此需要避免使用任何无用的方法。

例如, https: //www.crackstation.net/为您提供了一个很好的web界面,用于从哈希中查找数以百万计的未encryption的密码,以及一些关于“腌制与未腌制哈希”的教育,select正确的(随机)盐和“很好“的散列algorithm。

作为一个现实生活中的例子,来自linkedin和lastfm的数以百万计的非哈希密码哈希已经泄漏到了互联网上,并且使用预先计算的哈希数据库或彩虹表,只用了几天的时间就可以find匹配的大多数明文密码。 使用腌过的哈希函数,更有可能需要几个月或几年才能find与哈希值相匹配的明文数据。

如果你确实理解了无风险哈希的风险,并且仍然绝对需要通过MySQL来实现无盐sha512,你可以通过提供一个自定义的skript来实现pure-authd(这样做相当简单)。 有关更多信息,请参见http://download.pureftpd.org/pure-ftpd/doc/README.Authentication-Modules