CentOS下 Pure-FTPd 配置及错误解决

Pure-FTPd是Linux上的一个开源的FTP服务程序,在易用性、配置性上比vsftp较方便,明月以前的文章【LNMP下无控制面板的Pure-FTPd安装和使用】里专门讲解了在LNMP环境下的安装和使用,但是明月感觉并不是很全n M N u A q面,这次看到的这个 Pure-FTPd 教程就详细了很多,最重要的是里面的“错误解决”很有参考意义,所以明月就当时学习笔记给分b R e L p 3 r $ .享出来。

CentOS下 Pure-FTPd 配置及错误解决

下面我们使J ^ ` } , m用CentOS 7演示安装和配置Pure-FTPd。

使用yum安装Pure-FTPd

  • 安装epel源

yum install epel-release

  • 使用yum命令安装Pure-ftpd

yum instav E y ^ p | - l mlC { p e | h ~ ` ]l pure-ftpd

配置Pure-ftpd

vim /etc/pure-ftpd/pure-ftpd.conf

  • 修改

PAMAuthenticatif 6 | T 6on no

  • 使用PureDB存储E Y 3 ! {号信息,除去前面的注释#

PureDB /etc/puE h I zre-ftpd/pureftpd.pdb

  • 打开ft7 o 9 t p被动模式的端口范围,并确认改端口范围没有被防火墙拦截

P( h 2 Dassive0 y O i 5 / O MPortRange 30000 31000
ForcePassiveIP PASV的外网IP地址

  • 关闭匿名访问权限

AnonymousOnly no

AltLe : U | A 1 A uog clf:/var/log/purefU + w $ 2 l u q utpd.log

  • 限制每个用户只能在自己的目录中

ChrootEveryone yes

添加FTP用户

f) ~ ] Z K u Y 0tptest是虚拟用户,不需要在系统中进行新建

-u -g 后是系统用户账号或者id号,一般使用运行的nginx或, U u @apache的账号iI J z td
-d 是默认的家目录

pure-pw useradd ftptest -u apache -g apache -d /var/www/blog/ftp -m

输入密码...

  • 保存Pure-FTPD用户数据库

pure-pw mkdb

  • 使添加的用户生效

service pure-ftpd start

3 r * f M = i )置mysql管理 p i X & 8 cpure-ftpd用户

vim /etc/pure-ftpd/pure-ftpd.conf

  • 修改pure-ftpd.conf配置文件,去除MySX E e v d A t d 0QLConfigFi/ W A @ l i } w Kle前#

MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
#PureDB /etc/pure-Q B - e +ftpd/pureftpd.pdb

vim /etc/pure-ftpd/pureftpd-mysH ~ G ] @ 4 $ql.conf

MG I K 3 _YSQLServer 你服务器的ip或域名,注意防火墙
MYSQLPort mysql服务器的端口

创建pureftpd数据库,并创建, X + m 6 , * )表,表结构如下,我只使用了账号密码功能,如果需要使用带宽限制、访问限制可使用其他字段,同时要修改pureftpd-mysql.conf的相应配置。

CREATE DATABT k y 1 W Q 9 h RASE ftpdb;
CREATE TABLE users(
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(6- / +4) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL defa` ^ u 4 g } Jult '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
commenz S - 9 ) St tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallintT 4 [ Z 2 }(5) NOT NULL default.  d S F Y X 3 '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMAN Y g h w I rRY K& d O [EY (User),
UNIQUE KEY User (User)
);
INSERT INTO `tp` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`X k : r N b) VALUES ('ftpuser', 0 X 2 & s |'1', MD5('secret'), '2001', '2p v V D Y001', '/home/ftpdir', '0', '0', '', '*', '0', '0'); 

日志文件配置

  1. 建立文件/var/log/pureftpd.log(由于安全机制问题,log文件只能放在/var/log目录下,放到其它地方y U _ w % S不能正常记录)
  2. 修改/etc/rsys1 a G / e ( - $log.E Y l * R % { rconf

在这行的ct m T l f ~ O 7 Qron.none后面添加;ftp.none 使ftp的日志信息成私有

*.inJ s 1 8 ] ~fo;mail.none;authpriv.noE f B q 7 2ne;cron.none /var/log/messages

*.info;mail.none;authpriv.none;c` / ( Zron.none;ftp.none /var/log/messages

  • 在/etc/rsyslog.conf文件最后加上
  • 重启syslogd服务 service rsyslog restart

到现在设置完毕,重启下pure-ftpd,现在在客户端登陆ftp就可以看到日志记录了

rsyslog服务了解http://www.linuxidc.com/Linux$ y g - ( ? D c 4/2017-02/140484.htm

另外:pure-ftpd的配置文件中有对日志选项进配W 7 O V c ^ X M X置项。

=============[pure-ftpd.coY U = 3nf日志选项]=y o 8 B s c==============- : l ] L ] ! t d===========
If you want to log_ P W X / Q all client commands, seti ~ M u e ; * ) 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, uncommentL D y the follE H 5 K q A ] k uowing
line.
如果你想在日志的每一行都添加当前的pure-ftpd的pid,将值设为yes,否则就注释掉
LogPID yes
不启用AltLog选项,保持所有的AltLog的注释状态
AltLog clf:/vaT ~ 8 Z D h ur/log/pureftpd.log

pureftp日志

ftp.* -/var/log/pureftpd.log

注意: 不要去掉/var前面的-号,否则日志会在R u j/var/log/messages 与 /var/log/purefpd.log里各记录一份. 添加了-号,就只会记; j H + : ^ y :录在/var/log/purefptd.log内

常见错误6 t Z [ F = 4 M及解决办法

登录返回 530错误

tail -f /var/l4 6 h $ Wog/message查看错误日志后发现为Authentication failed for usera  W s M ! Z。
该错误是因为账号认证失败导致的,你你没有打开PurO a j K A W j 7 &eDB功能,我使用的是PureDB存储账号密码,你也可以配置mysql存储,打开后需要重启服务器。

使用ftp软件连接成功后,目录读取失败

第一步:pure-ftpdI m ? o Z * U ! k是支持被动模式连E R y $ r接的,被动模式连接方式需要服务端打开一个随机端口,先试试用主动模式是否可以连接,我{ * . , P s e !使用的FileL ~ Izilla软件(一般客户端软G $ =件都支持),如果可以连接一般原因就是服务端的随机端口被防火墙给阻拦掉了。
第二步:cat /proc/sys/net/ipv4/ip_local_port_range该文件2 q { I {,该文件是tcp的预留端口配置a x + 0 H [ N { 6,查看你0 - q W d G s 2设置的端口范围是否在该范围之内,如果在设置u } } b 8 8成其他的
查看配置Passij 7 6 )vePortRange的端口H G e * l k # 0 t范围并配置防火墙通过即可。

日志查看

pure-ftB ] i q S 8 ]pd的访问日志都2 = ! [ : / 在/vF - F 0 B 4 b - }a= g a g ; p 5 g =r/log/pureftpd.log下,上传、下载、删除了某个文件都会记录在该日志里。

ftp主动模式(port0 C N M N q . W `)与被动模式(pasv)

主动模式

主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也Q | 2 0就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1z % x f V } 4 !”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到[ = 2客户端指定的数据端口(N+1)。

被动模式

当开启一个 FTP连接时,客户端打开两个任意的非特权a s 0 a I U本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTPt Y r E .不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交6 - 1 PASV命令。这样做H 7 W的结果是服务器会开启一个任意的非特权端口(P &g- N 7t; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

总结

  • 主动模式:服务器向客户端敲门,然后客户端开门(随) B D A m t +机开个高M y 3 ; R B _ % ?位端口)
  • 被动模式:客户端向服务器敲门,然后服t # r O务器开门(随机开个高位端口,pure-ft^ y 3 k k . N Spd的配置项为PassivePortRange)

优缺点

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被E b 2 c ^ 0 7客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端B A & j ] l的防火墙阻塞掉。

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有 限的端口范围来) : 6 s x k + r h减小服务T : q r [ ` ]器高r s h v 3 3 ( 4 p位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减e ] ; k $ v e q少了危 险。