在Linux系統(tǒng)中,F(xiàn)TP服務(wù)器軟件有很多,都已經(jīng)成熟,像vsftpd, wu-ftp, Pure-FTPd等。但這些軟件安裝配置起來都比較麻煩,搭建個(gè)人的FTP服務(wù)器,如果不選用發(fā)行版自帶的FTP軟件的話,還是Proftpd比較簡(jiǎn)單。
Proftpd是一款開放源碼的FTP服務(wù)器軟件,它是原來世界范圍使用最廣泛的wu-ftpd的改進(jìn)版,它修正了wu-ftpd的許多缺陷,在許多方面進(jìn)行了重大的改進(jìn),其中一個(gè)重要變化就是它學(xué)習(xí)了Apache 的配置方式,使proftpd的配置和管理更加簡(jiǎn)單易懂。
ProFTPD設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)一個(gè)安全且易于設(shè)定的FTP Server。
在項(xiàng)目開始時(shí),Unix或類Unix平臺(tái)上 FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。雖然wu-ftpd有著極佳的效能同時(shí)也是一套很好的軟件,然而它卻欠缺了許多Win32平臺(tái)上FTP Server的一些特色,同時(shí)wu-ftpd過去也有不少的安全漏洞陸續(xù)被發(fā)現(xiàn)。ProFTPD的原創(chuàng)者本身就曾經(jīng)花非常多的時(shí)間尋找wu-ftpd 的漏洞加以改進(jìn)并且增加許多功能。然而十分不幸的是,他很快地發(fā)現(xiàn)顯然wu-ftpd需要全部重新的改寫才能補(bǔ)足欠缺的設(shè)定能力以及缺乏的一些功能。
有兩種運(yùn)行方式,獨(dú)立服務(wù)器與超級(jí)服務(wù)器的子服務(wù)器。無論從安全性和穩(wěn)定性,還是可配置性來說都是非常好的選擇。
面是一些 ProFTPD 服務(wù)器的主要功能:
每個(gè)目錄都可以包含 ".ftpaccess" 文件用于訪問控制,類似 Apache 的 ".htaccess"
支持多個(gè)虛擬 FTP 服務(wù)器以及多用戶登錄和匿名 FTP 服務(wù)。
可以作為獨(dú)立進(jìn)程啟動(dòng)服務(wù)或者通過 inetd/xinetd 啟動(dòng)
它的文件/目錄屬性、屬主和權(quán)限是基于 UNIX 方式的。
它可以獨(dú)立運(yùn)行,保護(hù)系統(tǒng)避免 root 訪問可能帶來的損壞。
模塊化的設(shè)計(jì)讓它可以輕松擴(kuò)展其他模塊,比如 LDAP 服務(wù)器,SSL/TLS 加密,RADIUS 支持,等等。
ProFTPD 服務(wù)器還支持 IPv6.
下面是如何在運(yùn)行 Fedora 22 操作系統(tǒng)的計(jì)算機(jī)上使用 ProFTPD 架設(shè) FTP 服務(wù)器的一些簡(jiǎn)單步驟。
1. 安裝 ProFTPD
首先,我們將在運(yùn)行 Fedora 22 的機(jī)器上安裝 Proftpd 軟件。因?yàn)?yum 包管理器已經(jīng)被拋棄了,我們將使用最新最好的包管理器 dnf。DNF 很容易使用,是 Fedora 22 上采用的非常人性化的包管理器。我們將用它來安裝 proftpd 軟件。這需要在終端或控制臺(tái)里用 sudo 模式運(yùn)行下面的命令。
$ sudo dnf -y install proftpd proftpd-utils
2. 配置 ProFTPD
現(xiàn)在,我們將修改軟件的一些配置。要配置它,我們需要用文本編輯器編輯 /etc/proftpd.conf 文件。/etc/proftpd.conf 文件是 ProFTPD 軟件的主要配置文件,所以,這個(gè)文件的任何改動(dòng)都會(huì)影響到 FTP 服務(wù)器。在這里,是我們?cè)诔跏疾襟E里做出的改動(dòng)。
$ sudo vi /etc/proftpd.conf
之后,在用文本編輯器打開這個(gè)文件后,我們會(huì)想改下 ServerName 以及 ServerAdmin,分別填入自己的域名和 email 地址。下面是我們改的。
ServerName "ftp.linoxide.com"
ServerAdmin arun@linoxide.com
在這之后,我們將把下面的設(shè)定加到配置文件里,這樣可以讓服務(wù)器將訪問和授權(quán)記錄到相應(yīng)的日志文件里。
ExtendedLog /var/log/proftpd/access.log WRITE,READ default
ExtendedLog /var/log/proftpd/auth.log AUTH auth
3. 添加 FTP 用戶
在設(shè)定好了基本的配置文件后,我們很自然地希望添加一個(gè)以特定目錄為根目錄的 FTP 用戶。目前登錄的用戶自動(dòng)就可以使用 FTP 服務(wù),可以用來登錄到 FTP 服務(wù)器。但是,在這篇教程里,我們將創(chuàng)建一個(gè)以 ftp 服務(wù)器上指定目錄為主目錄的新用戶。
下面,我們將建立一個(gè)名字是 ftpgroup 的新用戶組。
$ sudo groupadd ftpgroup
然后,我們將以目錄 /ftp-dir/ 作為主目錄增加一個(gè)新用戶 arunftp 并加入這個(gè)組中。
$ sudo useradd -G ftpgroup arunftp -s /sbin/nologin -d /ftp-dir/
在創(chuàng)建好用戶并加入用戶組后,我們將為用戶 arunftp 設(shè)置一個(gè)密碼。
$ sudo passwd arunftp
Changing password for user arunftp.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
現(xiàn)在,我們將通過下面命令為這個(gè) ftp 用戶設(shè)定主目錄的讀寫權(quán)限(LCTT 譯注:這是SELinux 相關(guān)設(shè)置,如果未啟用 SELinux,可以不用)。
$ sudo setsebool -P allow_ftpd_full_access=1
$ sudo setsebool -P ftp_home_dir=1
然后,我們會(huì)設(shè)定不允許其他用戶移動(dòng)或重命名這個(gè)目錄以及里面的內(nèi)容。
$ sudo chmod -R 1777 /ftp-dir/
4. 打開 TLS 支持
目前 FTP 所用的加密手段并不安全,任何人都可以通過監(jiān)聽網(wǎng)卡來讀取 FTP 傳輸?shù)臄?shù)據(jù)。所以,我們將為自己的服務(wù)器打開 TLS 加密支持。這樣的話,需要編輯 /etc/proftpd.conf 配置文件。在這之前,我們先備份一下當(dāng)前的配置文件,可以保證在改出問題后還可以恢復(fù)。
$ sudo cp /etc/proftpd.conf /etc/proftpd.conf.bak
然后,我們可以用自己喜歡的文本編輯器修改配置文件。
$ sudo vi /etc/proftpd.conf
然后,把下面幾行附加到我們?cè)诘?2 步中所增加內(nèi)容的后面。
TLSEngine on
TLSRequired on
TLSProtocol SSLv23
TLSLog /var/log/proftpd/tls.log
TLSRSACertificateFile /etc/pki/tls/certs/proftpd.pem
TLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.pem
完成上面的設(shè)定后,保存退出。
然后,我們需要生成 SSL 憑證 proftpd.pem 并放到 /etc/pki/tls/certs/ 目錄里。這樣的話,首先需要在 Fedora 22 上安裝 openssl。
$ sudo dnf install openssl
然后,可以通過執(zhí)行下面的命令生成 SSL 憑證。
$ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/proftpd.pem -out /etc/pki/tls/certs/proftpd.pem
系統(tǒng)會(huì)詢問一些將寫入憑證里的基本信息。在填完資料后,就會(huì)生成一個(gè) 2048 位的 RSA 私鑰。
Generating a 2048 bit RSA private key
...................+++
...................+++
writing new private key to '/etc/pki/tls/certs/proftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:NP
State or Province Name (full name) []:Narayani
Locality Name (eg, city) [Default City]:Bharatpur
Organization Name (eg, company) [Default Company Ltd]:Linoxide
Organizational Unit Name (eg, section) []:Linux Freedom
Common Name (eg, your name or your server's hostname) []:ftp.linoxide.com
Email Address []:arun@linoxide.com
在這之后,我們要改變所生成憑證文件的權(quán)限以增加安全性。
$ sudo chmod 600 /etc/pki/tls/certs/proftpd.pem
5. 允許 FTP 通過 Firewall
現(xiàn)在,需要允許 ftp 端口,一般默認(rèn)被防火墻阻止了。就是說,需要允許 ftp 端口能通過防火墻訪問。
如果 打開了 TLS/SSL 加密,執(zhí)行下面的命令。
$ sudo firewall-cmd --add-port=1024-65534/tcp
$ sudo firewall-cmd --add-port=1024-65534/tcp --permanent
如果 沒有打開 TLS/SSL 加密,執(zhí)行下面的命令。
$ sudo firewall-cmd --permanent --zone=public --add-service=ftp
success
然后,重新加載防火墻設(shè)定。
$ sudo firewall-cmd --reload
success
6. 啟動(dòng)并激活 ProFTPD
全部設(shè)定好后,最后就是啟動(dòng) ProFTPD 并試一下。可以運(yùn)行下面的命令來啟動(dòng) proftpd ftp 守護(hù)程序。
$ sudo systemctl start proftpd.service
然后,我們可以設(shè)定開機(jī)啟動(dòng)。
$ sudo systemctl enable proftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/proftpd.service to /usr/lib/systemd/system/proftpd.service.
7. 登錄到 FTP 服務(wù)器
現(xiàn)在,如果都是按照本教程設(shè)置好的,我們一定可以連接到 ftp 服務(wù)器并使用以上設(shè)置的信息登錄上去。在這里,我們將配置一下 FTP 客戶端 filezilla,使用 服務(wù)器的 IP 或名稱 *作為主機(jī)名,協(xié)議選擇 *FTP,用戶名填入 arunftp,密碼是在上面第 3 步中設(shè)定的密碼。如果你按照第 4 步中的方式打開了 TLS 支持,還需要在加密類型中選擇 要求顯式的基于 TLS 的 FTP,如果沒有打開,也不想使用 TLS 加密,那么加密類型選擇 簡(jiǎn)單 FTP。
要做上述設(shè)定,需要打開菜單里的文件,點(diǎn)擊站點(diǎn)管理器,然后點(diǎn)擊新建站點(diǎn),再按上面的方式設(shè)置。
隨后系統(tǒng)會(huì)要求允許 SSL 憑證,點(diǎn)確定。之后,就可以從我們的 FTP 服務(wù)器上傳下載文件和文件夾了。
總結(jié)
最后,我們成功地在 Fedora 22 機(jī)器上安裝并配置好了 Proftpd FTP 服務(wù)器。Proftpd 是一個(gè)超級(jí)強(qiáng)大,能高度定制和擴(kuò)展的 FTP 守護(hù)軟件。上面的教程展示了如何配置一個(gè)采用 TLS 加密的安全 FTP 服務(wù)器。強(qiáng)烈建議設(shè)置 FTP 服務(wù)器支持 TLS 加密,因?yàn)樗试S使用 SSL 憑證加密數(shù)據(jù)傳輸和登錄。本文中,我們也沒有配置 FTP 的匿名訪問,因?yàn)橐话闶鼙Wo(hù)的 FTP 系統(tǒng)不建議這樣做。 FTP 訪問讓人們的上傳和下載變得非常簡(jiǎn)單也更高效。我們還可以改變用戶端口增加安全性。好吧,如果你有任何疑問,建議,反饋,請(qǐng)?jiān)谙旅嬖u(píng)論區(qū)留言,這樣我們就能夠改善并更新文章內(nèi)容。謝謝!玩的開心 :-)