文件服務器:FTP服務器詳解


文件服務器:FTP服務器

數據傳輸原理

功能簡介

  1. 文件的傳輸與管理

  2. 不同等級的用戶身份:user、guest、anonymous

    • 實體用戶。權限較完整
    • 匿名用戶。下載資源的能力
  3. 命令記錄與日志文件記錄

    /var/log 里面可找到用戶曾經使用過的命令和傳輸的數據
    使用的服務是syslogd

  4. 限制用戶活動的目錄:(change root,簡稱:chroot)

    用戶的工作范圍局限在用戶的主目錄下。ftp后顯示的就是根目錄就是用戶的主目錄。

工作流程和使用到的端口(以ftp默認的主動式連接為例)

  1. 兩個連接

    • 命令通道
    • 數據流通道

    因為是TCP數據包,所以每次連接都需要經過三次握手

  2. 連接過程

    • 建立命令通道的連接

    客戶端隨機取一個大於1024的端口與ftp服務器的port 21端口實現連接,這個連接來對ftp服務器執行命令

    • 通知ftp服務器端使用Active並告知連接的端口號

    客戶端在需要數據的情況下,會告知服務器使用什么方式來連接,如果是主動式(Active)連接時,客戶端會先隨機啟用一個端口,且通過命令通道告知FTP服務器這兩個消息,並等待ftp服務器的連接

    • FTP服務器主動向客戶端連接

    ftp服務器通過命令了解到客戶端的需求之后,默認使用port 22向客戶端發起請求,經過三次握手,現在就可以開始傳輸數據了

備注:數據傳輸通道是在有數據傳輸行為的時候,才會建立的通道,並不是一開始就連接ftp服務器的時候就立刻建立起的通道

在主動連接的FTP服務器與客戶端之間具有防火牆

很多局域網絡都會使用防火牆的NAT功能

讓我們來梳理一下問題發生的過程吧!

  1. 用戶與服務器之間命令通道的建立

    NAT會主動記錄由內部送往外部的連接信息,而由於命令通道的建立是由客戶端向服務器端發起的,故這條連接順利建立

  2. 用戶與服務器之間數據通道建立的通知

    client啟動數據傳輸通道,並通過命令告知ftp服務器,等待服務器端的主動連接

  3. 服務器主動連到NAT等待轉遞至客戶端的連接問題

    經過NAT轉換,服務器端只能得知NAT的IP而不是客戶端的IP。因此ftp服務器會以port 20主動向NAT發起port發起主動連接的請求。但NAT並沒有啟動port來監聽ftp服務器的連接

在ftp的主動式連接中,NAT將會被視為客戶端,但是NAT並不是客戶端,這就造成了問題。

如果你有時發現連接上服務器了,但是無法獲取文件名的列表,而是在超過一段時間后顯示“can’t build data connection:connection refused”,"無法進行數據傳輸"之類的信息,那就是這個原因困擾的。

簡易的解決辦法:

  1. iptables提供的ftp檢測模塊

    使用modprobe這個命令加載ip_conntrack_ftp及ip_nat_ftp等模塊,這幾個模塊會主動的分析目標是port 21的連接信息,就可以得到客戶端的數據傳輸通道的端口信息,就能接收服務器的連接了。

    但是如果ftp服務器使用的不是默認端口21的話,那就無法順利解析了

  2. 客戶端選擇被動式(Passive)連接模式

    主動式是服務器向客戶端發起連接,那被動式就是客戶端向服務器端發起連接。

客戶端選擇被動式的連接模式

  1. 用戶與服務器建立命令通道

  2. 客戶端發起PASV的連接請求

    當使用數據通道命令時,客戶端可通過命令通道發出PASV的被動式連接要求,並等待服務器的回應

  3. ftp服務器啟動數據端口,並通知客戶端連接

    如果你所使用的ftp服務器是支持被動式連接的,那么就會啟動一個監聽端口,也可以自定義某一范圍的端口,這要看ftp服務器軟件而定。然后ftp服務器會通過命令通道告知客戶端已經啟動的端口(port PASV)

  4. 客戶端隨機取用大於1024的端口進行連接

    客戶端隨機取用大於1024的端口來進行對ftp服務器的port PASV連接。

潛在問題:

  1. 被動式的ftp數據通道的連接方向是由客戶端向服務器端連接的。那么,如果ftp服務器也是在NAT后端怎么辦?

  2. 服務器在沒有設置的情況下隨機選取大於1024的端口來提供客戶端連接使用。但如果此端口有問題的話,怎么辦呢?很難追蹤來自入侵者攻擊的日志信息。 passive ports限制 port number

vsftpd服務器基礎設置

較為安全的ftp服務器軟件的特點

  1. 啟動者身份為一般用戶,對於Linux系統的權限較低,危害相對降低。此外,vsftpd利用chroot()函數進行改換根目錄的操作,使系統工具不被利用

  2. 任何需要具有較高執行權限的vsftpd命令均以一個特殊的上層程序所控制,該上層程序享有的較高執行權限能力已經被限制的相當低了

  3. 絕大部分的ftp命令已經被整合到vsftpd主程序中,不要使用額外的系統提供的命令,比較安全

  4. 較高執行權限的命令需經過相當程度的身份確認后,才可使用

所需軟件及軟件結構

  1. 軟件:vsftpd

  2. 配置文件:/etc/vsftpd/vsftpd.conf

    參數=設置值
    等號兩邊不能有空白

  3. 文件/etc/pam.d/vsftpd

    主要作為身份認證使用,阻擋一些用戶身份的功能

  4. 文件/etc/vsftpd/ftpusers

    系統賬號默認是無法使用vsftpd
    限制某些用戶無法使用vsftpd

  5. 文件/etc/vsftpd/user_list

    不允許登陸vsftpd的賬號寫入這里,與ftpusers的作用相同
    但是這個文件是否生效是由vsftpd.conf來決定(userlist_deny與userlist_enable = {YES/NO})

  6. 文件/etc/vsftpd/chroot_list

    此文件默認不存在,需要手動建立。
    功能:將某些賬號的用戶chroot建立在他們的默認用戶主目錄下。但是這個文件生效與vsftpd.conf內的chroot_list_enable、chroot_list_file兩個參數有關

  7. 文件/usr/sbin/vsftpd

    vsftpd的主要執行文件。只有這一個執行文件

  8. 目錄/var/ftp

    匿名用戶登陸的根目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM