一,安装环境以及安装的软件:
1,CentOS release 6.4 (Final) [IP:192.168.1.110]
2,vsftpd-2.2.2-13.el6_6.1.x86_64
3,pam_mysql-0.7-0.12.rc1.el6.x86_64
4,mysql-5.6.16(编译安装)
二,在数据库上创建登录ftp的账号和密码
1,创建对应的database,远程授权登录账号并创建表用来存储登录ftp账号密码。
mysql>
create
database
vsftpd;
mysql>
grant
select
on
vsftpd.*
to
'vsftpd'
@‘192.168.1.110’ identified
by
'vsftpd'
;
mysql> flush
privileges
;
mysql> use vsftpd;
mysql>
create
table
users (id
int
AUTO_INCREMENT
NOT
NULL
,
name
char
(20)
binary
NOT
NULL
,
password
char
(48)
binary
NOT
NULL
,
primary
key
(id));
2,添加虚拟用户
mysql>
insert
into
users(
name
,
password
)
values
(
'test'
,
password
(
'test'
));
注意:此处对应的加密方法是基于PASSWORD函数加密后存储
三,配置vsftpd
1,创建vsftpd通过PAM模块和mysql认证时所需要的文件:
vim /etc/pam.d/vsftpd.mysql
auth required
/lib64/security/pam_mysql
.so user=vsftpd
passwd
=vsftpd host=192.168.1.110 db=vsftpd table=
users
usercolumn=name passwdcolumn=password crypt=2
account required
/lib64/security/pam_mysql
.so user=vsftpd
passwd
=vsftpd host=192.168.1.110 db=vsftpd table=
users
usercolumn=name passwdcolumn=password crypt=2
此处可能会遇到的问题:
1)pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,,授权一个远程连接的mysql并访问vsftpd数据库的用户会避免此问题出现。
通过查看日志文件/var/log/secure可能出现如下问题:server vsftpd[20453]: pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
2)crypt=Num中 Num=0:表示不加密;Num=1:表示incrypt;Num=2:表示基于mysql的PASSWORD函数;Num=3:表示基于MD5认证。
此处创建虚拟用户时基于PASSWORD函数,所以crypt=2;
否则通过查看日志文件/var/log/secure可能出现如下问题:vsftpd[23068]: pam_mysql - SELECT returned no result. 密码匹配不正确,查询不到结果。
2,修改vsftpd的配置文件,使其适应mysql认证,建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/homeftp vuser
chmod go+rx /var/homeftp #确保属组用户和其他用户对vuser目录有r,x权限
确保/etc/vsftpd.conf中已经启用了以下选项
local_enable=YES #此处必须为YES,否则登录失败
write_enable=YES
chroot_local_user=YES #将用户禁锢在其家目录中
添加以下选项
guest_enable=YES #启用后所有的非匿名登入者都视为guest_username定义的用户登录
guest_username=vuser #虚拟用户通过映射到vuser用户登录
user_config_dir=/etc/vsftpd/vusers_config #虚拟用户的配置文件在此目录下定义
pam_service_name=vsftpd.mysql #pam模块连接mysql时认证文件
3,配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名和虚拟用户的用户名必须相同。配置文件目录可以是任意未使用目录,需要在vsftpd.conf中指定其路径及名称。
1)创建所需要目录,并为虚拟用户提供配置文件
# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch test
2)配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让test用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/test文件,在里面添加anon_upload_enable=YES
选项如下:
anon_upload_enable={YES|NO} #虚拟用户是否具有上传权限
anon_mkdir_write_enable={YES|NO} #虚拟用户是否具有创建权限
anon_other_write_enable={YES|NO} #虚拟用户是否具有除上传,创建之外的其他权限
anon_umask=022 #虚拟用户上传文件权限(文件:666-022)(目录:777-022)
遇到的问题:
因为vsftp默认情况是工作在passive 模式下,连接进去后,敲命令后,出现227 然后卡在那边。
、
这是因为iptables把服务器开发给客户端的端口禁了,可以用passive关闭被动模式,进入主动模式。
还有一种方法就是在vsftpd.conf中增加分配传输数据的随机端口:
pasv_min_port=50000
pasv_max_port=50999
然后增加iptables规则:
iptables -I INPUT 3 -p tcp --dport 50000:50999 -j ACCEPT