一、原理介紹
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>