基于MySQL架设FTP服务器

对于FTP服务器,登陆的用户有3类:匿名用户、系统用户和虚拟用户。对于匿名用户和系统用户身份的认证是通过/etc/passwd /etc/shadow来认证的。系统用户是可以直接登陆系统的用户,用户的账号和密码在网络中传输,是明文的,对于系统的安全来说是一个极大的漏洞。而实现虚拟用户的认证在很大程度上加强了安全性。虚拟用户可以有很多个,为了方便管理,mysql数据库就首当其冲了

基于MySQL架设FTP服务器

我们知道在系统用户认证的过程中对权限的控制通过pam_unix.so和/etc/pam.d/system-auth这两个pam模块。同样对于虚拟用户而言,vsftp和mysql的连接也需要用到pam模块即pam_mysql.so ,将登陆vsftpd的账号放在Mysql的表当中。

本文要点:

1、基于mysql的虚拟用户

2、为每个虚拟用户定制权限

3、系统用户和虚拟用户同时可以访问

4、FTP服务器的访问控制

<服务器IP:172.16.20.1  测试机IP172.16.100.150>

一、基于mysql的虚拟用户

#yum -y  install vsftpd  //安装vsfptd服务(可以是编译的也可以是rpm包)


#setenforce 0             //关闭selinux


#tar zxvf  pam_mysql-0.7RC1.tar.gz  


#cd  pam_mysql-0.7RC1  



#./configure --with-mysql=/usr/local/mysql --with-openssl  



#make  


#make install  


//会在这个目录中/lib/security/ 生成一个模块 pam_mysql.so  

2、准备数据库及相关表

建立名为vsftpd的数据库来存放相关虚拟用户的帐号,创建2个虚拟用户magedu,marion

密码分别为12345   RedHat

# id magedu            //保证要创建的虚拟用户不是系统用户
id: magedu: No such user
# id marion
id: marion: No such user


mysql> create database vsftpd;  



mysql> use vsftpd;  




mysql> create table users (  




    -> id int not null auto_increment primary key,    




    -> name char(15) not null unique key,  




    -> password char(48) not null  




    -> );  




mysql> desc users;  



+----------+----------+------+-----+---------+----------------+
| Field    | Type     | Null | Key | Default | Extra          |
+----------+----------+------+-----+---------+----------------+
| id       | int(11)  | NO   | PRI | NULL    | auto_increment |
| name     | char(15) | NO   | UNI | NULL    |                |
| password | char(48) | NO   |     | NULL    |                |
+----------+----------+------+-----+---------+----------------+


//添加测试的虚拟用户,其密码采取加密存放的方式  



mysql> insert into users (name,password) values ('magedu',password('123456')),('marion',password('redhat'));  




mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';  




mysql> grant select on vsftpd.* to [email protected] identified by '123456';  




mysql> flush privileges; 



mysql> select * from users;
+----+--------+-------------------------------------------+
| id | name   | password                                  |
+----+--------+-------------------------------------------+
|  1 | magedu | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | marion | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
+----+--------+-------------------------------------------+

 3、建立pam认证所需文件

#vi /etc/pam.d/vsftpd.my  


//添加如下两行  



auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 




account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

4、修改vsftpd的配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录  


# useradd -s /sbin/nologin -d /var/ftpuser ftpuser       //这个家目录将成为虚拟用户访问ftp目录的起始位置  


# chmod go+rx /var/ftpuser 


 


请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
以上这几项都是默认的,只要添加下面一条即可
chroot_local_user=YES


添加以下选项
pam_service_name=vsftpd.my
userlist_enable=YES
tcp_wrappers=YES


guest_enable=YES
guest_username=ftpuser


#service vsftpd restart

5、测试配置

# ftp localhost  


Connected to localhost (127.0.0.1).  


220 (vsFTPd 2.0.5)  


Name (localhost:root): marion  


331 Please specify the password.  


Password:                            //密码是redhat 


230 Login successful.  


Remote system type is UNIX.  


Using binary mode to transfer files.  



ftp> ls 

相关推荐