pure-ftpd安装与使用(转载)

一、摘要

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

目前 FTP 软件有很多,但总体上分为 FTP Client 客户端 和 FTP Server 服务端,其中 PureFTPd 是一款专注于程序健壮和软件安全的免费 FTP 服务器软件(基于 BSD License)。其可以在多种类Unix操作系统中编译运行,包括 Linux、OpenBSD、NetBSD、FreeBSD、DragonFly BSD、Solaris、Tru64、Darwin、Irix and HP-UX。PureFTPd 还有 Android 移植版本。

二、下载并安装 Pure-ftpd

可以使用 yum 安装或者源码包安装,源码包安装的优点是可以自由选择安装的软件版本,yum 安装时仓库的版本一般都是固定的某一个版本,无法自由选择。

2.1 yum 安装

默认的 yum 源没有提供 pure-ftpd,需要先安装 epel 扩展源:

# yum install epel-release

然后使用 yum 命令安装Pure-ftpd:

# yum install pure-ftpd

2.2 源码包安装

访问 pure-ftpd 官方网站:

https://download.pureftpd.org/pub/pure-ftpd/releases/,当前最新版本为 1.0.47。

进入到要下载的目录:

[root@ryan plugins]# cd /usr/local/src

使用 wget 下载源码包:

[root@ryan src]# wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.47.tar.gz

解压:

[root@ryan src]# tar zxvf pure-ftpd-1.0.47.tar.gz

进入解压后的目录:

[root@ryan src]# cd pure-ftpd-1.0.47

通过设置不同的参数,定制相应的功能,生成 Makefile 文件:

[root@ryan pure-ftpd-1.0.47]# ./configure \
--prefix=/usr/local/pureftpd \
--without-inetd \
--with-altlog \
--with-puredb \
--with-throttling \
--with-peruserlimits \
--with-tls

注意:

我们在这里可能会遇到错误,在配置之后系统会提示:configure: error: OpenSSL headers not found.

解决方法是:

yum install -y openssl openssl-devel,如果找不到这两个包,则需要安装 yum 的扩展源:yum install -y epel-release

注意:不要随意修改域名解析文件 /etc/resolv.conf,否则可能导致 yum 源地址无法解析,而出现 [Errno 256] No more mirrors to try 。

/etc/resolv.conf 是 DNS 客户机配置文件,用于设置 DNS 服务器的 IP 地址及 DNS 域名,还包含了主机的域名搜索顺序。该文件是由域名解析 器(resolver,一个根据主机名解析IP地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。

成功后出现如下所示:

 

编译并安装:

[root@ryan pure-ftpd-1.0.47]# make && make install

验证上一步是否执行成功:

[root@ryan pure-ftpd-1.0.47]# echo $?
0

这里返回值是"0"说明执行成功,否则就是没有成功。

2.3 修改配置文件

/usr/local/pureftpd/etc/pure-ftpd.conf

 

vim /usr/local/pureftpd/etc/pure-ftpd.conf

ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous no
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
PureDB /usr/local/pureftpd/etc/pureftpd.pdb
LimitRecursion 10000 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 100
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
PIDFile /usr/local/pureftpd/var/run/pure-ftpd.pid
MaxDiskUsage 99
CustomerProof yes

 

 

 

 

1、pure-ftpd.conf配置文件说明
参数 说明
ChrootEveryone yes 启用chroot,限制所有用户在其主目录中
BrokenClientsCompatibility yes 兼容不同客户端。
Daemonize yes 后台运行。
MaxClientsPerIP 20 每个ip最大连接数。
VerboseLog yes 记录日志。
DisplayDotFiles no 显示隐藏文件。
AnonymousOnly no 只允许匿名用户访问。
NoAnonymous yes 不允许匿名用户连接。
SyslogFacility none 不将日志在syslog日志中显示。
DontResolve yes 不进行客户端DNS解析。
MaxIdleTime 15 最大空闲时间。
LimitRecursion 2000 8 浏览限制,文件2000,目录8层。
AnonymousCanCreateDirs no 匿名用户可以创建目录。
MaxLoad 4 超出负载后禁止下载。
PassivePortRange 45000 50000 被动模式端口范围。
AnonymousRatio 1 10 匿名用户上传/下载比率。
UserRatio 1 10 所有用户上传/下载比率。
AntiWarez yes 禁止下载匿名用户上传但未经验证的文件。
AnonymousBandwidth 200 匿名用户带宽限制(KB)。
UserBandwidth 8 所有用户最大带宽(KB)。
Umask 133:022 创建文件/目录默认掩码。
MinUID 100 最大UID限制。
AllowUserFXP no 仅运行用户进行FXP传输。
AllowAnonymousFXP no 对匿名用户和非匿名用户允许进行匿名 FXP 传输。
ProhibitDotFilesWrite no 不能删除/写入隐藏文件。
ProhibitDotFilesRead no 禁止读取隐藏文件。
AutoRename yes 有同名文件时自动重新命名。
AnonymousCantUpload yes 不允许匿名用户上传文件。
AltLog clf:/var/log/pureftpd.log clf 格式日志文件位置。
LDAPConfigFile /etc/pureftpd-ldap.conf LDAP 配置文件
MySQLConfigFile /etc/pureftpd-mysql.conf MySQL 配置文件 (参考 README.MySQL)
PGSQLConfigFile /etc/pureftpd-pgsql.conf Postgres 配置文件 (参考 README.PGSQL)
PureDB /etc/pure-ftpd/pureftpd.pdb 用户数据库文件。
MaxDiskUsage 99 当磁盘使用量打到99%时禁止上传。
CreateHomeDir yes 如果虚拟用户的目录不存在则自动创建。
CustomerProof yes 防止命令误操作。
LogPID yes 如果你要为日志每一行添加 PID 去掉下面行的注释。
NoChmod yes 不接受 CHMOD 命令。用户不能更改他们文件的属性。
KeepAllFiles yes 允许用户恢复和上传文件,却不允许删除他们。
2、pure-pw常用命令
pure-pw --help 获取命令帮助
pure-pw mkdb 创建用户信息数据库
pure-pw useradd 增加一个虚用户
pure-pw usermod 修改用户信息
pure-pw userdel 删除一个虚用户
pure-pw passwd 修改用户密码
三、使用 pure-ftpd

启动 pure-ftpd:

[root@ryan pure-ftpd-1.0.47]# /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf

创建系统用户:

useradd wordpress-ftp

更改所属主和所属组:

chown -R wordpress-ftp:wordpress-ftp /opt/lampp/htdocs/wordpress

创建ftp用户,注意ftp用户是虚拟用户。

/usr/local/pureftpd/bin/pure-pw useradd ftp_wordpress -u wordpress-ftp -d /opt/lampp/htdocs/wordpress

此时会出现为该ftp新用户创建密码的提示:

Password:xxxxxx
Enter it again:xxxxxx

其中,-u选项将虚拟用户ftp_wordpress与系统用户wordpress-ftp关联在一起,即使用ftp_wordpress账号登录FTP后,会以wordpress-ftp的身份来读取和下载文件,-d选项后面的目录为ftp_wordpress账户的家目录,这样可以使ftp_wordpress只能访问其家目录/opt/lampp/htdocs/wordpress

创建用户信息数据库文件:

/usr/local/pureftpd/bin/pure-pw mkdb

 

 

查看用户列表:

/usr/local/pureftpd/bin/pure-pw list

显示如下:

ftp_wordpress /opt/lampp/htdocs/wordpress/./

删除账号的命令为:

/usr/local/pureftpd/bin/pure-pw userdel ftp_wordpress

四、配置服务器段安全组规则

由于本人使用的是阿里云的 ECS 服务器,服务器默认不开放 FTP 的 21 端口,自己在安全组规则中添加放行相应端口,由于在使用 FTP 过程中不仅仅会用到 21 端口,可能还会用到其他端口,所以此处我们放行 20/21,1024/65535,如下:

 

五、本地使用 FTP 客户端测试

FTP 客户端工具也有很多,个人比较喜欢 FileZilla,中文版下载地址:https://www.filezilla.cn/

但是自己在连接测试的过程中发现一直本地的 FTP 客户端工具一直连接不上外网的远程 linux 服务器,查看相应的日志记录:

[root@ryan ~]# cat /var/log/messages

没有发现可用的日志,然后查看了:

[root@ryan ~]# cat /var/log/secure

发现有如下的记录:

Feb 25 11:43:21 ryan proftpd[23776]: ryan (124.89.91.57[124.89.91.57]) - USER ftp_wordpress: no such user d from 124.89.91.57 [124.89.91.57] to ::ffff:172.31.71.42:21

显示没有 ftp_wordpress 用户,可是上面明明创建了 ftp_wordpress 虚拟用户,原来是因为 proftpd 应用程序导致的,proftpd 也是一款 FTP 服务端程序,由于自己在服务器上搭建 xampp 时,xampp 集成包中带了这个 proftpd 程序,当启动 xampp 时,proftpd 也启动了,并且占用了服务器的 21 端口。所以此时,在服务器中启动的 FTP 服务器程序是 proftpd,而不是我们安装的 pure-ftpd,ftp_wordpress 用户也是在 pure-ftpd 中创建的,但 proftpd 中并不存在该用户,所以会出现没有 ftp_wordpress 用户。

我们可以通过如下命令验证:

先查看 21 端口是否开启:

[root@ryan ~]# netstat -an | grep 21

然后查看 proftpd 进程:

[root@ryan ~]# ps -aux | grep proftpd

可以查看到该进程的 PID,比如 19466

但是,通过 ps 及 top 命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。这时,我们需要通过以下的方法来查看进程的详细信息:

Linux 在启动一个进程时,系统会在 /proc下创建一个以 PID 命名的目录,该目录是系统内存的映射目录,提供内核与进程信息,其中包括一个名为 exe 的文件即记录了绝对路径,通过 ll 或 ls –l 命令即可查看:

[root@ryan ~]# ls -l /proc/PID

……

lrwxrwxrwx 1 root root 0 Feb 24 22:55 exe -> /opt/lampp/sbin/proftpd

……

通过查看到该进程的绝对路径,发现 proftpd 确实是 xampp 所带的组件。

说明:

cwd 符号链接的是进程运行目录;

exe 符号连接就是执行程序的绝对路径;

cmdline 就是程序运行时输入的命令行命令;

environ 记录了进程运行时的环境变量;

fd 目录下是进程打开或使用的文件的符号连接。

解决方法:

自己手动停掉 profptd(对应的启动命令为:[root@ryan ~]# /opt/lampp/lampp startftp):

[root@ryan ~]# /opt/lampp/lampp stopftp

XAMPP: Stopping ProFTPD...ok.

启动我们新搭建的 pure-ftpd:

[root@ryan pure-ftpd-1.0.47]# /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf

然后在本地使用 FTP 客户端工具再次连接远程服务器,发现可以正常连接了,此时启动的 FTP 服务器端程序是 pure-ftpd。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_35669659/article/details/102739687

1、pure-ftpd.conf配置文件说明
参数 说明
ChrootEveryone yes 启用chroot,限制所有用户在其主目录中
BrokenClientsCompatibility yes 兼容不同客户端。
Daemonize yes 后台运行。
MaxClientsPerIP 20 每个ip最大连接数。
VerboseLog yes 记录日志。
DisplayDotFiles no 显示隐藏文件。
AnonymousOnly no 只允许匿名用户访问。
NoAnonymous yes 不允许匿名用户连接。
SyslogFacility none 不将日志在syslog日志中显示。
DontResolve yes 不进行客户端DNS解析。
MaxIdleTime 15 最大空闲时间。
LimitRecursion 2000 8 浏览限制,文件2000,目录8层。
AnonymousCanCreateDirs no 匿名用户可以创建目录。
MaxLoad 4 超出负载后禁止下载。
PassivePortRange 45000 50000 被动模式端口范围。
AnonymousRatio 1 10 匿名用户上传/下载比率。
UserRatio 1 10 所有用户上传/下载比率。
AntiWarez yes 禁止下载匿名用户上传但未经验证的文件。
AnonymousBandwidth 200 匿名用户带宽限制(KB)。
UserBandwidth 8 所有用户最大带宽(KB)。
Umask 133:022 创建文件/目录默认掩码。
MinUID 100 最大UID限制。
AllowUserFXP no 仅运行用户进行FXP传输。
AllowAnonymousFXP no 对匿名用户和非匿名用户允许进行匿名 FXP 传输。
ProhibitDotFilesWrite no 不能删除/写入隐藏文件。
ProhibitDotFilesRead no 禁止读取隐藏文件。
AutoRename yes 有同名文件时自动重新命名。
AnonymousCantUpload yes 不允许匿名用户上传文件。
AltLog clf:/var/log/pureftpd.log clf 格式日志文件位置。
LDAPConfigFile /etc/pureftpd-ldap.conf LDAP 配置文件
MySQLConfigFile /etc/pureftpd-mysql.conf MySQL 配置文件 (参考 README.MySQL)
PGSQLConfigFile /etc/pureftpd-pgsql.conf Postgres 配置文件 (参考 README.PGSQL)
PureDB /etc/pure-ftpd/pureftpd.pdb 用户数据库文件。
MaxDiskUsage 99 当磁盘使用量打到99%时禁止上传。
CreateHomeDir yes 如果虚拟用户的目录不存在则自动创建。
CustomerProof yes 防止命令误操作。
LogPID yes 如果你要为日志每一行添加 PID 去掉下面行的注释。
NoChmod yes 不接受 CHMOD 命令。用户不能更改他们文件的属性。
KeepAllFiles yes 允许用户恢复和上传文件,却不允许删除他们。
2、pure-pw常用命令
pure-pw --help 获取命令帮助
pure-pw mkdb 创建用户信息数据库
pure-pw useradd 增加一个虚用户
pure-pw usermod 修改用户信息
pure-pw userdel 删除一个虚用户
pure-pw passwd 修改用户密码

 

 

15.先把之前的pureftp服务kill掉 killall pure-ftpd

 

16.然后重新启动/usr/local/pure-ftpd/sbin/pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf

 

posted @ 2024-02-28 10:50  全琪俊  阅读(183)  评论(0编辑  收藏  举报