遇到的问题

最近需要在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解决过程相关推荐

  1. linux下配置vsftpd虚拟用户为登录用户

    1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...

  2. Linux之Vsftpd虚拟用户、扩展应用tcp_wrapper实验总结

    Linux之Vsftpd虚拟用户实验总结 一.vsftpd简介 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX ...

  3. linux关闭本地登录密码登录密码错误,vsftpd本地用户登录密码错误的解决方法

    今天发现自己虚拟机的vsftp使用本地用户名无法登陆,于是重新配置,但配置了很多次都没成功,一直显示 530 login incorrect. login failed 解决方式是将vsftp.con ...

  4. linux用户ftp失败,vsftpd本地用户登录密码错误的解决方法

    今天发现自己虚拟机的vsftp使用本地用户名无法登陆,于是重新配置,但配置了很多次都没成功,一直显示 530 Login incorrect. Login failed 解决方式是将vsftp.con ...

  5. FTP服务学习笔记之基于MySQL+PAM的vsftpd虚拟用户

    基于mysql+PAM的vsftpd虚拟用户配置 一.实验说明 操作系统:Redhat5.8_X64bit 实验平台:VMware Workstation 所需要的软件包:pam_mysql-0.7R ...

  6. linux搭建vsftpd虚拟用户访问

    配置vsftpd服务 FTP服务器默认匿名可以访问. 1.搭建yum仓库   [root@accp~]# vim /etc/yum.repos.d/dvd.repo   [server]   name ...

  7. 因虚而安全---vsftpd虚拟用户

    Linux系统平台下的FTP服务器软件,当数Wu-ftpd.Proftpd和vsftpd这三款软件具有代表性.Wu-ftpd服务器历史悠久,功能强大,可构建出稳定性出色的FTP服务器:Proftpd服 ...

  8. centos创建vsftpd虚拟用户

    CentOS Vsftpd服务器(虚拟用户建立) 一.安装vsftpd服务相关组件 需要安装组件vsftpd pam db4 db4-utils [root@CentOS /]# yum -y ins ...

  9. vsftpd虚拟用户和本地用户不能共存的解决方法

    在配置vsftpd的过程中,听信了网上的谗言,把vsftpd配了一遍,发现配完,虚拟用户和本地用户不能共存,即虚拟用户可以登录ftp,但是本地用 户不能登录的ftp.折腾了很久,包括上网找过很多内容都 ...

  10. vsftpd虚拟用户

    转自 http://kindit.blog.51cto.com/2286921/1217428 使用vsftpd虚拟用户可以将权限限制在每个用户的根目录里,这样解决了匿名用户不能正对每个人进行权限控制 ...

最新文章

  1. 【转载】Git 常用命令大全
  2. 二分匹配的Hopcroft-Carp算法
  3. mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准
  4. 最小生成树计数(HYSBZ-1016)(简化版实现)
  5. 前端【学习心得】电商网站前端架构#3 前端在产品设计中的作用
  6. sql server mysql 同步_SQL Server 用链接server 同步MySQL
  7. (篇五)C语言水仙花数的花样求法
  8. 格子染色问题 java_《Mathematical Olympiad——组合数学》——染色问题
  9. Spark用DSL表达式如何使用row_number函数
  10. ES6中使用let, const声明的变量, 在window对象下是获取不到的
  11. linux的前端环境搭建-安装配置git客户端与github连接
  12. [C语言循环应用]--打印字符金字塔
  13. windows cmd 复制文件
  14. 大数据技术与应用专业 课 程 标 准
  15. 浑浑噩噩10年,入坑软件测试,6年干到测试leader,非科班的我也能当程序员!
  16. 20 个有用的 Go 语言微服务开发框架吐血总结!!!
  17. Intel Atom移动处理器惨败,还被用户和经销商起诉
  18. 重复高斯勒让德法则(gauss-legendre)求积分(python,数值积分)
  19. [Swift]求最大公约数和最小公倍数【用微信查看本文链接可查看到引用图片】
  20. 【网站】数字滚动效果的实现方法

热门文章

  1. 你知道数据中台,但你肯定没听过报表中台,我靠它征服百万数据人
  2. ectouch2.0 php5.5_EcTouch二次开发
  3. 小区广播背景音乐系统IP网络广播解决方案
  4. orange软件:预测模型:逻辑回归
  5. 中国通信简史 (上)
  6. bochs运行xp_bochs模拟器xp系统镜像安装教程及注意事项
  7. 树莓派4b自带wifi_树莓派4B wifi开机启动
  8. wifi无线设备服务器驱动,如何安装Windows 10的WiFi驱动程序
  9. python动漫教程视频_求python的进阶教程视频_python动漫教程视频教程
  10. 【Java架构师入门到精通】java分布式架构有哪些技术