Pure-FTPd是Linux上的一个开源的FTP服务程序,在易用性、配置性上比vsftp较方便,下面咱们使用centos6演示安装和配置pure-ftpd。mysql
# yum install epel-release
# yum install pure-ftpd
# vim /etc/pure-ftpd/pure-ftpd.conf # 1. 修改 PAMAuthentication no # 2. 使用PureDB存储帐号信息,除去前面的注释# PureDB /etc/pure-ftpd/pureftpd.pdb # 3. 打开ftp被动模式的端口范围,并确认改端口范围没有被防火墙拦截 PassivePortRange 30000 31000 ForcePassiveIP PASV的外网IP地址 # 4. 关闭匿名访问权限 AnonymousOnly no # 5. 打开日志记录功能 AltLog clf:/var/log/pureftpd.log # 6. 限制每一个用户只能在本身的目录中 ChrootEveryone yes
ftptest是虚拟用户,不须要在系统中进行新建
-u -g后是系统用户帐号或者id号,通常使用运行的nginx或apache的帐号id
-d是默认的家目录linux
# pure-pw useradd ftptest -u apache -g apache -d /var/www/blog/ftp -m 输入密码...
# pure-pw mkdb
# service pure-ftpd start
# vim /etc/pure-ftpd/pure-ftpd.conf # 修改pure-ftpd.conf配置文件,去除MySQLConfigFile前# MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf #PureDB /etc/pure-ftpd/pureftpd.pdb # vim /etc/pure-ftpd/pureftpd-mysql.conf MYSQLServer 你服务器的ip或域名,注意防火墙 MYSQLPort mysql服务器的端口
建立pureftpd数据库,并建立表,表结构以下,我只使用了帐号密码功能,若是须要使用带宽限制、访问限制可以使用其余字段,同时要修改pureftpd-mysql.conf的相应配置。nginx
CREATE DATABASE ftpdb; CREATE TABLE users( User varchar(16) NOT NULL default '', status enum('0','1') NOT NULL default '0', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '-1', Gid varchar(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', ULBandwidth smallint(5) NOT NULL default '0', DLBandwidth smallint(5) NOT NULL default '0', comment tinytext NOT NULL, ipaccess varchar(15) NOT NULL default '*', QuotaSize smallint(5) NOT NULL default '0', QuotaFiles int(11) NOT NULL default 0, PRIMARY KEY (User), UNIQUE KEY User (User) ); INSERT INTO `tp` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('ftpuser', '1', MD5('secret'), '2001', '2001', '/home/ftpdir', '0', '0', '', '*', '0', '0');
1)创建文件/var/log/pureftpd.log
(因为安全机制问题,log文件只能放在/var/log目录下,放到其它地方不能正常记录)sql
2)修改/etc/rsyslog.conf
shell
1.在这行的cron.none
后面添加;ftp.none
使ftp的日志信息成私有
*.info;mail.none;authpriv.none;cron.none /var/log/messages
为
*.info;mail.none;authpriv.none;cron.none;ftp.none /var/log/messages
数据库
2.在/etc/rsyslog.conf
文件最后加上
3.重启syslogd
服务 service rsyslog restart
apache
到如今设置完毕,重启下pure-ftpd,如今在客户端登录ftp就能够看到日志记录了vim
rsyslog服务了解 : http://www.linuxidc.com/Linux/2017-02/140484.htmcentos
另外:pure-ftpd的配置文件中有对日志选项进配置项。安全
=============[pure-ftpd.conf日志选项]==========================
If you want to log all client commands, set this to "yes".
This directive can be duplicated to also log server responses.
若是你想记录全部的操做记录,如刷新列表,进入目录的日志等,将值设为yes
VerboseLog no
If you want to add the PID to every logged line, uncomment the following
line.
若是你想在日志的每一行都添加当前的pure-ftpd的pid,将值设为yes,不然就注释掉
LogPID yes
不启用AltLog选项,保持全部的AltLog的注释状态
AltLog clf:/var/log/pureftpd.log
ftp.* -/var/log/pureftpd.log
注意: 不要去掉/var前面的-号,不然日志会在/var/log/messages 与 /var/log/purefpd.log里各记录一份. 添加了-号,就只会记录在/var/log/purefptd.log内
登陆返回 530错误
tail -f /var/log/message查看错误日志后发现为Authentication failed for user。
该错误是由于帐号认证失败致使的,你你没有打开PureDB功能,我使用的是PureDB存储帐号密码,你也能够配置mysql存储,打开后须要重启服务器。
使用ftp软件链接成功后,目录读取失败
第一步:pure-ftpd是支持被动模式链接的,被动模式链接方式须要服务端打开一个随机端口,先试试用主动模式是否能够链接,我使用的Filezilla软件(通常客户端软件都支持),若是能够链接通常缘由就是服务端的随机端口被防火墙给阻拦掉了。
第二步:cat /proc/sys/net/ipv4/ip_local_port_range该文件,该文件是tcp的预留端口配置,查看你设置的端口范围是否在该范围以内,若是在设置成其余的
查看配置PassivePortRange
的端口范围并配置防火墙经过便可。
pure-ftpd的访问日志都在/var/log/pureftpd.log下,上传、下载、删除了某个文件都会记录在该日志里。
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)链接到FTP服务器的命令端口,也就是21端口。而后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它本身的数据端口(20)链接到客户端指定的数据端口(N+1)。
当开启一个 FTP链接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口链接服务器的21端口,但与主动方式的FTP不一样,客户端不会提交PORT命令并容许服务器来回连它的数据端口,而是提交 PASV命令。这样作的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。而后客户端发起从本地端口N+1到服务器的端口P的链接用来传送数据。
主动模式:服务器向客户端敲门,而后客户端开门(随机开个高位端口)
被动模式:客户端向服务器敲门,而后服务器开门(随机开个高位端口,pure-ftpd的配置项为PassivePortRange)
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。由于FTP服务器企图与客户端的高位随机端口创建链接,而这个端口颇有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。由于客户端要与服务器端创建两个链接,其中一个连到一个高位随机端口,而这个端口颇有可能被服务器端的防火墙阻塞掉。
幸运的是,有折衷的办法。既然FTP服务器的管理员须要他们的服务器有最多的客户链接,那么必须得支持被动FTP。咱们能够经过为FTP服务器指定一个有 限的端口范围来减少服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除全部针对服务器的危险,但它大大减小了危 险。