记vsftpd虚拟用户登录返回530 Login incorrect解决过程
遇到的问题:
最近需要在Ubuntu18.04上编译并安装vsftpd,从官网http://www.linuxfromscratch.org/blfs/view/svn/server/vsftpd.html下载vsftpd-3.0.3.tar.gz后,用源码编译成功了vsftpd,配置好ftp虚拟用户后,输入用户名和密码后,发现一直返回530 Login incorrect。
解决问题的过程:
1. 在IP为192.168.1.264的Ubuntu18.04上,
1.1 tar -zxf vsftpd-3.0.3.tar.gz
1.2 cd vsftpd-3.0.3
1.3 make
1.4 编译成功后,会在当前目录生成一个vsftpd可执行文件
1.5 在/etc/vsftpd.conf中配置ftp虚拟用户(网上有很多配置vsftpd虚拟用户的资料),更权威的配置过程见
./vsftpd-3.0.3/EXAMPLE/VIRTUAL_USERS/README
2. 在win7上的cmd命令行,
2.1 输入"ftp",然后回车,进入ftp命令行模式
2.2 输入 open 192.168.1.264 21,然后回车
2.3 要求输入用户名 User (192.168.1.264:(none)): guoke,然后回车,回显 331 Please specify the password.
2.4 输入密码 Password: 123456,回车后,回显 530 Login incorrect. Login failed.
上面2.4反复试过多次,都是报同样的错误,最后实在没办法,只有上gdb,在调试过程中发现,vsftpd有两种进程工作方式,一种是主进程调用vsf_one_process_start生成一个子进程,另外一种是主进程调用vsf_two_process_start生成两个子进程,好巧不巧,vsftpd的虚拟用户是第二种方式。然后就是在Makefile中加上-g参数编译debug版本调试,特别注意需要删掉 LINK=-Wl,-s,这里的-s会去掉生成文件中的函数名,如果不删掉,会导致gdb调试时加载不了源代码信息。接下来就是把3个进程都用gdb attach PID上,找断点,下断点,先从源码中找到所有出现“Login incorrect”的地方下断,逐渐缩小范围。最后发现是两个子进程中的一个进程老是进入 ./vsftpd/vsftpd-3.0.3/sysdeputil.c的 vsf_sysdep_check_auth 函数里面
#ifndef VSF_SYSDEP_HAVE_PAM //问题就出现在这个 VSF_SYSDEP_HAVE_PAM上int vsf_sysdep_check_auth(struct mystr* p_user_str,const struct mystr* p_pass_str,const struct mystr* p_remote_host)
{const char* p_crypted;const struct passwd* p_pwd = getpwnam(str_getbuf(p_user_str));(void) p_remote_host;if (p_pwd == NULL) //由于ftp虚拟用户是不存在的用户,所以p_pwd永远为NULL{return 0;}
......
}
......
#else //这个else才是pam验证函数
.......
int vsf_sysdep_check_auth(struct mystr* p_user_str,const struct mystr* p_pass_str,const struct mystr* p_remote_host)
{int retval = -1;pam_item_t item;const char* pam_user_name = 0;
......
}
......
#endif
最后读了几次代码才反应过来,是这个 #ifndef VSF_SYSDEP_HAVE_PAM 出了问题,然后顺藤摸瓜,发现是
./vsftpd-3.0.3/dummyinc/security/pam_appl.h这个文件里面 #undef VSF_SYSDEP_HAVE_PAM 取消定义了,最最后,锁定了Makefile里面的 IFLAGS = -idirafter dummyinc,这个gcc参数-idirafter表示如果gcc在其他地方找不到 #include "./security/pam_appl.h",最后就在dummyinc目录下面找。问题源头找到了,接下来就是如何解决该问题了,解决这个问题有两种方式,一种是直接注释掉./vsftpd-3.0.3/dummyinc/security/pam_appl.h,但这是下策。另一种是发现vsf_findlibs.sh里面有一个"-lpam"选项,原来vsftpd在这个地方埋了一个坑,如果系统中未找到 libpam.so,就不会编译pam。然后使用apt-get install libpam0g-dev装上对应的开发包后,然后编译的时候使用 make LIBS="-lpam -lcap",结果就可以使用虚拟账户登录了。
总结:
1. "在源码面前没有秘密可言" ----- 侯捷
2. vsftpd默认是在Redhat上编写并安装的软件,不要天真的认为Ubuntu和Redhat都是Linux系统,同一个软件在两个系统上的表现就都会一样。
记vsftpd虚拟用户登录返回530 Login incorrect解决过程相关推荐
- linux下配置vsftpd虚拟用户为登录用户
1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...
- Linux之Vsftpd虚拟用户、扩展应用tcp_wrapper实验总结
Linux之Vsftpd虚拟用户实验总结 一.vsftpd简介 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX ...
- linux关闭本地登录密码登录密码错误,vsftpd本地用户登录密码错误的解决方法
今天发现自己虚拟机的vsftp使用本地用户名无法登陆,于是重新配置,但配置了很多次都没成功,一直显示 530 login incorrect. login failed 解决方式是将vsftp.con ...
- linux用户ftp失败,vsftpd本地用户登录密码错误的解决方法
今天发现自己虚拟机的vsftp使用本地用户名无法登陆,于是重新配置,但配置了很多次都没成功,一直显示 530 Login incorrect. Login failed 解决方式是将vsftp.con ...
- FTP服务学习笔记之基于MySQL+PAM的vsftpd虚拟用户
基于mysql+PAM的vsftpd虚拟用户配置 一.实验说明 操作系统:Redhat5.8_X64bit 实验平台:VMware Workstation 所需要的软件包:pam_mysql-0.7R ...
- linux搭建vsftpd虚拟用户访问
配置vsftpd服务 FTP服务器默认匿名可以访问. 1.搭建yum仓库 [root@accp~]# vim /etc/yum.repos.d/dvd.repo [server] name ...
- 因虚而安全---vsftpd虚拟用户
Linux系统平台下的FTP服务器软件,当数Wu-ftpd.Proftpd和vsftpd这三款软件具有代表性.Wu-ftpd服务器历史悠久,功能强大,可构建出稳定性出色的FTP服务器:Proftpd服 ...
- centos创建vsftpd虚拟用户
CentOS Vsftpd服务器(虚拟用户建立) 一.安装vsftpd服务相关组件 需要安装组件vsftpd pam db4 db4-utils [root@CentOS /]# yum -y ins ...
- vsftpd虚拟用户和本地用户不能共存的解决方法
在配置vsftpd的过程中,听信了网上的谗言,把vsftpd配了一遍,发现配完,虚拟用户和本地用户不能共存,即虚拟用户可以登录ftp,但是本地用 户不能登录的ftp.折腾了很久,包括上网找过很多内容都 ...
- vsftpd虚拟用户
转自 http://kindit.blog.51cto.com/2286921/1217428 使用vsftpd虚拟用户可以将权限限制在每个用户的根目录里,这样解决了匿名用户不能正对每个人进行权限控制 ...
最新文章
- 【转载】Git 常用命令大全
- 二分匹配的Hopcroft-Carp算法
- mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准
- 最小生成树计数(HYSBZ-1016)(简化版实现)
- 前端【学习心得】电商网站前端架构#3 前端在产品设计中的作用
- sql server mysql 同步_SQL Server 用链接server 同步MySQL
- (篇五)C语言水仙花数的花样求法
- 格子染色问题 java_《Mathematical Olympiad——组合数学》——染色问题
- Spark用DSL表达式如何使用row_number函数
- ES6中使用let, const声明的变量, 在window对象下是获取不到的
- linux的前端环境搭建-安装配置git客户端与github连接
- [C语言循环应用]--打印字符金字塔
- windows cmd 复制文件
- 大数据技术与应用专业 课 程 标 准
- 浑浑噩噩10年,入坑软件测试,6年干到测试leader,非科班的我也能当程序员!
- 20 个有用的 Go 语言微服务开发框架吐血总结!!!
- Intel Atom移动处理器惨败,还被用户和经销商起诉
- 重复高斯勒让德法则(gauss-legendre)求积分(python,数值积分)
- [Swift]求最大公约数和最小公倍数【用微信查看本文链接可查看到引用图片】
- 【网站】数字滚动效果的实现方法
热门文章
- 你知道数据中台,但你肯定没听过报表中台,我靠它征服百万数据人
- ectouch2.0 php5.5_EcTouch二次开发
- 小区广播背景音乐系统IP网络广播解决方案
- orange软件:预测模型:逻辑回归
- 中国通信简史 (上)
- bochs运行xp_bochs模拟器xp系统镜像安装教程及注意事项
- 树莓派4b自带wifi_树莓派4B wifi开机启动
- wifi无线设备服务器驱动,如何安装Windows 10的WiFi驱动程序
- python动漫教程视频_求python的进阶教程视频_python动漫教程视频教程
- 【Java架构师入门到精通】java分布式架构有哪些技术