vsftpd将不接受用MD5encryption的密码

我正在用vsftpd设置一个服务器,让虚拟用户访问他们的空间。 现在它完全正常工作,但只有CRYPT密码。 所以

sudo htpasswd -c /etc/vsftpd/ftpd.passwd phpmyadmin 

不会让我login,但是

 sudo htpasswd -c -d /etc/vsftpd/ftpd.passwd phpmyadmin 

将。

/etc/vsftpd.conf文件

 listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 nopriv_user=vsftpd virtual_use_local_privs=YES guest_enable=YES user_sub_token=$USER local_root=/var/www/vhosts/$USER.universe.local chroot_local_user=YES hide_ids=YES guest_username=vsftpd 

/etc/pam.d/vsftpd

 auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd crypt=2 account required pam_permit.so crypt=2 

我从源代码安装apache2.4.3以及PHP。

我试过的东西:

  • 谷歌很多
  • 设置crypt = 2
  • 问朋友们
  • 使用SHA(也不工作)
  • 更新htpasswd和vsftpd

我一直在为此苦苦挣扎了一周,希望你们能进一步帮助我

htpasswd以Apache格式生成MD5哈希值,您可以通过查看它们以$apr1$开头来validation,但PAM只支持您的平台的crypt(3)实现所实现的格式。 对于Glibc,相当于(基于MD5的)将是$1$ 。 你只需要用不同的工具生成密码。 这是一个例子:

 sh$ openssl passwd -1 Password: Verifying - Password: $1$vhzHvIYn$2Ro.R0WdLnxrWjHcs5RbA/ 

你可以把这个散列值复制到你的ftpd.passwd文件中, username:hash格式,它应该可以工作。

在@ bonsaiviking的答案上进行扩展,您可以使用htpasswd的批处理模式-b和plaintext -p选项生成openssl md5密码,并将其添加到ftpd.passwd文件中,如下所示:

 htpasswd -c -p -b ftpd.passwd *username* $(openssl passwd -1 -noverify *password*) 

上面的例子(Ubuntu)也创build了一个新的ftpd.passwd文件,如果它不存在使用-c

您显示的两个命令是相同的,因为-d选项告诉htpasswd使用crypt,这是大多数操作系统的默认设置。

如果你想密码散列与MD5,那么你应该使用-m

 sudo htpasswd -m /etc/vsftpd/vsftpd.passwd test New password: Re-type new password: Adding password for user test grep test /etc/vsftpd/vsftpd.passwd test:$apr1$GTYtpKS1$Jyfgu42kDspxdJTPPzSOY. 

其中显示testing的密码已经使用md5encryption。