欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  Linux下的pure-ftp的安装和使用详解

服务端工具 本站 1510 0评论

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 安装时仓库的版本一般都是固定的某一个版本,无法自由选择。


1. yum 安装


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

# yum install epel-release


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

# yum install pure-ftpd


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地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。


成功后出现如下所示:

713744-20180223231113979-326599849.png


编译并安装:

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


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

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

0

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


3. 修改配置文件


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


pure-ftpd.conf文件中配置参数说明:

ChrootEveryone                    yes        # 启用chroot    
BrokenClientsCompatibility         yes        # 兼容不同客户端    
Daemonize                          yes        # 后台运行    
MaxClientsPerIP                     8          # 每个ip最大连接数    
VerboseLog                          yes        # 记录日志    
DisplayDotFiles                     no        # 显示隐藏文件    
AnonymousOnly                      no          # 只允许匿名用户访问    
NoAnonymous                        no          # 不允许匿名用户连接    
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                           10            # 可以登陆 用户的最小UID限制    
AllowUserFXP                     no          # 仅运行用户进行FXP传输    
AllowAnonymousFXP                no          # 对匿名用户和非匿名用户允许进行匿名 FXP 传输 
ProhibitDotFilesWrite            no          # 不能删除/写入隐藏文件    
ProhibitDotFilesRead             no          # 禁止读取隐藏文件    
AutoRename                       yes         # 有同名文件时自动重新命名    
AnonymousCantUpload              yes        # 不允许匿名用户上传文件    
AltLog          clf:/var/log/pureftpd.log    # clf格式日志文件位置    
PureDB          /usr/local/pure-ftpd/etc/pureftpd.pdb        # 用户数据库文件    
MaxDiskUsage                    99           # 当磁盘使用量打到99%时禁止上传    
CreateHomeDir                   yes          # 如果虚拟用户的目录不存在则自动创建    
CustomerProof                   yes          # 防止命令误操作


使用 pure-ftpd


1.启动pure-ftpd服务


先关闭vsftpd:

[root@localhost ~]# systemctl stop vvsftpd

// 如果只前没开启过vsftpd可省略此步。


启动pure-ftpd:

[root@localhost ~]# systemctl start pure-ftpd

[root@localhost ~]# ps aux | grep pure-ftpd

root 2389 0.0 0.0 202420 1192 ? Ss 21:39 0:00 pure-ftpd (SERVER)

root 2391 0.0 0.0 112680 968 pts/0 S+ 21:39 0:00 grep --color=auto pure-ftpd


加入开机启动:

[root@localhost ~]# systemctl enable pure-ftpd

还可以查看状态如下:

20210721123303.jpg查看端口进程

[root@localhost ~]# netstat -lntp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

......

tcp 0 0 0.0.0.0:21 0.0.0.0: LISTEN 2389/pure-ftpd (SER

tcp6 0 0 :::21 ::: LISTEN 2389/pure-ftpd (SER


创建系统用户及目录:

[root@localhost ~]# mkdir /data/ftp

[root@localhost ~]# useradd -u 1010 pure-ftp


更改所属主和所属组:

[root@localhost ~]# chown -R pure-ftp:pure-ftp /data/ftp


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

[root@localhost ~]# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp

Password:

Enter it again:

// pure-pw useradd [指定用户] -u [指定系统用户] -d [指定虚拟用户的家目录]

// 虚拟用户ftp_usera,映射的系统用户pure-ftp,虚拟用户家目录 /data/ftp

//pure-pw --help 可以查看pure-pw支持的用法。


这样可以使ftp_usera只能访问其家目录/data/ftp. 到这里还未完成,还有最关键的一步,就是创建用户信息数据库文件:


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

[root@localhost ~]# pure-pw mkdb   // 必须先执行该命令,否则无法登录


pure-pw还可以列出当前的ftp账号,当然也可以删除某个账号, 我们再创建一个账号:

[root@localhost ~]# pure-pw  useradd ftp_userb -uwww -d /tmp

[root@localhost ~]# pure-pw mkdb


2.测试pure-ftpd


测试需要使用的工具叫做lftp, 先安装一下它:

[root@localhost ~]# yum install -y lftp


口令:

[root@localhost ~]# touch /data/www/123.txt  //创建一个文件

[root@localhost ~]# lftp ftp_usera@127.0.0.1


lftp ftp_usera@127.0.0.1:~> ls

drwxr-xr-x 2 1010 pure-ftp 21 Jan 18 21:56 .

drwxr-xr-x 2 1010 pure-ftp 21 Jan 18 21:56 ..

-rw-r--r-- 1 0 0 0 Jan 18 21:56 123.txt

// 退出使用quit。


如果连接不上请重启一下pure-ftpd

[root@localhost ~]# systemctl restart pure-ftpd


查看用户列表:

[root@localhost ~]# pure-pw list


显示如下:

pure-ftp /data/ftp/./


删除账号的命令为:

[root@localhost ~]# pure-pw userdel pure-ftp


可能遇到的问题:

在安装pure-ftpd后如果连接不上,重启pure-ftpd或重启服务器,多进行几次pure-pw mkdb然后在就是修改配置文件PureDB   /usr/local/pure-ftpd/etc/pureftpd.pdb 路径,再就是杀死var/bin/pure-ftpd.pid进程并重新开启pure-ftpd。 


配置服务器段安全组规则


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

713744-20180226204525447-1101280696.png


本地使用 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。


参考网址:

https://www.cnblogs.com/cnjavahome/p/8463896.html 

https://blog.51cto.com/754599082/2062642 

https://www.linuxidc.com/Linux/2017-03/141701.htm 

https://www.linuxidc.com/Linux/2016-10/135971.htm 


转载请注明: ITTXX.CN--分享互联网 » Linux下的pure-ftp的安装和使用详解

最后更新:2021-07-21 19:41:43

赞 (4) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽