Chinaunix首页 | 论坛 | 博客
  • 博客访问: 469657
  • 博文数量: 144
  • 博客积分: 5675
  • 博客等级: 大校
  • 技术积分: 1512
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-20 10:46
文章分类

全部博文(144)

文章存档

2014年(1)

2013年(1)

2012年(12)

2011年(39)

2010年(48)

2009年(29)

2008年(14)

我的朋友

分类: 服务器与存储

2012-03-03 14:19:04

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.建立用于虚拟用户的数据库、表,并创建虚拟用户maryjack

(1)登录mysql数据库,注意p和密码之间不能有空格

(2)创建用于存放虚拟用户的数据库vftp

(3)使用vftp数据库

(4)vftp数据库中创建表userifno,包含namepwd两个字段

(5)在表中插入maryjack两条用户的记录,其中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模块。

其下载地址为:

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.lapam_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指定存放虚拟用户的表

usercolumnpasswdcolumn是指定表中存放用户名和密码的字段。

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

使用虚拟用户可以正常访问了,真是好事多磨。

 

设置虚拟用户自己的目录

在配置文件/etc/vsftpd/vsftpd.conf中添加:

virtual_use_local_privs=YES //设定虚拟用户的权限符合他们的宿主用户。 user_config_dir=/etc/vsftpd/vconf //设定虚拟用户个人Vsftp的配置文件存放路径。目录中将存放每个Vsftp虚拟用户的个性配置文件,配置文件名必须和虚拟用户名相同。

建立目录/etc/vsftpd/vconf

建立虚拟用户的FTP用户目录:

local_root=/ftphome/virtuser //指定虚拟用户的具体主路径。 anonymous_enable=NO //设定不允许匿名用户访问。 write_enable=YES //设定允许写操作。 local_umask=022 //设定上传文件权限掩码。 anon_upload_enable=NO //设定不允许匿名用户上传。 anon_mkdir_write_enable=NO //设定不允许匿名用户建立目录。 idle_session_timeout=600 //设定空闲连接超时时间。 data_connection_timeout=120 //设定单次连续传输最大时间。 max_clients=10 //设定并发客户端访问个数。 max_per_ip=5 //设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。 local_max_rate=50000 //设定该用户的最大传输速率,单位b/s。


阅读(1302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~