1. 程式人生 > >Linux下搭建FTP服務器

Linux下搭建FTP服務器

私房菜 grep 處理 inux lin 擁有 能夠 指定 oot

一、搭建環境

阿裏雲 CentOS 7.3 64位

二、FTP協議基礎知識

2.1 簡介

FTP 是 File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文件協議”。用於 Internet 上的控制文件的雙向傳輸。

2.2 FTP的運作流程與使用端口

FTP 的傳輸使用的是 TCP 傳輸協議,由於 FTP 服務的特點是數據量大、控制信息相對較少,因此在設計的時分別對控制信息與數據進行處理的方式,這樣用於通信的 TCP 連接有兩個:控制連接與數據連接。其中,控制連接用於在通信雙方之間傳輸 FTP 命令與響應信息,完成連接建立、身份認證與異常處理等控制操作;數據連接用於在通信雙方之間傳輸文件或目錄信息。

FTP支持兩種模式:Standard(PORT方式,主動方式),Passive(PASV,被動方式)。

2.2.1 PORT 方式

技術分享圖片

圖1 FTP服務器的 PORT 方式示意圖

至於連接的過程是這樣的:

(1) 建立命令通道的連接

如上圖所示,用戶端會隨機取一個大於1024以上的端口(port AA)來與FTP服務器端的port 21進行連接,這個過程當然需要經歷TCP的三次握手!完成連接後用戶端便可透過這個連接來對TCP服務器下達指令,包括查詢文件名、下載、上傳等等指令都是利用這個通道來下達的。

(2)通知FTP服務器端使用 active 且告知連接的端口號

FTP 服務器的 21 端口主要用在命令下達,但是當關系到數據流時,就不是使用這個連接了。用戶端在需要數據的情況下,會告知服務器端需要用什麽方式來連接,如果是 PORT 模式時,用戶端會先隨機啟用一個端口(圖中的port BB),且通過命令通道告知 FTP 服務器這兩個信息,並等待 FTP 服務器的連接。

(3)FTP服務器【主動】向用戶端連接

FTP 服務器由命令通道了解用戶端的需求後,會主動的由 20 這個端口向用戶端的 port BB 連接,這個連接當然也會經歷 TCP 的三次握手!此時 FTP 的用戶端與服務器端會建立兩條連線,分別用在命令的下達與數據的傳送。而預設 FTP 服務器端使用的主動連接端口就是port 20。

2.2.2 PASV 方式

技術分享圖片

圖2 FTP服務器的 PASV 方式示意圖

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

同樣的需要建立命令通道,通過三次握手就可以建立起這個通道了。

(2)用戶端發出PASV的連接請求

當有使用數據通道的指令時,用戶端可通過命令通道發出 PASV 的被動式連接要求(Passive 的縮寫),並等待服務器的回應。

(3)FTP服務器啟動數據端口,並通知用戶端連接

如果你的 FTP 服務器能夠處理被動式連接,此時 FTP 服務器會先啟動一個端口在監聽。這個端口號碼可能是隨機的,也可以是某一範圍的端口,具體看你的 FTP 服務器軟件而定。然後你的 FTP 服務器會通過命令通道告知用戶端已經啟動的端口(圖中的 port PASV),並等待用戶端的連接。

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

然後你的用戶端會隨機取用一個大於 1024 的端口號來對主機的 port PASV 連接。

2.3 用戶分類

2.2.1 Real賬戶

這類用戶是指在FTP服務上擁有賬號。當這類用戶登陸FTP服務器的時候,其默認的主目錄就是其賬號命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。

2.2.2 Guest用戶

在FTP服務器中,我們往往會給不同的部門或者某個特定的用戶設置一個帳戶。但是,這個賬戶有個特點,就是其只能夠訪問自己的主目錄。服務器通過這種方式來保障FTP服務上其他文件的安全性。這類帳戶,在Vsftpd軟件中就叫做Guest用戶。擁有這類用戶的帳戶,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的文件。

2.2.3 Anonymous(匿名)用戶

這也是我們通常所說的匿名訪問。這類用戶是指在FTP服務器中沒有指定帳戶,但是其仍然可以進行匿名訪問某些公開的資源。

三、VSFTP

3.1 簡介

VSFTP 是一個基於 GPL 發布的類 Unix 系統上使用的 FTP 服務器軟件,它的全稱是 Very Secure FTP。

3.2 安裝

查看是否裝有 vsftpd 服務。

rpm -qa | grep vsftpd

若不存在,則使用 yum 命令直接安裝:

yum -y install vsftpd

3.3 配置 vsftpd

修改配置文件,默認路徑為 /etc/vsftpd/vsftpd.conf,命令如下。

vim /etc/ftpd/ftpd.conf

以下為需要修改或添加的配置項。

  • anonymous_enable=NO #不允許匿名用戶登陸
  • chroot_list_enable=YES #chroot_list_file 指定文件中指定的用戶禁錮在其主目錄中
  • chroot_list_file=/etc/vsftpd/chroot_list

在 /etc/vsftpd 目錄下建立文件 chroot_list,命令如下

cd /etc/vsftpd
touch chroot_list

在 chroot_list 裏添加 FTP 用戶的用戶名,每個用戶一樣,這裏我添加的用戶名為 symind。

3.4 添加 FTP 用戶組及用戶

添加一個用戶組,這裏我命名為 webftp。

groupadd webftp

在用戶組中添加用戶,並指定用戶的主目錄。

useradd -g webftp -M -d /home/www -s /sbin/nologin symind

設置密碼。

passwd symind

修改目錄擁有者。

chown -R symind.webftp /home/www

修改目錄權限,vsftp 默認要求如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了。

chmod u=rx /home/www

也可以更改 vsftpd 的配置,allow_writeable_chroot=YES。

參考文獻

1. 百度百科 - ftp(文件傳輸協議) https://baike.baidu.com/item/ftp/13839?fr=aladdin

2. 百度百科 - VSFTP https://baike.baidu.com/item/VSFTP/2596628?fr=aladdin

3. 鳥哥的 Linux 私房菜 - 檔案伺服器之三 http://linux.vbird.org/linux_server/0410vsftpd.php

4. vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot()錯誤的解決方法 http://blog.csdn.net/bluishglc/article/details/42399439

5. CentOS下vsftp設置、匿名用戶&本地用戶設置、PORT、PASV模式設置 http://desert3.iteye.com/blog/1685734

Linux下搭建FTP服務器