RHEL6____VSFTPD服务器配置之一
——使用mysql实现虚拟用户的访问
VSFTPD是一个很是优秀的FTP服务程序,不少大的站点都在使用,其中支持虚拟用户是vsftpd的一个特性,VSFTPD支持将用户和密码保存在本地数据文件、MYSQL数据库以及LDAP目录服务中,若是在企业中管理的用户数量比较多或者用户变化比较频繁时,建议使用mysql来实现虚拟用户的认证。
下面我在rhel6上来实现如下功能,具体步骤以下:
1、安装vsftpd并设置开机自动启动
yum -y install vsftpd
chkconfig vsftpd on
2.安装mysql数据库
yum -y install mysql-devel mysql-server
3.启动mysql服务并设置开机自动启动
service mysqld start
chkconfig mysqld on
4.设置mysql的管理员密码,本例密码设置为xiaofeixia
mysqladmin -u root password xiaofeixia
5.创建用于虚拟用户的数据库、表,并建立虚拟用户mary和jack
(2)建立用于存放虚拟用户的数据库vftp
(3)使用vftp数据库
(4)在vftp数据库中建立表userifno,包含name和pwd两个字段
(5)在表中插入mary和jack两条用户的记录,其中123456为密码
(6)查询用户信息
6.在mysql中建立一个专门用于读取数据库中虚拟用户信息的用户(ftpuser),这样作的目的主要是基于安全的考虑。
mysql> grant select on vftp.userinfo to ftpuser@localhost identified by 'xiaofeixia';
mysql> flush privileges;
7. 测试ftpuser是否能够正常查询数据库信息
8.建立本地映射用户,并修改其家目录的权限
useradd -d /var/ftp/guest -s /sbin/nologin guest
注: -d 指定家目录的位置
-s 指定用户登陆的shell,若是为用户分配的shell是/sbin/nologin,则该用户是不能登陆到系统的。
chmod o+rw /var/ftp/guest
9.编辑/etc/vsftpd/vsftpd.conf,添加如下两句,用于启用虚拟帐号,并禁用匿名帐号
guest_enable=yes
guest_username=guest
anonymous_enable=no
10.安装支持mysql认证的PAM模块。
其下载地址为:http://sourceforge.net/projects/pam-mysql/files/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz/download
tar xvzf pam_mysql-0.7RC1.tar.gz -C /usr/src
cd /usr/src/pam_mysql-0.7RC1/
./configure
make
make install
注:若是在./configure的过程当中出现如下错误
configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.
建议安装pam-devle软件包
yum -y install pam-devel
安装完以后,相应的库文件被安装在/lib/security目录中。
Libraries have been installed in:
/lib/security
注:因为个人系统是64位的,相应的pam认证库文件是放在/lib64/security目录中,因此我把对pam_mysql.la和pam_mysql.so作了一个软连接,其实这一步大可不作,只要你在pam文件中指定正确的位置便可
11.编辑pam认证文件/etc/pam.d/vsftpd,将原有的内容注释并添加如下两行内容以使用mysql认证
auth required pam_mysql.so user=ftpuser passwd=xiaofeixia host=localhost db=vftp table=userinfo usercolumn=name passwdcolumn=pwd crypt=0
account required pam_mysql.so user=ftpuser passwd=xiaofeixia host=localhost db=vftp table=userinfo usercolumn=name passwdcolumn=pwd crypt=0
其中user 是读取mysql数据库时使用的用户名,passwd 为其对应的密码
host指定mysql数据库所在的主机
db指定存放虚拟用户的数据库,在以上作了定义
table指定存放虚拟用户的表
usercolumn、passwdcolumn是指定表中存放用户名和密码的字段。
crypt指定密码字段是以什么方式存储到数据库中
(1)crypt=0表示以明文保存密码
(2)crypt=1表示使用crypt( )函数加密保存密码
(3)crypt=2表示使用mysql中的password( )函数加密保存密码
(4)crypt=3表示使用md5的方式保存密码
12.启动ftp服务器
service vsftpd start
13. 在客户端测试
如图全部没有任何反应,怀疑多是开启了iptables防火墙,如 下图所示,真是防火墙在捣的鬼。
怎么办呢?要么使用iptables –F 把防火墙默认规则清空,但不推荐,建议在INPUT链上插入一条规则
iptables -I INPUT 2 -p tcp - -dport 21 -j ACCEPT
再次尝试访问,能够输入用户名和密码,但却登陆失败,以下图
难道是我以上的配置出错了,检查以后发现并无什么问题,百思不得其解,后来忽然想到多是默认开启了selinux的缘由,好好检查一下
[root@mail ~]# getenforce
Enforcing
发现SELinux是开启的。
把SELinux的模式设置为permissive模式再试试。发现能够正常登陆
[root@mail ~]# setenforce 0
[root@mail ~]# getenforce
Permissive
经过以上判断能够认为是selinux在影响咱们的正常访问,查看相关日志以下
经过日志咱们知道了原来selinux策略阻止了对mysql数据库的访问,找到症结了那问题解决就变是容易起来了,使用下面命令容许ftp 服务器使用mysql认证
[root@mail security]# setsebool -P ftpd_connect_db 1
再把selinux模式设置为enforce状态
[root@mail security]# setenforce 1
使用虚拟用户能够正常访问了,真是好事多磨。
其实写下此文的目的是帮助本身作个总结,同时也但愿此文对你们有所帮助,若有不当之处,还请你们多多指正。