<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 21.1 FTP 的數據鏈路原理 ## 21.1 FTP 的數據鏈路原理 FTP (File transfer protocol) 是相當古老的傳輸協議之一,他最主要的功能是在服務器與客戶端之間進行檔案的傳輸。 這個古老的協議使用的是明碼傳輸方式,且過去有相當多的安全危機歷史。為了更安全的使用 FTP 協議,我們主要介紹較為安全但功能較少的 vsftpd 這個軟件吶。 - - - - - - ### 2.1.1 FTP 功能簡介 FTP 服務器的功能除了單純的進行檔案的傳輸與管理之外,依據服務器軟件的設定架構,它還可以提供幾個主要的功能。 底下我們約略的來談一談: - 不同等級的用戶身份:user, guest, anonymous FTP 服務器在預設的情況下,依據使用者登入的情況而分為三種不同的身份,分別是: (1)實體賬號,real user;(2)訪客, guest;(3)匿名登錄者, anonymous 這三種。這三種身份的用戶在系統上面的權限差異很大喔!例如實體用戶取得系統的權限比較完整, 所以可以進行比較多的動作;至于匿名登錄者,大概我們就僅提供他下載資源的能力而已,并不許匿名者使用太多主機的資源啊! 當然,這三種人物能夠使用的『在線指令』自然也就不相同啰! ^\_^ - 命令記錄與登錄文件記錄: FTP 可以利用系統的 [syslogd](http://linux.vbird.org/linux_basic/0570syslog.php) 來進行數據的紀錄, 而記錄的數據報括了用戶曾經下達過的命令與用戶傳輸數據(傳輸時間、檔案大小等等)的紀錄呢! 所以你可以很輕松的在 /var/log/ 里面找到各項登錄信息喔! - 限制用戶活動的目錄: (change root, 簡稱 chroot) 為了避免用戶在你的 Linux 系統當中隨意逛大街 (意指離開用戶自己的家目錄而進入到 Linux 系統的其他目錄去), 所以將使用者的工作范圍『局限』在用戶的家目錄底下,嗯!實在是個不錯的好主意!FTP 可以限制用戶僅能在自己的家目錄當中活動喔!如此一來,由于使用者無法離開自己的家目錄,而且登入 FTP 后,顯示的『根目錄』就是自己家目錄的內容,這種環境稱之為 change root ,簡稱 chroot ,改變根目錄的意思啦! 這有什么好處呢?當一個惡意的使用者以 FTP 登入你的系統當中,如果沒有 chroot 的環境下,他可以到 /etc, /usr/local, /home 等其他重要目錄底下去察看檔案數據,尤其是很重要的 /etc/ 底下的配置文件,如 /etc/passwd 等等。如果你沒有做好一些檔案權限的管理與保護,那他就有辦法取得系統的某些重要信息, 用來『入侵』你的系統呢!所以在 chroot 的環境下,當然就比較安全一些咯! - - - - - - ### 21.1.2 FTP 的運作流程與使用到的端口 FTP 的傳輸使用的是 TCP 封包協議,在[第二章網絡基礎](http://linux.vbird.org/linux_server/0110network_basic.php)中我們談過, TCP 在建立聯機前會先進行三向交握。不過 FTP 服務器是比較麻煩一些,因為 FTP 服務器使用了兩個聯機,分別是命令信道與數據流通道 (ftp-data) 。這兩個聯機都需要經過三向交握, 因為是 TCP 封包嘛!那么這兩個聯機通道的關系是如何呢?底下我們先以 FTP 預設的主動式 (active) 聯機來作個簡略的說明啰: ![](https://box.kancloud.cn/2016-05-13_5735da7e4c04b.gif) 圖 21.1-1、FTP 服務器的主動式聯機示意圖 簡單的聯機流程就如上圖所示,至于聯機的步驟是這樣的: 1. 建立命令通道的聯機 如上圖所示,客戶端會隨機取一個大于 1024 以上的埠口 (port AA) 來與 FTP 服務器端的 port 21 達成聯機, 這個過程當然需要三向交握了!達成聯機后客戶端便可以透過這個聯機來對 FTP 服務器下達指令, 包括查詢檔名、下載、上傳等等指令都是利用這個通道來下達的; 2. 通知 FTP 服務器端使用 active 且告知連接的埠號 FTP 服務器的 21 埠號主要用在命令的下達,但是當牽涉到數據流時,就不是使用這個聯機了。 客戶端在需要數據的情況下,會告知服務器端要用什么方式來聯機,如果是主動式 (active) 聯機時, 客戶端會先隨機啟用一個埠口 (圖 21.1-1 當中的 port BB) ,且透過命令通道告知 FTP 服務器這兩個信息,并等待 FTP 服務器的聯機; 3. FTP 服務器『主動』向客戶端聯機 FTP 服務器由命令通道了解客戶端的需求后,會主動的由 20 這個埠號向客戶端的 port BB 聯機, 這個聯機當然也會經過三向交握啦!此時 FTP 的客戶端與服務器端共會建立兩條聯機,分別用在命令的下達與數據的傳遞。 而預設 FTP 服務器端使用的主動聯機埠號就是 port 20 啰! 如此一來則成功的建立起『命令』與『數據傳輸』兩個信道!不過,要注意的是, 『數據傳輸信道』是在有數據傳輸的行為時才會建立的通道喔!并不是一開始連接到 FTP 服務器就立刻建立的通道呢!留意一下啰! - 主動式聯機使用到的埠號 利用上述的說明來整理一下 FTP 服務器端會使用到的埠號主要有: - 命令通道的 ftp (默認為 port 21) 與 - 數據傳輸的 ftp-data (默認為port 20)。 再強調一次,這兩個埠口的工作是不一樣的,而且,重要的是兩者的聯機發起端是不一樣的!首先 port 21 主要接受來自客戶端的主動聯機,至于 port 20 則為 FTP 服務器主動聯機至客戶端呢!這樣的情況在服務器與客戶端兩者同時為公共 IP (Public IP) 的因特網上面通常沒有太大的問題,不過,萬一你的客戶端是在防火墻后端,或者是 NAT 服務器后端呢?會有什么問題發生呢?底下我們來談一談這個嚴重的問題! - 在主動聯機的 FTP 服務器與客戶端之間具有防火墻的聯機問題 回想一下我們的[第九章防火墻](http://linux.vbird.org/linux_server/0250simple_firewall.php)! 一般來說,很多的局域網絡都會使用防火墻 (iptables) 的 NAT 功能,那么在 NAT 后端的 FTP 用戶如何連接到 FTP 服務器呢? 我們可以簡單的以下圖來說明: ![](https://box.kancloud.cn/2016-05-13_5735da7e60d33.gif) 圖 21.1-2、 FTP 客戶端與服務器端聯機中間具有防火墻的聯機狀態 1. 用戶與服務器間命令信道的建立: 因為 NAT 會主動的記錄由內部送往外部的聯機信息,而由于命令信道的建立是由客戶端向服務器端聯機的, 因此這一條聯機可以順利的建立起來的; 2. 用戶與服務器間數據信道建立時的通知: 同樣的,客戶端主機會先啟用 port BB ,并透過命令通道告知 FTP 服務器,且等待服務器端的主動聯機; 3. 服務器主動連到 NAT 等待轉遞至客戶端的聯機問題: 但是由于透過 NAT 的轉換后,FTP 服務器只能得知 NAT 的 IP 而不是客戶端的 IP , 因此 FTP 服務器會以 port 20 主動的向 NAT 的 port BB 發送主動聯機的要求。 但你的 NAT 并沒有啟動 port BB 來監聽 FTP 服務器的聯機啊! 了解問題的所在了嗎?在 FTP 的主動式聯機當中,NAT 將會被視為客戶端,但 NAT 其實并非客戶端啊, 這就造成問題了。如果你曾經在 IP 分享器后面連接某些 FTP 服務器時,可能偶爾會發現明明就連接上 FTP 服務器了 (命令通道已建立),但是就是無法取得文件名的列表,而是在超過一段時間后顯示『 Can't build data connection: Connection refused,無法進行數據傳輸』之類的訊息, 那肯定就是這個原因所造成的困擾了。 那有沒有辦法可以克服這個問題呢?難道真的在 Linux NAT 后面就一定無法使用 FTP 嗎?當然不是! 目前有兩個簡易的方法可以克服這個問題: - 使用 iptables 所提供的 FTP 偵測模塊: 其實 iptables 早就提供了許多好用的模塊了,這個 FTP 當然不會被錯過! 你可以使用 [modprobe](http://linux.vbird.org/linux_basic/0510osloader.php#kernel_load) 這個指令來加載 ip\_conntrack\_ftp 及 ip\_nat*ftp 等模塊,這幾個模塊會主動的分析『目標是 port 21 的聯機』信息, 所以可以得到 port BB 的資料,此時若接受到 FTP 服務器的主動聯機,就能夠將該封包導向正確的后端主機了! ^*^ 不過,如果你鏈接的目標 FTP 服務器他的命令通道默認端口號并非標準的 21 埠號時 (例如某些地下 FTP 服務器), 那么這兩個模塊就無法順利解析出來了,這樣說,理解嗎? - 客戶端選擇被動式 (Passive) 聯機模式: 除了主動式聯機之外,FTP 還提供一種稱為被動式聯機的模式,什么是被動式呢? 既然主動式是由服務器向客戶端聯機,反過來講,被動式就是由客戶端向服務器端發起聯機的啰! 既然是由客戶端發起聯機的,那自然就不需要考慮來自 port 20 的聯機啦!關于被動式聯機模式將在下一小節介紹喔! - - \* ### 21.1.3 客戶端選擇被動式聯機模式 那么什么是被動式聯機呢?我們可以使用底下的圖示來作個簡略的介紹喔: ![](https://box.kancloud.cn/2016-05-13_5735da7e71bdc.gif) 圖 21.1-3、FTP 的被動式數據流聯機流程 1. 用戶與服務器建立命令信道: 同樣的需要建立命令通道,透過三向交握就可以建立起這個通道了。 2. 客戶端發出 PASV 的聯機要求: 當有使用數據信道的指令時,客戶端可透過命令通道發出 PASV 的被動式聯機要求 (Passive 的縮寫), 并等待服務器的回應; 3. FTP 服務器啟動數據端口,并通知客戶端聯機: 如果你的 FTP 服務器是能夠處理被動式聯機的,此時 FTP 服務器會先啟動一個埠口在監聽。 這個端口號碼可能是隨機的,也可以自定義某一范圍的埠口,端看你的 FTP 服務器軟件而定。 然后你的 FTP 服務器會透過命令通道告知客戶端該已經啟動的埠口 (圖中的 port PASV), 并等待客戶端的聯機。 4. 客戶端隨機取用大于 1024 的埠口進行連接: 然后你的客戶端會隨機取用一個大于 1024 的端口號來對主機的 port PASV 聯機。 如果一切都順利的話,那么你的 FTP 數據就可以透過 port BB 及 port PASV 來傳送了。 發現上面的不同點了嗎?被動式 FTP 數據信道的聯機方向是由客戶端向服務器端聯機的喔! 如此一來,在 NAT 內部的客戶端主機就可以順利的連接上 FTP Server 了!但是,萬一 FTP 主機也是在 NAT 后端那怎么辦...呵呵!那可就糗了吧~ @\_@這里就牽涉到更深入的 DMZ 技巧了,我們這里暫不介紹這些深入的技巧,先理解一下這些特殊的聯機方向, 這將有助于你未來服務器架設時候的考慮因素喔! 此外,不曉得你有無發現,透過 PASV 模式,服務器在沒有特別設定的情況下,會隨機選取大于 1024 的埠口來提供客戶端連接之用。那么萬一服務器啟用的埠口被搞鬼怎么辦?而且, 如此一來也很難追蹤來自入侵者攻擊的登錄信息啊!所以,這個時候我們可以透過 passive ports 的功能來『限定』服務器啟用的 port number 喔! - - - - - - ### 21.1.4 FTP 的安全性問題與替代方案 其實,在 FTP 上面傳送的數據很可能被竊取,因為 FTP 是明碼傳輸的嘛!而且某些 FTP 服務器軟件的資安歷史問題也是很嚴重的。 因此,一般來說,除非是學校或者是一些社團單位要開放沒有機密或授權問題的資料之外,FTP 是少用為妙的。 拜 [SSH](http://linux.vbird.org/linux_server/0310telnetssh.php) 所賜,目前我們已經有較為安全的 FTP 了,那就是 ssh 提供的 sftp 這個 server 啊!這個 sftp-server 最大的優點就是:『在上面傳輸的數據是經過加密的』!所以在因特網上面流竄的時候, 嘿嘿!畢竟是比較安全一些啦!所以建議你,除非必要,否則的話使用 SSH 提供的 sftp-server 功能即可~ 然而這個功能對于一些習慣了圖形接口,或者是有中文檔名的使用者來說,實在是不怎么方便, 雖說目前有個圖形接口的 filezilla 客戶端軟件,不過很多時候還是會發生一些莫名的問題說! 所以,有的時候 FTP 網站還是有其存在的需要的。如果真的要架設 FTP 網站,那么還是得需要注意幾個事項喔: 1. 隨時更新到最新版本的 FTP 軟件,并隨時注意漏洞訊息; 2. 善用 iptables 來規定可以使用 FTP 的網域; 3. 善用 TCP\_Wrappers 來規范可以登入的網域; 4. 善用 FTP 軟件的設定來限制使用你 FTP 服務器的使用者的不同權限啊; 5. 使用 Super daemon 來進階管理你的 FTP 服務器; 6. 隨時注意用戶的家目錄、以及匿名用戶登入的目錄的『檔案權限』; 7. 若不對外公開的話,或許也可以修改 FTP 的 port 。 8. 也可以使用 FTPs 這種加密的 FTP 功能! 無論如何,在網絡上聽過太多人都是由于開放 FTP 這個服務器而導致整個主機被入侵的事件,所以, 這里真的要給他一直不斷的強調,要注意安全啊! - - - - - - ### 21.1.5 開放什么身份的使用者登入 既然 FTP 是以明碼傳輸,并且某些早期的 FTP 服務器軟件也有不少的安全漏洞,那又為何需要架設 FTP 服務器啊? 沒辦法啊,總是有人有需要這個玩意兒的,譬如說各大專院校不就有提供 FTP 網站的服務嗎? 這樣可以讓校內的同學共同分享校內的網絡資源嘛!不過,由于 FTP 登入者的身份可以分為三種, 你到底要開放哪一種身份登入呢?這個時候你可以這樣簡單的思考一下啰: - 開放實體用戶的情況 (Real user): 很多的 FTP 服務器默認就已經允許實體用戶的登入了。不過,需要了解的是,以實體用戶做為 FTP 登入者身份時, 系統默認并沒有針對實體用戶來進行『限制』的,所以他可以針對整個文件系統進行任何他所具有權限的工作。 因此,如果你的 FTP 使用者沒能好好的保護自己的密碼而導致被入侵,那么你的整個 Linux 系統數據將很有可能被竊取啊! 開放實體用戶時的建議如下: - 使用替代的 FTP 方案較佳: 由于實體用戶本來就可以透過網絡連接到主機來進行工作 (例如 SSH),因此實在沒有需要特別的開放 FTP 的服務啊!因為例如 sftp 本來就能達到傳輸檔案的功能啰! - 限制用戶能力,如 chroot 與 /sbin/nologin 等: 如果確定要讓實體用戶利用 FTP 服務器的話,那么你可能需要讓某些系統賬號無法登入 FTP 才行,例如 bin, apache 等等。 最簡單常用的作法是透過 PAM 模塊來處理,譬如 vsftpd 這個軟件默認可以透過 /etc/vsftpd/ftpusers 這個檔案來設定不想讓他具有登入 FTP 的賬號。另外,將使用者身份 chroot 是相當需要的! - 訪客身份 (Guest) 通常會建立 guest 身份的案例當中,多半是由于服務器提供了類似『個人 Web 首頁』的功能給一般身份用戶, 那么這些使用者總是需要管理自己的網頁空間吧?這個時候將使用者的身份壓縮成為 guest ,并且將他的可用目錄設定好,即可提供使用者一個方便的使用環境了!且不需要提供他 real user 的權限喔! 常見的建議如下: - 僅提供需要登入的賬號即可,不需要提供系統上面所有人均可登入的環境啊! - 當然,我們在服務器的設定當中,需要針對不同的訪客給他們不一樣的『家目錄』, 而這個家目錄與用戶的權限設定需要相符合喔!例如要提供 dmtsai 這個人管理他的網頁空間,而他的網頁空間放置在 /home/dmtsai/www 底下,那我就將 dmtsai 在 FTP 提供的目錄僅有 /home/dmtsai/www 而已,比較安全啦!而且也方便使用者啊! - 針對這樣的身份者,需要設定較多的限制,包括:上下傳檔案數目與硬盤容量的限制、 聯機登入的時間限制、許可使用的指令要減少很多很多,例如 chmod 就不要允許他使用等等! - 匿名登錄使用者 (anonymous) 雖然提供匿名登錄給因特網的使用者進入實在不是個好主意,因為每個人都可以去下載你的數據, 萬一帶寬被吃光光怎么辦?但如同前面講過的,學校單位需要分享全校同學一些軟件資源時, FTP 服務器也是一個很不錯的解決方案啊!你說是吧。如果要開放匿名用戶的話,要注意: - 無論如何,提供匿名登錄都是一件相當危險的事情,因為只要你一不小心, 將重要的資料放置到匿名者可以讀取的目錄中時,那么就很有可能會泄密!與其戰戰兢兢,不如就不要設定啊~ - 果真要開放匿名登錄時,很多限制都要進行的,這包括:(1)允許的工作指令要減低很多, 幾乎就不許匿名者使用指令啦、(2)限制文件傳輸的數量,盡量不要允許『上傳』數據的設定、 (3)限制匿名者同時登入的最大聯機數量,可以控制盜連喔! 一般來說,如果你是要放置一些公開的、沒有版權糾紛的數據在網絡上供人下載的話, 那么一個僅提供匿名登錄的 FTP 服務器,并且對整個因特網開放是 OK 的啦! 不過,如果你預計要提供的的軟件或數據是具有版權的,但是該版權允許你在貴單位內傳輸的情況下, 那么架設一個『僅針對內部開放的匿名 FTP 服務器 (利用防火墻處理) 』也是 OK 的啦! 如果你還想要讓使用者反饋的話,那是否要架設一個匿名者可上傳的區域呢?鳥哥對這件事情的看法是.... 『萬萬不可』啊!如果要讓使用者反饋的話,除非該使用者是你信任的,否則不要允許對方上傳! 所以此時一個文件系統權限管理嚴格的 FTP 服務器,并提供實體用戶的登入就有點需求啦! 總之,要依照你的需求來思考是否有需要喔! - - - - - -
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看