安全的FTP服務器 vsftpd簡介
vsftpd 是一個 UNIX 類操作系統上運行的服務器的名字,它可以運行在諸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服務器不支持的特征。比如:
非常高的安全性需求
帶寬限制
良好的可伸縮性
創建虛擬用戶的可能性
IPv6支持
中等偏上的性能
分配虛擬 IP 的可能性
高速
vsftpd 的名字代表"very secure FTP daemon", 安全是它的開發者 Chris Evans 考慮的首要問題之一。在這個 FTP 服務器設計開發的最開始的時候,高安全性就是一個目標。
一個例子就是 vsftpd 是在 chroot 模式下工作的,chroot 模式就是為程序(這里就是 vsftpd 了)單獨指定一個新的目錄,它也就不能訪問那個目錄之外的程序和文件了 --- 所以這也稱為“被鎖上的”。一個可能被潛在的攻擊者破壞的 FTP 服務器將被從系統的其他部分獨立開來,從而避免了更大的損失。
由于有了如此多的特性,其中 FTP 服務的安全性應該是最重要的,vsftpd 比其他 FTP 服務器更加優越。WU-FTPD http://www.wu-ftpd.org/ 在這里可以被視作一個反面的例子,因為它在過去的幾年中出現了太多的安全缺陷。
附錄1:什么是FTP
FTP Transfer Protocol 件傳輸協議的縮寫,在RFC 959中具體說明。
FTP會話時包含了兩個通道,一個叫控制通道,一個叫數據通道。
控制通道:控制通道是和FTP服務器進行溝通的通道,連接FTP,發送FTP指令都是通過控制通道來完成的。
數據通道:數據通道是和FTP服務器進行文件傳輸或者列表的通道。
FTP協議中,控制連接均有客戶端發起,而數據連接有兩種工作方式:PORT方式和PASV方式
PORT模式(主動方式)
FTP 客戶端首先和FTP Server的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口(一個大于1024的端口)接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。
PASV模式(被動方式)
在建立控制通道的時候和PORT模式類似,當客戶端通過這個通道發送PASV 命令的時候,FTP server打開一個位于1024和5000之間的隨機端口并且通知客戶端在這個端口上傳送數據的請求,然后FTP server 將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接傳送數據。
如果從C/S模型這個角度來說,PORT對于服務器來說是OUTBOUND,而PASV模式對于服務器是INBOUND,這一點請特別注意,尤其是在使用防火墻的企業里,這一點非常關鍵,如果設置錯了,那么客戶將無法連接。
附錄2:FTP用戶管理解說
FTP服務器對用戶的管理,在默認的情況下是根據 /etc/passwd及/etc/group 來進行的,所以我們一定要了解Linux系統用戶和用戶組的管理,用戶和用戶組的管理是一切應用的的基礎,有的弟兄不想去了解基礎的東西,就想一步成架好各種服務器,事實證明這種學習方法是最不明智的;雖然在您可能在幾分鐘啟動了ftp服務器,但遇到問題時,您不一定能知道是哪里出錯;所以基礎還是極為重要的;
推薦文章: 《Linux 用戶(user)和用戶組(group)管理概述》
匿名ftp 用戶的理解
當我們訪問各大FTP上訪問時,可能我們不去想我們以什么身份登錄的,如果他的FTP允許匿名登錄的話;比如我們在瀏覽器上打入;
ftp://mirrors.kernel.org
或
ftp://ftp:ftp@mirrors.kernel.org
我們會發現上面的兩行最終都能訪問,而且顯示的結果也完全一樣,最終都跳到 ftp://mirrors.kernel.org 地址;那我們訪問這個FTP時,是不是有用戶和密碼呢?是的,也是需要在的,只是在服務器端允許匿名訪問,而匿名訪問的用戶名和密碼都是ftp,只是我們因為匿名訪問,沒有感覺到他有用戶名和密碼罷了。第二個地址就是以ftp用戶,密碼也是ftp來訪問 ftp://mirrors.kernel.org;
如果我們以ftp命令連接 mirrors.kernel.org 時,我們會發現需要輸入用戶ftp,密碼ftp才能訪問;
在FTP服務器中,匿名用戶的用戶名和密碼都是ftp ;這個用戶可以在您的操作系統中的 /etc/passwd 中能找得到;可能有類似下面的一行;
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
說明:
/etc/passwd 是系統用戶的配置文件;/etc/group是系統用戶組配置文件,您可以通過 《Linux 用戶(user)和用戶組(group)管理概述》 及其相關文檔中了解一些用戶管理的一些基礎知識;
在ftp用戶這行中,我們看到七個字段,每個字段寫字段之間用:號分割;
ftp 是用戶名
x 是密碼字段,是隱藏的;
14 是用戶的UID字段,可以自己來設定,不要和其它用戶的UID相同,否則會造成系統安全問題;
50 用用戶組的GID,可以自己設定,不要和其它用戶組共用FTP的GID,否則會造成系統全全問題;
FTP User 是用戶說明字段;
/var/ftp 是ftp用戶的家目錄,可以自己來定義;
/sbin/nologin 這是用戶登錄SHELL ,這個也是可以定義的,/sbin/nologin 表示不能登錄系統;系統虛擬帳號(也被稱為偽用戶)一般都是這么設置。比如我們把ftp用戶的/sbin/nologin 改為 /bin/bash ,這樣ftp用戶通過本地或者遠程工具ssh或telnet以真實用戶身份登錄到系統。這樣做對系統來說是不安全的;如果您認為一個用戶沒有太大的必要登錄到系統,就可以只給他FTP帳號的權限,也就是說只給他FTP的權限,而不要把他的SHELL設置成 /bin/bash 等;
關于ftp用戶組的理解
我們查看 /etc/group 的時候,會發現類似這樣一條;
ftp:x:50:
/etc/group 是用戶組的管理配置文件,上面這行表示用戶組ftp,x是密碼段,50是GID;我們對照在/etc/passwd中的ftp那行得知ftp用戶是屬于ftp用戶組的,因為ftp用戶那行中的GID和ftp用戶組的GID是相同的。
匿名ftp用戶和ftp用戶組是否可以刪除
在一般情況下是不能把/etc/passwd和/etc/group 中有把ftp用戶和用戶組的行刪除的,因為FTP服務器是需要他們來對FTP用戶實現管理,在默認的情況下。
雖然不能刪除,但對/etc/passwd及/etc/group中的ftp用戶及ftp用戶組的一些相關的東西是能修改的;比如我們可以把ftp用戶的家目錄改掉,也可以把ftp用戶的UID改掉 ... ... 前提是你對用戶管理有所了解。系統用戶管理是一切應用基礎之一,可能初學Linux的弟兄并不了解用戶管理的重要性,但慢慢您就會發現這個道理。
相關文章:
1. vsftpd配置文件詳解2. 史上最詳細的vsftpd配置文件詳解3. vsftpd 出現530 and 500 錯誤問題解決辦法4. Windows Server 2012下FTP服務器站點搭建程序5. windows Server 2008R2 FTP服務器搭建圖文教程6. Ubuntu 安裝 vsftpd FTP詳細步驟7. Windows搭建FTP服務器詳細教程8. vsftpd的530 Login incorrect錯誤解決方法 vsftpd登錄錯誤9. windows server 2016 搭建FTP服務器詳細教程10. Serv-U和CuteFTP無法連接FTP服務器問題解答
