Debian Linux下vsftpd+mysql实现虚拟用户

Linux

上次正式提供FTP服务用的是pure-ftpd,本身可以直接用mysql数据进行管理。 后来在网上查了很多资料,用vsftpd其实也是可以实现mysql进行用户管理的,反正闲着也是闲,装一把看看


第一步:

安装vsftpd

#apt-get install vsftpd

第二步:安装mysql
apt-get install mysql-server-5.0
如果你在其他机器上已有mysql数据库,就可以只装mysql-client-5.0了


建立数据库,并添加用户
mysql> create database vsftpd;

mysql> use vsftpd;
mysql> create table users (
-> id int AUTO_INCREMENT NOT NULL,
-> name char(16) binary NOT NULL,
-> passwd char(48) binary NOT NULL,
-> primary key(id)
-> );
mysql> insert into users (name,passwd) values(‘test’,password(‘test’));

建立日志表:
mysql> create table logs (msg varchar(255),
-> user char(16),
-> pid int,
-> host char(32),
-> rhost char(32),
-> logtime timestamp
-> );

第三步:因为vsftpd是通过PAM验证,所以我们还需要一个mysql通过PAM验证的包,在Debian下它叫做libpam-mysql

apt-get install libpam-mysql

然后打开vsftpd的PAM验证:

#vi /etc/pam.d/vsftpd

将以前的内容注释掉,然后加入以下内容(注意:这里只有两行)

auth required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1
account required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1

上面的内容应该能看明白吧,那个crypt=2表示经过mysql的password()机密后的东西!

第四步:修改vsftpd.conf文件

#vi /etc/vsftpd.conf

加入:

guest_enable=YES
guest_username=nobody

#表示nobody为vsftp的虚拟用户

virtual_use_local_privs=YES

#虚拟用户与本地用户有相同的权限

write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES

#允许虚拟用户上传,修改和删除文件

chroot_local_user=YES

#虚拟用户只能访问自己的目录

anonymous_enable=NO
local_enable=YES

#关闭匿名用户访问,开启本地用户访问

第五步:

本来来到第四步已经完成了,可是后来一测试,登陆时居然报错!

500 OOPS: cannot locate user entry:test

汗死,居然找不到本地接口?应该是没有指定虚拟用户的主目录,没办法,又只好再指定一定了

#mkdir /etc/vsftpd_user_conf
#cd /etc/vsftpd_user_conf
#touch test
#echo “local_root=/home/test” >test

然后在vsftpd.conf中加入: user_config_dir=/etc/vsftpd_user_conf

再重启vsftpd,再测试,居然还报错,受不了
500 OOPS: cannot change directory:/nonexistent

原来,我开始设置的用的虚拟用户都是以系统用户 nobody身份操作,而系统给这个用户拽定的home目录却并不存在。
给他改一个home目录,
usermod -d /home/test nobody
或者,给他直接建立一个home目录
mkdir /nonexistent
再登陆测试,果然一切正常

大功告成,你明白了吗?


Leave a Reply