fgew2 发表于 2015-4-17 09:12:47

Centos6下vsftpd基于mysql认证创建虚拟用户

一,安装环境以及安装的软件:1,CentOS release 6.4 (Final) 2,vsftpd-2.2.2-13.el6_6.1.x86_643,pam_mysql-0.7-0.12.rc1.el6.x86_644,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函数加密后存储
三,配置vsftpd1,创建vsftpd通过PAM模块和mysql认证时所需要的文件:
vim /etc/pam.d/vsftpd.mysqlauth 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: 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: pam_mysql - SELECT returned no result. 密码匹配不正确,查询不到结果。
2,修改vsftpd的配置文件,使其适应mysql认证,建立虚拟用户映射的系统用户及对应的目录useradd -s /sbin/nologin -d /var/homeftp vuserchmod go+rx /var/homeftp   #确保属组用户和其他用户对vuser目录有r,x权限确保/etc/vsftpd.conf中已经启用了以下选项
local_enable=YES                           #此处必须为YES,否则登录失败write_enable=YESchroot_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 test2)配置虚拟用户的访问权限
    虚拟用户对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=50000pasv_max_port=50999然后增加iptables规则:
iptables -I INPUT 3 -p tcp--dport 50000:50999 -j ACCEPT

页: [1]
查看完整版本: Centos6下vsftpd基于mysql认证创建虚拟用户