CentOS7 安裝 Pure-ftpd


博客地址:http://www.moonxy.com

一、摘要

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

三、使用 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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM