|
一,安装环境以及安装的软件:
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账号密码。
1
2
3
4
5
6
| 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,添加虚拟用户
1
| mysql> insert into users(name,password) values('test',password('test'));
|
注意:此处对应的加密方法是基于PASSWORD函数加密后存储
三,配置vsftpd
1,创建vsftpd通过PAM模块和mysql认证时所需要的文件:
vim /etc/pam.d/vsftpd.mysql
添加:
1
2
| 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)
|
|