编译安装 vsftpd + pam-mysql 管理虚拟用户 

鉴于pureftpd最近不稳定的发布新版本,我觉得应该更换一个更加安全的ftp服务端。

于是,vsftpd 出现了。之所以选择它是因为

1.它的名字比较安全 2.像 openbsd.org,redhat,gnu.org等都在用它,应该错不了.

于是下载了vsftpd最新版本 2.2.2.解压

编译vsftpd是一件很easy的事情,因为作者Chris已经提供了现成的makefile了,不存在依赖问题了,你只要make一下即可.

不过在编译之前,你得根据自己的需求,编辑一下builddefs.h文件,把你需要编译进来的功能定义进来。就是把#undef 改成 #define 即可(切忌不要和我一样想当然,认为是把前面的"#"删掉... 囧rz)

比如我待会要用到pam验证,所以改成 #define VSF_BUILD_PAM。

接下来make install,完了之后把需要的配置文件(源码提供的配置样式)拷过来.


cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf /etc
cp RedHat/vsftpd.pam /etc/pam.d/ftp

vsftpd.conf 的具体配置可以参见官方提供的doc:
http://vsftpd.beasts.org/vsftpd_conf.html

现在敲命令"vsftpd &",已经可以正常启动vsftpd了,只不过login failure罢了,因为没有用户.

至此看来,vsftpd的确是比pureftpd方便,不过现在的认为是大错特错了。
因为pureftpd 自带了与时下流行的跨平台数据库,如mysql、postgresql、oracle等的桥接.
只要编译时带个 --with-mysql 之类的参数,而后再编辑一个pureftpd-mysql.conf就可以了.

但是vsftpd却是通过pam去验证用户的.
首先安装pam-devel(我已经有了).
yum install pam-devel 即可.

下载pam-mysql源码,解压
我的configure:

It was created by pam_mysql configure 0.7RC1, which was
generated by GNU Autoconf 2.59. Invocation command line was

$ ./configure --prefix=/usr/local/pam --with-mysql=/usr/local/mysql

完成后, ls -l /lib/security/ ,看看有没有 pam_mysql.so 文件.

而后编辑之前拷来的 /etc/pam.d/ftp 文件,
"#"注掉里面所有内容,加入

auth required pam_mysql.so user=USER passwd=PASSWD host=localhost db=DATABASE table=TABLE usercolumn=USERNAME passwdcolumn=PASSWORD crypt=2

account required pam_mysql.so user=USER passwd=PASSWD host=localhost db=DATABASE table=TABLE usercolumn=USERNAME passwdcolumn=PASSWORD crypt=2

这些都是指定哪个用户,密码是什么,它通过pam-mysql去查询哪个数据库的哪张表的哪些字段,ftp用户的用户名和密码对应的哪两个字段等.
当然,这些数据库,表都得事先建好.并给你指定的用户授权一下。
大写内容如 USER 等根据实际更改.crypt=2 表示用mysql自带的PASSWORD()函数加密, 0 表示明文存放.

此时编辑 /etc/vsftpd.conf,找到pam_service_name=字段(没有就自己加),赋值给刚刚修改pam的文件名 vsftpd.

之后重启vsftpd,按照你数据里面插入的用户数据便可成功登录ftp.

PS:在建用户表的时候,密码字段(varchar)一定要设置长一点,我当时就是设了40,谁知道mysql PASSWORD()函数加密后有50位,害得我总是登录不了。郁闷了好长时间.

vsftpd的确是一个很强大的ftp服务端,只要你配置vsftpd.conf得当,它的能力是不可估量的。
具体配置可以参见官方提供的doc:
http://vsftpd.beasts.org/vsftpd_conf.html

评论