vsftpd sẽ không chấp nhận mật khẩu được mã hóa bằng MD5


10

Tôi đang thiết lập một máy chủ với vsftpd để cho phép người dùng ảo truy cập vào không gian của họ. Bây giờ nó đã hoạt động đầy đủ nhưng chỉ với mật khẩu CRYPT. Vì thế

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

sẽ không cho phép tôi đăng nhập, nhưng

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

sẽ.

/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

Tôi đã cài đặt apache2.4.3 từ nguồn cũng như PHP.

Những điều tôi đã thử:

  • Google rất nhiều
  • Đặt mật mã = ​​2
  • hỏi bạn bè
  • sử dụng SHA (cũng không hoạt động)
  • cập nhật htpasswd và vsftpd

Tôi đã đấu tranh với điều này trong một tuần nay, tôi hy vọng các bạn có thể giúp tôi hơn nữa


1
Bạn đang sử dụng hệ điều hành nào? Trên Linux, mặc định được cho là tiền điện tử giống như sử dụng -d.
dùng9517

vì mục đích hoàn chỉnh, -msẽ tạo ra các giá trị băm kiểu apache dựa trên MD5 ( $apr1$salt$hash)
bonsaiviking

Câu trả lời:


13

htpasswdtạo băm MD5 theo định dạng Apache, mà bạn có thể xác minh bằng cách thấy rằng chúng bắt đầu bằng $apr1$, nhưng PAM chỉ hỗ trợ các định dạng mà việc triển khai thực hiện trên nền tảng của bạn crypt(3). Đối với Glibc, tương đương (dựa trên MD5) sẽ là $1$. Bạn chỉ cần tạo mật khẩu bằng một công cụ khác. Đây là một ví dụ:

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

Bạn có thể sao chép hàm băm này vào ftpd.passwdtệp của mình ở username:hashđịnh dạng và nó sẽ hoạt động.


Cảm ơn bạn rất nhiều vì đã giúp tôi với điều này! Nó đã làm việc! Tôi có thể làm pam hỗ trợ phiên bản md5 của apache không?
Marco

Nhìn vào mã pam_pwdfile, có vẻ như bạn phải viết hỗ trợ và biên dịch lại. Nó thậm chí còn chứa toàn bộ việc thực hiện $1$băm mật khẩu MD5, cho đến tận nguyên thủy MD5, vì vậy nó không được biết đầy đủ crypt.
bonsaiviking

6

Mở rộng câu trả lời của @ bonsaiviking, bạn có thể tạo mật khẩu openssl md5 và thêm nó vào tệp ftpd.passwd trong một dòng bằng cách sử dụng các chế độ hàng loạt của htpasswd, và các tùy chọn plpext như sau:

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

Ví dụ trên (Ubuntu) cũng tạo một tệp ftpd.passwd mới nếu nó không tồn tại bằng cách sử dụng -c


htpasswd xuất ra: "Cảnh báo: lưu trữ mật khẩu dưới dạng văn bản thuần có thể không hoạt động trên nền tảng này." Tôi đoán đó là bởi vì nó nghĩ rằng đó thực sự là một văn bản kế hoạch nhưng thực tế nó là hàm băm được tạo ra bởi openssl. Sử dụng phương pháp này để tạo mật khẩu làm việc với vsftp.
Svetoslav Marinov

Đúng, htpasswd có thể tạo cảnh báo đó b / c của bạn vượt qua băm MD5 dưới dạng một chuỗi văn bản thuần túy.
jnolan517

Tạo kịch bản để làm điều này dựa trên điều này - lấy tại đây gist.github.com/bmatthewshea/53ed5148f09dfed50cebd10650ca551b
bshea

1

Hai lệnh mà bạn hiển thị là tương đương vì -dtùy chọn cho htpasswd sử dụng tiền điện tử, mặc định cho hầu hết các hệ điều hành.

Nếu bạn muốn mật khẩu được băm với md5 thì bạn nên sử dụng -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.

Điều đó cho thấy mật khẩu của bài kiểm tra đã được mã hóa bằng md5.


Anh ta phải sử dụng một phiên bản khác của htpasswd, vì anh ta nhận được kết quả khác nhau có và không có -d.
bonsaiviking

Như đã đề cập, điều này KHÔNG hoạt động với vsftp - nó tạo ra kiểu md5 của apache. trên mỗi ^ serverfault.com/a/450220/92023
bshea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.