使用vsftp基于mysql搭建ftp服务器

一、FTP服务器

   FTP,File Transfer Protocol 文件传输协议,FTP协议是一种古老的协议,它出现的比HTTP协议还要早,FTP主要应用于网络空间数据交换操作。ftp在工作时会有两个连接:一是命令连接,这个连接始终存在,只有使用bye命令退出会话时,连接才会断开;二是数据连接,数据传输完成,连接即断开。ftp有两种工作模式,主动模式和被动模式,主动模式工作在tcp/20端口,而被动模式则工作在tcp协议下的随机端口。通常FTP在身份认证时工作在21号端口。

   在红帽系统下,vsftp是一款相对安全的FTP软件,在生产环境下可以使用它快速的实现FTP服务器的搭建。vsftp的用户认证支持两类用户,一是系统用户,二是虚拟用户。系统用户故名思义,就是使用系统上的普通用户作为FTP用户,这种方式操作相对简单。而虚拟用户则是使用一个系统用户映射成所有虚拟用户,访问时的文件目录是为此系统用户家目录。虚拟用户的用户帐号信息的存储分两种方式,一是将用户信息保存于一个hash编码的文件,奇数行为用户名,偶数行为密码;二是,存储于关系型数据库。我们知道,系统上几乎所有的和帐号认证有关的操作都是通过系统的pam模块负责管理,vsftp也不例外,我们使用mysql管理vsftp的帐号密码信息,则可以使用pam的mysql模块。pam默认不支持mysql数据库,因此在使用前需要安装此模块。


二、FTP服务器实现

1、安装软件

# yum -y install vsftpd mysql-server mysql-devel pam_mysql

使用vsftp基于mysql搭建ftp服务器


使用vsftp基于mysql搭建ftp服务器


2、创建数据库

mysql> create database vsftpd;
mysql> grant all on vsftpd.* to ‘vsftpuser‘@‘localhost‘ identified by ‘vsftppass‘;
mysql> grant all on vsftpd.* to ‘vsftpuser‘@‘127.0.0.1‘ identified by ‘vsftppass‘;
mysql> grant all on vsftpd.* to ‘vsftpuser‘@‘172.16.36.1‘ identified by ‘vsftppass‘;
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)
    -> );

使用vsftp基于mysql搭建ftp服务器


2、创建vsftp虚拟用户

insert into users(name,password) values(‘wu‘,password(‘wu‘));
insert into users(name,password) values(‘json‘,md5(‘json‘));

使用vsftp基于mysql搭建ftp服务器


3、建立pam认证所需文件

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

添加如下两行:

auth required /lib64/security/pam_mysql.so user=vsftpuser passwd=vsftppass host=172.16.36.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=3
account required /lib64/security/pam_mysql.so user=vsftpuser passwd=vsftppass host=172.16.36.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=3

user: 数据库用户名

passwd: 数据库用户密码

host: 为数据库主机IP地址,如果是编译安装的数据库,只能填写远程IP地址,并给把这个IP地址授权给用户

db: 数据库名

table: 表名

usercolumn: 用户字段名

passwdcolumn: 用户密码字段名

crypt: 密码保存方式,0为明文,1为encrypt函数加密,2为password函数加密,3为MD5加密


注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。


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

# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot


5、请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项

anonymous_enable=NO   #禁止匿名用户登录
local_enable=YES      #允许本地用户登录
write_enable=YES      #本地用户有写权限
anon_upload_enable=NO #匿名用户没有上传权限
anon_mkdir_write_enable=NO #匿名用户没有创建权限
chroot_local_user=YES #禁锢用户家目录

而后添加以下选项

guest_enable=YES
guest_username=vuser

并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql


6、重新启动服务,测试一下。

service vsftpd restart

打开CMD程序远程测试一下:

使用vsftp基于mysql搭建ftp服务器


两个帐号都能成功登录!


二、通过web管理VSFTP

   使用mysql管理vsftp用户的一个好处是,当服务器数据迁移时,只要把相关的数据库打包备份导入新的数据库就行了,管理相当方便。如果本机上有web服务器的话,我们还可以使用PHP开发一个web界面专门用来管理vsftp。

例如:我们新建一个虚拟主机:

<VirtualHost *:80>
    DocumentRoot "/var/www/html/vsftpadmin"
    ServerName ftpadmin.wubinary.com
    ServerAlias ftpadmin.wubinary.com
    ErrorLog "logs/ftpadmin.wubinary.com.error_log"
    CustomLog "logs/ftpadmin.wubinary.com.access_log" common
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/vsftpadmin/$1
    <Directory "/var/www/html/vsftpadmin">
      Options None
      AllowOverride AuthConfig
      AuthType Basic
      AuthName "Vsftp Admin"
      AuthUserFile /etc/httpd/extra/.htpasswd
      Require valid-user
    </Directory>
</VirtualHost>

对这个域名作身份认证,或者使用其它的方式对用户进行限制,用PHP写一个管理页面放在相关的目录下,我们就可以在web界面下管理我们的FTP服务器帐号了。

使用vsftp基于mysql搭建ftp服务器


使用vsftp基于mysql搭建ftp服务器


整个FTP服务器的搭建工作到此就完成了。

由于这个web管理界面代码没有写全,我就不贴出了。。










使用vsftp基于mysql搭建ftp服务器,布布扣,bubuko.com

使用vsftp基于mysql搭建ftp服务器

上一篇:大数据|| 分布式协作服务框架Zookeeper分布式安装部署


下一篇:如何判断Oracle中某个字段的值是否重复