Linux/UNIX下ftp服务器种类繁多,比如vsftp,wu-ftp,proftp,pure-ftp,最常用的,大概就这几种,不过,对比来对比去,vsftp是最简单的,如果是做一个提供外网可以直接匿名访问下载的服务器,vsftp最适合,wu-ftp因为经常爆出漏洞,所以,已经逐渐不被推荐,p
Linux/UNIX下ftp服务器种类繁多,比如vsftp,wu-ftp, proftp,
pure-ftp,最常用的,大概就这几种,不过,对比来对比去,vsftp是最简单的,如果是做一个提供外网可以直接匿名访问下载的服务器,vsftp最适合,wu-ftp因为经常爆出漏洞,所以,已经逐渐不被推荐,pure-ftp应该是功能最强大的,可惜这个服务器有乱码问题,而且还不是很好解决,现在pure-ftp基本上已经停止UNIX版本的更新了,proftp发展的势头比较好,功能上和pure-ftp不相上下,和pure-ftp一样,proftp也支持
mysql数据库来校验用户账户,成为搭建一个用户数比较多的ftp服务器首选,按照基本的搭建方法来阐述一个搭建proftp的过程。
proftp官方最新版本:1.3.3e,对于FreeBSD,可以先通过ports升级一下,port到最新版本:cvsup -g
-L 2 ports-supfile ,然后make install
clean,CentOS或Debian可以下载源码编译安装,也可以通过yum -y install/apt-get install
proftpd来安装,如果由源码编译安装,默认没有启动脚本,需要自己写,这个比较麻烦,所以最好用系统安装软件的办法来安装。
配置:首选是能保证proftp正常工作,启动:/usr/local/etc/rc.d/proftpd
start,Linux系统:/etc/init.d/proftpd start,如果没有启动脚本也可以直接通过
/usr/local/sbin/proftpd,Linux:/usr/sbin/proftpd 启动。
并使用系统的帐号登录,如果登录正常。则可以开始配置mysql。
基本数据库:
# proftp 数据库
CREATE DATABASE IF NOT EXISTS proftp CHARACTER SET UTF8 COLLATE utf8_general_ci;
USE proftp;
#
# 创建 用户组和用户,用来虚拟ftp用户组
#
# Table structure for table `ftpgroup`
#
CREATE TABLE IF NOT EXISTS ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE IF NOT EXISTS ftpquotalimits (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail int(10) unsigned NOT NULL default '0',
bytes_out_avail int(10) unsigned NOT NULL default '0',
bytes_xfer_avail int(10) unsigned NOT NULL default '0',
files_in_avail int(10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE IF NOT EXISTS ftpquotatallies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used int(10) unsigned NOT NULL default '0',
bytes_out_used int(10) unsigned NOT NULL default '0',
bytes_xfer_used int(10) unsigned NOT NULL default '0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE IF NOT EXISTS ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';
# quit;
# 插入sql的语句部分,插入一个用户,然后测试,用户名密码都为test
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 5501, 'ftpuser');
INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('jesse', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (10001, 'test', 'test', 5501, 5501, '/var/ftproot/10001', '/sbin/nologin', 0, '2011-05-03 16:08:36', '2011-05-03 16:08:54');
现在,修改配置文件,不过,在这之前,最好是停止proftp的运行,/etc/init.d/proftpd stop
,然后打开debug模式运行,这样,可以很直观的看到ftp配置问题。
# FreeBSD
/usr/local/sbin/proftpd -n -d 20
# Linux
/usr/sbin/proftpd -n -d 20
开启MySQL支持:
对于最新版本,在安装的时候会同时安装上 mysql模块,如果你是手动编译安装,编译的时候,记得加上mysql模块支持:
确认mysql 库位置,里面有很多.a结尾的文件,比如 libmysqld.a:
/usr/lib/mysql/
确认mysql 头文件 mysql.h 的位置:
/usr/include/mysql/mysql.h
./configure \
--with-modules=mod_sql:mod_sql_mysql \
--with-includes=/usr/include/mysql \
--with-libraries=/usr/lib/mysql
make & make install
如果是用ports或deb或rpm安装,则默认就是安装上mysql模块的,现在看看如何启用,
如果是最新的1.3以后的版本,应该是没有
modules.conf这个文件,如果有的话,开启里面的mysql模块,即去掉前面的#号注释:如果是最新版本,则无须使用
LoadModule指令加载 mysql ,默认已经集成到一起。
# 启用 mysql
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
# 启用 mysql
现在根据你的系统,新建一个
proftpd-mysql.conf的空文件,路径可以随意,按照通常的配置,一般配置文件路径是,FreeBSD在/usr/local/etc/目录下,Linux在
/etc/目录下,在 proftpd.conf 文件里添加一行代码,引进mysql 配置:
#FreeBSD
Include /usr/local/etc/proftpd-mysql.conf
#Linux
Include /etc/proftpd-mysql.conf
这个文件的位置可以任意,但Include一定要修改成你自己的配置路径。
# proftpd-mysql.conf ,这个文件内,除了数据库配置文件那一行需要修改,
# 其他直接拷贝即可。文件内容如下:
RootLogin off
RequireValidShell off
DefaultRoot ~
IdentLookups off
UseReverseDns off
CreateHome on
# 强制使用 mysql 验证登录用户
SQLBackend mysql
# sql数据库中,密码加密的类型,这里我以明文存储,所以是 Plaintext,其他加密方法可参考官方文档
SQLAuthTypes Plaintext
# 注意,老版本的配置文件里有 SQLAuthenticate users* groups* ,新版本已经没有这个指令了
# 取代的是用 AuthOrder 这个指令,指定以mysql为唯一校验方法。
AuthOrder mod_sql.c
# 连接数据库的字符串格式,记住这里,修改成你的数据配置,
# databasename@host database_user user_password
SQLConnectInfo proftp@localhost proftpd proftpd_pwd
# 指定使用的列,不需要修改。
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# 记录用户登录次数
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
# 记录用户上传或删除文件的时间。
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
好,现在打开 debug模式,测试是否连接正常,我在这个过程中遇到很多 421 Service not available
错误,打开debug后,发现有些是应为数据连接不上,有些则是因为目录不存在引起的,总之,正常配置后,不会遇到很多问题,debug的信息还算够用的,调试完毕后,可以关闭proftp调试模式,加入开机启动,中文用户名登录暂未测试,可能会有问题,最好用英文。