使用yum安装pure-ftpd

Pure-FTPd是Linux上的一个开源的FTP服务程序,在易用性、配置性上比vsftp较方便,下面我们使用centos6演示安装和配置pure-ftpd。

安装epel源

# yum install epel-release

使用yum命令安装Pure-ftpd

# yum install pure-ftpd

配置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

添加FTP用户

ftptest是虚拟用户,不需要在系统中进行新建

-u -g后是系统用户账号或者id号,一般使用运行的nginx或apache的账号id

-d是默认的家目录

# pure-pw useradd ftptest -u apache -g apache -d /var/www/blog/ftp -m
输入密码...

保存Pure-FTPD用户数据库

# pure-pw mkdb

使添加的用户生效

# service pure-ftpd start

配置mysql管理pure-ftpd用户

# 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的相应配置。


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目录下,放到其它地方不能正常记录)

2)修改/etc/rsyslog.conf

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

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

rsyslog服务了解 : http://www.linuxidc.com/Linux/2017-02/140484.htm

另外: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

pureftp日志

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

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

常见错误及解决办法

  1. 登录返回 530错误

    tail -f /var/log/message查看错误日志后发现为Authentication failed for user。

    该错误是因为账号认证失败导致的,你你没有打开PureDB功能,我使用的是PureDB存储账号密码,你也可以配置mysql存储,打开后需要重启服务器。

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

    第一步:pure-ftpd是支持被动模式连接的,被动模式连接方式需要服务端打开一个随机端口,先试试用主动模式是否可以连接,我使用的Filezilla软件(一般客户端软件都支持),如果可以连接一般原因就是服务端的随机端口被防火墙给阻拦掉了。

    第二步:cat /proc/sys/net/ipv4/ip_local_port_range该文件,该文件是tcp的预留端口配置,查看你设置的端口范围是否在该范围之内,如果在设置成其他的

    查看配置PassivePortRange的端口范围并配置防火墙通过即可。

日志查看

pure-ftpd的访问日志都在/var/log/pureftpd.log下,上传、下载、删除了某个文件都会记录在该日志里。

ftp主动模式(port)与被动模式(pasv)

主动模式

主动方式的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服务器指定一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危 险。

centos pure-ftpd配置及错误解决的更多相关文章

  1. idea配置SOLServer错误解决记录

    1.错误信息:2019-03-26 13:32:41.205 ERROR 7828 --- [nio-8081-exec-1] c.alibaba.druid.filter.stat.StatFilt ...

  2. Docker在centos下安装以及常见错误解决

    系列目录 Docker安装(使用阿里云镜像) Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收 ...

  3. centos 7 安装vncserver遇到错误解决

    安装网上一般的教程安装配置,略. 执行 systemctl start vncserver@:1.service 启动服务报错: Job for vncserver@:1.service failed ...

  4. Jenkins 配置 Git 错误解决:CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt

    错误信息: Failed to connect to repository : Command "C:/tools/Git/bin/git.exe ls-remote -h https:/X ...

  5. CM5.x配置spark错误解决

    通过cloudera manager 5.x添加spark服务,在创建服务过程中,发现spark服务创建失败,可以通过控制台错误输出看到如下日志信息: + perl -pi -e 's#{{CMF_C ...

  6. potoshop cs6安装配置16错误解决办法(win10系统)

    问题截图如下: 解决方法: 右击图标选择属性:选择兼容性-->兼容模式-->以管理员身份运行-->应用 然后就可以打开了!

  7. CvvImage在高级别的Opencv2.4.11下的配置以及错误解决办法。

    由于高版本的OpenCV2.4.11里取消了CImage(CvvImage),在此我们可以用老的版本替代. 在需要的地方引入 #include "CvvImage.h" 就可以用了 ...

  8. Linux/CentOS 配置Mysql-server过程和遇到错误解决方法

    第一步:下载mysql-server 方法1.wget url(你所要下载的链接,可以从mysq官网查找)到当前目录下 方法2.到mysql官网下载包之后通过xftp传到linux 第二步:解压tar ...

  9. paip.配置ef_unified_filter() failed ext_filter_module mod_ext_filter.so apache 错误解决

    paip.配置ef_unified_filter() failed  ext_filter_module  mod_ext_filter.so apache 错误解决 作者Attilax  艾龙,   ...

随机推荐

  1. [python][odlboy]设置字符串打印的颜色

    格式:\033[显示方式;前景色;背景色m 说明:前景色            背景色           颜色---------------------------------------30    ...

  2. Codeforces Round #765 Div.1 F. Souvenirs 线段树

    题目链接:http://codeforces.com/contest/765/problem/F 题意概述: 给出一个序列,若干组询问,问给出下标区间中两数作差的最小绝对值. 分析: 这个题揭示着数据 ...

  3. OpenCV学习笔记——疑问

    vec3b:表示每一个Vec3b对象中,可以存储3个char(字符型)数据,比如可以用这样的对象,去存储RGB图像中的一个像素点.typedef Vec<uchar, 3> Vec3b; ...

  4. 【分层最短路】Joyride

    http://codeforces.com/gym/101873 C 多开一维状态记录时间,d[i][t] = 经过时间t走到节点i的最小花费 每一个状态分别向"原地等待"与&qu ...

  5. 第二周:Scrum Meeting

    一.站立会议 顾名思义,站立会议即是在敏捷开发的冲刺阶段,为了更好地平衡团队成员的“交流”和“集中注意力”之间的矛盾.通过每日例会,即团队成员通过面对面的交流,并且其中大多数团队成员站着对会议进行讨论 ...

  6. CentOS6.5 重启网络报错:Bringing up interface eth0: Error: Connection activation failed: Device not managed by NetworkManager or unavailable

    CentOS6.5 重启网络报错: Bringing up interface eth0: Error: Connection activation failed: Device not manage ...

  7. js动态显示指定的时间

    <p id="timeShow">17:0:50</p> <script> setInterval("time()", 10 ...

  8. php奇葩错误:htmlspecialchars处理中文丢失

    $value = "中文中文"; $res = htmlspecialchars($value); 经过这个函数处理之后,$res就直接变成了空的字符串. 奇葩错误啊!后来发现要这 ...

  9. UserAgent 设置 php 抓取网页

    转载:http://www.webkaka.com/tutorial/php/2013/111846/ hp抓取网页,可谓轻而易举,几行代码就可以搞定.不过,如果你有所疏忽,程序写得不够严密,就会出现 ...

  10. JVM初识、调优

    JVM是按照运行时数据的存储结构来划分内存结构的,JVM在运行java时,将他们划分成几种不同格式的数据,分别存储在不同的区域,这些数据统一称为运行时数据,运行时数据包括java程序本身的数据信息和J ...