终极解决:vsftpd-530 Login incorrect密码验证不过

一、问题现象:

国产SW3231平台,编译验证本地账号登陆失败报错:vsftpd-530 Login incorrect密码验证一直不过,默认账号ftp 、anonymous 可以登陆,国产FT2000则没有此问题;

进程启动方式:/usr/sbin/vsftpd /etc/vsftpd.conf
登陆验证方式:Windos cmd 运行 ftp x.x.x.x
密码校验失败:
终极解决:vsftpd-530 Login incorrect密码验证不过_第1张图片

二、尝试过的修改方法:

1、各种修改/etc/vsftpd.conf 配置选项尝试无效:

修改pam_service_name=/etc/pam.d/vsftpd选项
pam_service_name=vsftpd或ftp 去掉pam验证

2、各种修改/etc/pam.d/vsftpd 配置选项尝试无效:

注释掉pam验证:auth required pam_shells.so
替换掉pam验证:auth required pam_nologin.so
替换掉pam验证:auth required pam_unix.so

3、修改/etc/shells和/etc/passwd为/sbin/nologin无效:

在/etc/shells增加一行/sbin/nologin
在/etc/passwd修改ftp选项为/sbin/nologin

三、最终修改方法:

修改源码builddefs.h,关闭VSF_BUILD_PAM编译选项,清空后重新编译生成vsftpd,不再启用PAM验证;
109489835ac2e5.png)
在这里插入图片描述

四、代码调用记录:

1、根据账号、密码验证过程及失败信息搜索源码:
终极解决:vsftpd-530 Login incorrect密码验证不过_第2张图片
终极解决:vsftpd-530 Login incorrect密码验证不过_第3张图片

2、在handle_login中区分默认账号和本地账号登陆处理:
终极解决:vsftpd-530 Login incorrect密码验证不过_第4张图片
3、在check auth时函数有两个实现,一个使用了getusershell验证方式,一个使用pam验证方式:
终极解决:vsftpd-530 Login incorrect密码验证不过_第5张图片
终极解决:vsftpd-530 Login incorrect密码验证不过_第6张图片

五、记录vsftp配置文件常用方法

#cat /etc/vsftpd.conf 
write_enable=YES   	   #写权限,可以上传(全局控制)
listen=YES  		   #允许监听
max_clients=2   	   #最大连接数
anonymous_enable=NO    #允许默认账号登陆
local_enable=YES  	   #设置是否允许本地用户登录
chroot_local_user=YES  #用于指定用户列表文件中的用户是否允许切换到上级目录
pam_service_name=/etc/pam.d/vsftpd  		 #虚拟用户使用 PAM 认证方式
user_config_dir=/etc/vsftpd/vsftpd_user_conf # 设置不同用户不同权限
idle_session_timeout=1800   #无操作超时断开连接
check_shell=NO 				#是否检查本地登录用户的SHELL合法性
userlist_enable=YES  	    #设置是否允许本地用户登录
userlist_deny=NO 			#NO是白名单,YES是黑名单
userlist_file=/etc/vsftpd/user_list  #控制用户访问,里面写着用户名称。一个用户名称一行。

你可能感兴趣的:(Linux系统,运维,vsftpd)