博客地址:http://www.moonxy.comlinux
1、摘要數據庫
FTP 是 File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱爲"文傳協議」。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不一樣的操做系統有不一樣的FTP應用程序,而全部這些應用程序都遵照同一種協議以傳輸文件。在FTP的使用當中,用戶常常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至本身的計算機上;"上傳"文件就是將文件從本身的計算機中拷貝至遠程主機上。用Internet語言來講,用戶可經過客戶機程序向(從)遠程主機上傳(下載)文件。vim
目前 FTP 軟件有不少,但整體上分爲 FTP Client 客戶端 和 FTP Server 服務端,其中 PureFTPd 是一款專一於程序健壯和軟件安全的免費 FTP 服務器軟件(基於 BSD License)。其能夠在多種類Unix操做系統中編譯運行,包括 Linux、OpenBSD、NetBSD、FreeBSD、DragonFly BSD、Solaris、Tru6四、Darwin、Irix and HP-UX。PureFTPd 還有 Android 移植版本。安全
2、下載並安裝 Pure-ftpd服務器
可使用 yum 安裝或者源碼包安裝,源碼包安裝的優勢是能夠自由選擇安裝的軟件版本,yum 安裝時倉庫的版本通常都是固定的某一個版本,沒法自由選擇。wordpress
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
3、使用 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
4、配置服務器段安全組規則
因爲本人使用的是阿里雲的 ECS 服務器,服務器默認不開放 FTP 的 21 端口,本身在安全組規則中添加放行相應端口,因爲在使用 FTP 過程當中不只僅會用到 21 端口,可能還會用到其餘端口,因此此處咱們放行 20/21,1024/65535,以下:
5、本地使用 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。