# 21.4 讓 vsftpd 增加 SSL 的加密功能
## 21.4 讓 vsftpd 增加 SSL 的加密功能
既然 http 都有 https 了,那么使用明碼傳輸的 ftp 有沒有加密的 ftps 呢?嘿嘿!說的好!有的啦~既然都有 openssl 這個加密函式庫, 我們當然能夠使用類似的機制來處理 FTP 啰!但前提之下是你的 vsftpd 有支持 SSL 函式庫才行!此外,我們也必須要建立 SSL 的憑證檔給 vsftpd 使用,這樣才能夠進行加密嘛!了解乎!接下來,就讓我們一步一步的進行 ftps 的服務器建置吧!
- 1. 檢查 vsftpd 有無支持 ssl 模塊:
如果你的 vsftpd 當初編譯的時候沒有支持 SSL 模塊,那么你就得只好自己重新編譯一個 vsftpd 的軟件了!我們的 CentOS 有支持嗎? 趕緊來瞧瞧:
```
[root@www ~]# ldd $(which vsftpd) | grep ssl
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f0587879000)
```
如果有出現 libssl.so 的字樣,就是有支持!這樣才能夠繼續下一步呦!
- 2. 建立專門給 vsftpd 使用的憑證數據:
CentOS 給我們一個建立憑證的地方,那就是 /etc/pki/tls/certs/ 這個目錄!詳細的說明我們在 [20.5.2](http://linux.vbird.org/linux_server/0360apache.php#www_ssl_own) 里面談過咯,所以這里只介紹怎么做:
```
[root@www ~]# cd /etc/pki/tls/certs
[root@www certs]# make vsftpd.pem
----- ....(前面省略)....
Country Name (2 letter code) [XX]:TW
State or Province Name (full name) []:Taiwan
Locality Name (eg, city) [Default City]:Tainan
Organization Name (eg, company) [Default Company Ltd]:KSU
Organizational Unit Name (eg, section) []:DIC
Common Name (eg, your name or your server's hostname) []:www.centos.vbird
Email Address []:root@www.centos.vbird
[root@www certs]# cp -a vsftpd.pem /etc/vsftpd/
[root@www certs]# ll /etc/vsftpd/vsftpd.pem
-rw-------. 1 root root 3116 2011-08-08 16:52 /etc/vsftpd/vsftpd.pem
# 要注意一下權限喔!
```
- 3. 修改 vsftpd.conf 的配置文件,假定有實體、匿名賬號:
在前面 21.2 里面大多是單純匿名或單純實體帳戶,這里我們將實體賬號透過 SSL 聯機,但匿名者使用明碼傳輸! 兩者同時提供給客戶端使用啦!FTP 的設定項目主要是這樣:
- 提供實體賬號登入,實體賬號可上傳數據,且 umask 為 002
- 實體賬號默認為 chroot 的情況,且全部實體賬號可用帶寬為 1Mbytes/second
- 實體賬號的登入與數據傳輸均需透過 SSL 加密功能傳送;
- 提供匿名登錄,匿名者僅能下載,不能上傳,且使用明碼傳輸 (不透過 SSL)
此時,整體的設定值會有點像這樣:
```
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 實體賬號的一般設定項目:
local_enable=YES
write_enable=YES
local_umask=002
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_max_rate=10000000
# 匿名者的一般設定:
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=1000000
data_connection_timeout=60
idle_session_timeout=600
# 針對 SSL 所加入的特別參數!每個項目都很重要!
ssl_enable=YES <==啟動 SSL 的支持
allow_anon_ssl=NO <==但是不允許匿名者使用 SSL 喔!
force_local_data_ssl=YES <==強制實體用戶數據傳輸加密
force_local_logins_ssl=YES <==同上,但連登入時的帳密也加密
ssl_tlsv1=YES <==支持 TLS 方式即可,底下不用啟動
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem <==預設 RSA 加密的憑證檔案所在
# 一般服務器系統設定的項目:
max_clients=50
max_per_ip=5
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
pasv_min_port=65400
pasv_max_port=65410
[root@www ~]# /etc/init.d/vsftpd restart
```
- 4. 聯機測試看看!使用 Filezilla 聯機測試:
接下來我們利用 filezilla 來說明一下,如何透過 SSL/TLS 功能來進行聯機加密。很簡單,只要在站臺管理員的地方選擇:

圖 21.4-1、透過 Filezilla 聯機到 SSL/TLS 支持的 FTP 方式
如上圖所示,重點在箭頭所指的地方,需要透過 TLS 的加密方式才行!然后,鳥哥嘗試使用 student 這個一般賬號登入系統, 聯機的時候,應該會出現如下的圖示才對:

圖 21.4-2、透過 Filezilla 是否接受憑證呢?
如果一切都沒有問題,那么你可以點選上圖那個『總是信任』的項目,如此一來,未來聯機到這個地方就不會再次要你確認憑證啦! 很簡單的解決了 FTP 聯機加密的問題啰!^\_^
例題:想一想,既然有了 SFTP 可以進行加密的 FTP 傳輸,那為何需要 ftps 呢?答:因為既然要開放 SFTP 的話,就得要同時放行 sshd 亦即是 ssh 的聯機,如此一來,你的 port 22 很可能會常常被偵測~若是 openssl, openssh 出問題,恐怕你的系統就會被綁架。如果你的 FTP 真的有必要存在,那么透過 ftps 以及利用 vsftpd 這個較為安全的服務器軟件來架設, 理論上,是要比 sftp 來的安全些~至少對 Internet 放行 ftps 還不會覺得很可怕...
- - - - - -
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀