FTP是一個非常古老的協議,其主要的作用是用于文件的傳輸。FTP采用明文的方式傳輸,極其不安全,但在局域網等環境中使用還是比較方便的。
一、工作原理
FTP的工作方式分為主動模式與被動模式。
1、主動模式
上圖顯示了主動模式的連接過程:
1、客戶端與FTP服務器的21端口建立了TCP連接;
2、客戶端將一個隨機端口號告知給FTP服務器,此端口用于數據傳輸;
3、FTP服務器通過TCP的20端口向已被告知的隨機端口號傳輸數據。
主動模式存在一個問題:當客戶端出口處部署了防火墻時,我們有可能會將客戶端開啟的隨機端口號阻塞掉,而導致FTP的20端口無法連接到客戶端。
為了解決這個問題,可以采用被動模式進行數據傳輸。
2、被動模式
上圖顯示了被動連接的過程:
1、客戶端與FTP服務大的21端口建立了TCP連接;
2、客戶端向服務器的21端口發起被動連接請求;
3、服務器告訴客戶端用于數據傳輸的端口號;
4、客戶端使用另一個隨機端口去連接服務器的數據傳輸端口。
二、FTP服務器配置
在CentOS中,對FTP服務增加了安全相關的改進,稱為vsftpd,即“Very Secure FTP Daemon”,下面來詳細介紹一下vsftpd的相關配置。
1、相關的配置文件
/etc/vsftpd/vsftpd.conf
主要配置文件,可通過man 5 vsftpd.conf查看詳細說明。
/etc/pam.d/vsftpd
用于身份認證。
/etc/vsftpd/ftpusers
設置無法登錄FTP服務器的用戶配置文件。
/etc/vsftpd/user_list
與ftpusers文件的作用相同,只能這個文件的生效與否需要在主配置文件中定義。
/etc/vsftpd/chroot_list
限制用戶只能在其主目錄中進行操作,不可以到其它的目錄中。
/var/ftp
匿名用戶的根目錄。
2、vsftpd.conf配置說明
connect_from_port_20=YES(NO)
數據傳輸的端口號。
listen_port=21
連接監聽端口。
dirmessage_enable=YES(NO)
進入目錄時是否顯示提示信息。
message_file=.message
當dirmessage_enable=YES時,指定提示信息從哪個文件中讀取。
listen=YES(NO)
vsftpd是否以stand alone的方式啟動。
pasv_enable=YES(NO)
是否啟用被動模式。
use_localtime=YES(NO)
是否使用本地時間。
write_enable=YES(NO)
是否允許用戶上傳數據。
connect_timeout=60
單位為秒,主動連接模式下,60秒內得不到客戶端響應時強制斷線。
accept_timeout=60
單位為秒,被動連接模式下,60秒內得不到客戶端響應時強制斷線。
data_connection_timeout=300
單位為秒,無論什么模式下,300秒內得不能正常完成數據傳輸時強制斷線。
idle_session_timeout=300
單位為秒,用戶300秒內沒有任何操作時強制斷線。
max_clients=0
最大客戶端連接數,0表示沒有限制。
max_per_ip=0
同一IP地址同一時間允許的最大連接數。
pasv_min_port=0
被動連接時,如果想將隨機端口號控制在一定的范圍內,使用此選項來設置隨機端口號開始值。
pasv_max_port=0
被動連接時,如果想將隨機端口號控制在一定的范圍內,使用此選項來設置隨機端口號結束值。
ftpd_banner=
用戶連接到FTP服務器時顯示的提示信息,信息內容直接寫在等號后面。
banner_file=/path/to/somefile
用戶連接到FTP服務器時顯示的提示信息,信息內容為文件中的信息。
guest_enable=YES(NO)
所有系統用戶訪問FTP時均被當成guest用戶。
guest_username=ftp
指定guest用戶的用戶名。
local_enable=YES(NO)
是否允許/etc/passwd內的賬號登錄FTP服務器。
local_max_rate=0
實體用戶的傳輸速度上限。
chroot_local_user=YES(NO)
是否限制用戶在自己的主目錄之內。
chroot_list_enable=YES(NO)
是否啟用chroot寫入列表的功能。
chroot_list_file=/etc/vsftpd/chroot_list
如果chroot_list_enable為YES,則/etc/vsftpd/chroot_list中的用戶將不受chroot的限制。
userlist_enable=YES(NO)
是否阻止某些用戶登錄。
userlist_deny=YES(NO)
user_list_enalbe設置為YES時生效,啟用拒絕用戶登錄的文件,具體文件見下面的配置項。
userlist_file=/etc/vsftpd/user_list
此文件中的用戶都無法訪問FTP服務器。
anonymous_enable=YES(NO)
是否允許匿名登錄。
anon_world_readable_only=YES(NO)
允許匿名用戶有下載的權限。
anon_other_write_enable=YES(NO)
是否允許anonymous具有除了寫入之外的權限,默認為NO。
tcp_wrappers=YES(NO)
是否支持tcp_wrappers。
xferlog_enable=YES(NO)
是否記錄用戶上傳、上載文件的操作。
xferlog_file=/var/log/xferlog
指定日志文件的位置。
3、安裝vsftpd
4、啟動vsftpd
在啟動vsftpd服務后,不需要任何配置就可以使用匿名的方式訪問FTP服務器了,默認的訪問路徑為/var/ftp。
三、FTP服務器配置實例
默認vsftpd的配置并不總是能夠滿足我們的實際需求,下面通過實例來說明vsftpd的用戶認證及權限控制的功能。
1、禁止匿名用戶登錄,并且允許root用戶登錄FTP服務器
修改主配置文件
放開root用戶的限制,需要在下面的兩個文件中注釋掉root用戶,以使得root用戶可以登錄FTP服務器。
重啟vsftpd服務
驗證
2、將root用戶的權限控制在其主目錄中
修改主配置文件
注意chroot_list文件必須存在。
重啟服務:
驗證:
2、創建一個普通用戶,此用戶有上傳文件的權限
修改主配置文件:
在系統中創建用戶fin,并使用此用戶登錄到FTP服務器上,上傳一個文件。
以上兩個實例只是FTP的最基本的用法,其它的設置可以根據上文中的選項說明進行配置,也可參考man手冊,此處就不在做過多的演示了。
原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/5767