ubuntu vsftpd 530 根本原因和解決方案
1 背景分析
ubuntu安裝vsftpd一般使用:
sudo apt-get install vsftpd
參照其他網上教程的配置後,在賬號、密碼、主目錄都是正確的情況下,可能會遇到賬號登入提示 530 Login incorrect 的問題。
網路上有好多解決方案,例如修改/etc/vsftpd.conf檔案 將pam_service_name=vsftpd 修改為 pam_service_name=ftp ,雖然能夠解決這個問題,但是這種方法其實是錯誤的。這樣由於/etc/pam.d/ftp檔案不存在,等於是繞過了PAM。
2 vsftpd pam檔案分析
/etc/pam.d/vsftpd 預設如下
# Standard behaviour for ftpd(8). auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so. # Standard pam includes @include common-account @include common-session @include common-auth auth required pam_shells.so
可能導致530錯誤的有
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
和
auth required pam_shells.so
2.1 /etc/ftpusers
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
該配置項的含義是 /etc/ftpusers 中的使用者禁止登陸,如果檔案不存在在預設所有使用者均允許登入. 所以確保使用者沒在這個檔案內。
2.2 pam_shells.so
auth required pam_shells.so 配置項的含義為僅允許使用者的shell為 /etc/shells
檔案內的shell命令時,才能夠成功
cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash
而建立ftp使用者時,為了禁止ssh登入,一般多為/bin/false 、/usr/sbin/nologin 等,顯然不是一個有效的bash,也就無法登入了。
3 解決方案
1、檢視/etc/ftpusers ,確保賬號沒有在這個檔案內。
2、修改/etc/pam.d/vsftpd
將auth required pam_shells.so修改為->auth required pam_nologin.so 即可
3、重啟vsftpd