按照以往的配置,今天早上又配了一台仅允许虚拟用户登录的ftp
配置好之后,却发现无论如何虚拟用户都无法验证通过,反倒是系统用户可以。

既然是与验证相关,问题肯定出在pam.d相关联的地方,初步的估计是vsftp没有调用pam方式来验证虚拟用户。问题是已经解决了,现将解决办法以及可能用到的其它解决办法一并写出。

本次的环境是
AS4 update3
vsftp 2.0.5 源码

用命令 ldd vsftpd 检查发现
# ldd vsftpd
       libdl.so.2 => /lib/libdl.so.2 (0x00686000)
       libnsl.so.1 => /lib/libnsl.so.1 (0x05fb6000)
       libresolv.so.2 => /lib/libresolv.so.2 (0x008fe000)
       libutil.so.1 => /lib/libutil.so.1 (0x00af9000)
       libcap.so.1 => /lib/libcap.so.1 (0x00111000)
       libc.so.6 => /lib/tls/libc.so.6 (0x0055b000)
       /lib/ld-linux.so.2 (0x00542000)

没有调用到/lib/libpam.so.0 原因在于系统中缺少pam-devel这个工具,该工具在安装盘的第二张中有(应该是第二张)

安装一下
# rpm -ivh pam-devel-0.77-65.1.i386.rpm

然后 make clean;make
然后重新用ldd vsftpd来检查一下
# ldd vsftpd
       libpam.so.0 => /lib/libpam.so.0 (0x00aac000)
       libdl.so.2 => /lib/libdl.so.2 (0x00686000)
       libnsl.so.1 => /lib/libnsl.so.1 (0x05fb6000)
       libresolv.so.2 => /lib/libresolv.so.2 (0x008fe000)
       libutil.so.1 => /lib/libutil.so.1 (0x00af9000)
       libcap.so.1 => /lib/libcap.so.1 (0x00111000)
       libc.so.6 => /lib/tls/libc.so.6 (0x0055b000)
       /lib/ld-linux.so.2 (0x00542000)

使用新生成的vsftpd来运行,应该就可以了,当然,前提是其它方面都配置正确。
另外可能的一个原因是,据说,在一些比较旧的版本中,默认不支持pam方式的验证
在原文件 builddefs.h 中存在这么一行
#define VSF_BUILD_PAM  //这是支持pam方式
如果是
#undef VSF_BUILD_PAM  //这是不支持pam方式,改成上面那行就行了
这个我自己没有验证过,听说而已,一并写上,以供参考。
Tags:
vsftp | 评论(0) | 引用(0) | 阅读(1444)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 请输入左侧的字母,不区分大小写