阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS pure-ftpd配置及错误解决

260次阅读
没有评论

共计 4338 个字符,预计需要花费 11 分钟才能阅读完成。

使用 yum 安装 pure-ftpd

Pure-FTPd 是 Linux 上的一个开源的 FTP 服务程序,在易用性、配置性上比 vsftp 较方便,下面我们使用 CentOS 6 演示安装和配置 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 服务器指定一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危 险。

Pureftpd  https://www.linuxidc.com/Linux/2016-11/137619.htm
PureFtp+PureAdmin: 实现基于虚拟账号的 FTP 服务器 https://www.linuxidc.com/Linux/2013-06/85728.htm
PureFtp+PureAdmin 安装配置 https://www.linuxidc.com/Linux/2014-06/103267.htm
Vsftpd 虚拟用户的配置及 PureFtp 配置解析 https://www.linuxidc.com/Linux/2012-12/76502.htm
CentOS7.2 安装 FTP(pure-ftpd-1.0.43)  https://www.linuxidc.com/Linux/2016-10/135971.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4338字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中