天天看點

FTP介紹及源碼安裝

一、原理介紹       

      FTP是TCP/IP的一種具體應用,,它工作在OSI模型的第七層,TCP模型的第四層上,即應用層,以TCP資料包的模式進行伺服器與用戶端之間的連接配接,這樣FTP客戶在和伺服器建立連接配接前就要經過一個被廣為熟知的"三次握手"的過程,它帶來的意義在于客戶與伺服器之間的連接配接是可靠的,而且是面向連接配接,為資料的傳輸提供了可靠的保證。

二、功能介紹

  1、在client端和server端之間進行檔案的傳輸。client可以連接配接到ftp server端進行檔案的上傳下載下傳和管理。

   2、預設情況下根據使用者登入情況把使用者分為三種不同的身份:實體賬号(real user )、訪客(guest)、匿名使用者(anonymous),三種身份對應的不同權限

 3、指令和日志檔案記錄。記錄使用者曾使用的指令和使用者傳輸資料的情況

 4、限制或解除使用者預設目錄,避免使用者切換到系統其它目錄下搞破壞。

三、連接配接模式及流程

     主動模式: 

1、client 随機用一個大于1024的端口經過三次握手後連接配接伺服器的 21端口(指令端口),然後通過這個連接配接對server下達指令

2、當需要傳輸資料時client再開放一個大于1024的端口AA,并通過控制傳輸通道通知伺服器來連接配接

3、伺服器就用20去連接配接client開放的AA端口,簡單來說就是伺服器主動連用戶端啦。

基于上面的連接配接方式,資料通道是在有資料傳輸時才會建立,如果client端有個防火牆,伺服器的20端口就連接配接不進入,導緻會連接配接失敗。

被動模式: 

1、client開啟大于1024的X端口連接配接伺服器的21端口,建立起指令通道。

2、當21号端口連接配接成功後,client會發送PASV連接配接要求,通知伺服器自己處于被動模式

3、伺服器收到這個消息後,就會開放一個大于1024的端口Y通知client

4、client接到通知後就會用一個大于1024的端口來連接配接伺服器的Y端口,來建立資料傳輸通道。簡單的說就是client主動連接配接伺服器

    這個模式沒用到20端口。

一般我們使用的是主動模式 

四、需要注意的安全性問題

架設FTP伺服器時需要注意以下問題:

 1、随時更新到最新版本的FTP軟體,并注意漏洞問題

 2、善用iptables或TCP_Wrappers來限制可以登入的網段

 3、善用FTP軟體的設定來限制FTP使用者的不同權限

4、使用super daemon來管理FTP 主機

 5、注意使用者預設的目錄和匿名使用者登入目錄的權限

 6、若不對外公開,可以修改FTP的端口

五、部署FTP伺服器

FTP可以通過很多軟體實作,但傳統的ftp協定是明文傳輸的,我們linux下面最常用的FTP伺服器架設使用vsftpd軟體 ,它最大的優點是傳輸的資訊是經過加密的。

安裝軟體:vsftpd-2.3.4   到官網下載下傳的最新版

Step 1) 下載下傳軟體并解壓到在/usr/local/src下,make生成可執行檔案vsftpd

[root@localhost ~]# cd /usr/local/src/vsftpd-2.3.4/

[root@localhost vsftpd-2.3.4]# make                              

[root@localhost vsftpd-2.3.4]# ll vsftpd

-rwxr-xr-x 1 root root 107600 04-25 10:36 vsftp

Step 2) 確定系統有vsftp安裝需要的使用者和目錄 

[root@localhost vsftpd-2.3.4]# useradd nobody

[root@localhost vsftpd-2.3.4]# mkdir /usr/share/empty/

[root@localhost vsftpd-2.3.4]# mkdir /var/ftp/

[root@localhost vsftpd-2.3.4]# useradd -d /var/ftp ftp

[root@localhost vsftpd-2.3.4]# chown root   root /var/ftp

[root@localhost vsftpd-2.3.4]# chmod  og -w  /var/ftp

[root@localhost vsftpd-2.3.4]#

Step 3) 安裝并複制配置檔案到 /etc 目錄下

   [root@rhel4 vsftpd-1.2.1]# make install

if [ -x /usr/local/sbin ]; then \

        install -m 755 vsftpd /usr/local/sbin/vsftpd; \

else \

        install -m 755 vsftpd /usr/sbin/vsftpd; fi

if [ -x /usr/local/man ]; then \

        install -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \

        install -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \

elif [ -x /usr/share/man ]; then \

        install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \

        install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \

        install -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \

        install -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi

install: 無法建立一般檔案‘/usr/local/man/man8/vsftpd.8’: 沒有那個檔案或目錄

install: 無法建立一般檔案‘/usr/local/man/man5/vsftpd.conf.5’: 沒有那個檔案或目錄   

如果make install出現以下錯誤可以手動執行以下三條指令,make install 指令的功能就是執行以下三條指令,複制二進制檔案到指定目錄下

cp vsftpd /usr/local/sbin/vsftpd

cp vsftpd.conf.5 /usr/local/man/man5

cp vsftpd.8 /usr/local/man/man8

或修改Makefile

  [root@rhel4 vsftpd-1.2.1]# vi Makefile

install:

        if [ -x /usr/local/sbin ]; then \

                $(INSTALL) -m 755 vsftpd /usr/local/sbin/vsftpd; \

        else \

                $(INSTALL) -m 755 vsftpd /usr/sbin/vsftpd; fi

        if [ -x /usr/share/man ]; then \

                $(INSTALL) -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \

                $(INSTALL) -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \

        elif [ -x /usr/local/man ]; then \

                $(INSTALL) -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \

                $(INSTALL) -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \

                $(INSTALL) -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \

                $(INSTALL) -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi

        if [ -x /etc/xinetd.d ]; then \

                $(INSTALL) -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi

複制配置檔案到/etc/下

    [root@rhel4 vsftpd-1.2.1]# cp vsftpd.conf /etc                             

   Step 4) 打開監聽端口并啟動FTP服務

 [root@localhost vsftpd-2.3.4]# vim /etc/vsftpd.conf

        listen=YES

[root@localhost ~]# /usr/local/sbin/vsftpd  &

現在,可以匿名登入FTP伺服器了

[root@localhost ~]# ftp localhost

Connected to localhost.localdomain.

220 (vsFTPd 2.3.4)

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (localhost:root): ftp

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

繼續閱讀