1 背景分析
ubuntu安裝vsftpd一般使用:
sudo apt-get install vsftpd
參照其他網(wǎng)上教程的配置后,在賬號(hào)矾睦、密碼悟衩、主目錄都是正確的情況下,可能會(huì)遇到賬號(hào)登錄提示 530 Login incorrect 的問題矾飞。
網(wǎng)絡(luò)上有好多解決方案一膨,例如修改/etc/vsftpd.conf文件 將pam_service_name=vsftpd 修改為 pam_service_name=ftp ,雖然能夠解決這個(gè)問題洒沦,但是這種方法其實(shí)是錯(cuò)誤的豹绪。這樣由于/etc/pam.d/ftp文件不存在,等于是繞過了PAM申眼。
2 vsftpd pam文件分析
/etc/pam.d/vsftpd 默認(rèn)如下
# 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
可能導(dǎo)致530錯(cuò)誤的有
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
該配置項(xiàng)的含義是 /etc/ftpusers 中的用戶禁止登陸瞒津,如果文件不存在在默認(rèn)所有用戶均允許登錄. 所以確保用戶沒在這個(gè)文件內(nèi)。
2.2 pam_shells.so
auth required pam_shells.so
配置項(xiàng)的含義為僅允許用戶的shell為 /etc/shells
文件內(nèi)的shell命令時(shí)括尸,才能夠成功
cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
而創(chuàng)建ftp用戶時(shí)巷蚪,為了禁止ssh登錄,一般多為/bin/false 濒翻、/usr/sbin/nologin 等屁柏,顯然不是一個(gè)有效的bash啦膜,也就無法登錄了。
3 解決方案
1前联、查看/etc/ftpusers 功戚,確保賬號(hào)沒有在這個(gè)文件內(nèi)。
2似嗤、修改/etc/pam.d/vsftpd
將auth required pam_shells.so
修改為->auth required pam_nologin.so
即可
3啸臀、重啟vsftpd