ftp服務概述
FTP,全稱是File transfer protocol,即檔案傳輸協定,是最常用的檔案共享和檔案傳輸方式。FTP常用的資料傳輸模式有2種,分别是主動傳輸模式(PORT FTP)和被動傳輸模式(PASV FTP)。
主動傳輸模式就是一般形式的FTP,首先由client建立傳輸請求,client通過port PORT與服務端建立連接配接,然後,FTP server端使用一個标準的20端口作為伺服器端的資料連接配接端口,與用戶端建立資料傳輸連接配接,并通過20端口傳輸資料。這裡的端口20僅僅用于連接配接源位址是伺服器的情況,同時端口20沒有程序來檢測client請求。
被動傳輸模式與PORT FTP類似,也是由client建立傳輸請求,client通過PASV指令與服務端建立連接配接,但是FTP服務端并不建立連接配接,而是等待client與其聯系,預設情況下,服務端會通過非20端口的其它端口檢測client請求。
由此我們可知兩種傳輸模式的差異:PORT FTP模式下的資料傳輸port是由FTP server指定,而PASV FTP模式下的資料傳輸port是由FTP client 決定。通常使用的是PASV FTP模式, 用于有防火牆的環境下,透過client與server的溝通,決定資料傳輸的port。
Linux下有很多FTP server軟體,比較常見的有WU-FTP,VSFTP等,WU-FTP功能強大,在linux早期的版本中,都自帶了這個軟體,不過VSFTP是後起之秀,VSFTP非常安全,同時還具有高速和穩定的優點,是以在現在的linux版本中都預設自帶了VSFTP軟體包,而抛棄了WU-FTP。
VSFTP的安裝與配置
本節我們以linux下rpm包方式進行安裝vsftp軟體,作業系統版本為Red Hat Enterprise Linux Server release 5。
1.安裝vsftp
檢查vsftp是否已經安裝,執行如下指令:
[root@localhost ~]#rpm -qa|grep vsftpd
沒有任何輸出,表示vsftp軟體還沒有安裝。從系統的第二張CD光牒可找到vsftp對應的安裝包vsftpd-2.0.5-10.el5.i386.rpm。
然後進行安裝:
[root@localhost ~]#rpm -ivh vsftpd-2.0.5-10.el5.i386.rpm
warning: vsftpd-2.0.5-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:vsftpd ########################################### [100%]
[root@localhost ~]# rpm -qa vsftpd
vsftpd-2.0.5-10.el5
可以看到,vsftp已經安裝成功。
2.配置vsftp
Vsftp相關的配置檔案都在/etc/vsftpd目錄,預設檔案如下:
[root@localhost ~]# ll /etc/vsftpd/
total 20
-rw------- 1 root root 125 Jan 18 2007 ftpusers
-rw------- 1 root root 361 Jan 18 2007 user_list
-rw------- 1 root root 4397 Jan 18 2007 vsftpd.conf
-rwxr--r-- 1 root root 338 Jan 18 2007 vsftpd_conf_migrate.sh
其中,vsftpd.conf是vsftp的核心配置檔案,user.list是允許的使用者清單,而ftpusers是禁止的使用者清單。
下面具體講述vsftpd.conf檔案的詳細含義。
[root@localhost ~]#vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
是否允許匿名登入ftp,這裡選擇YES,反之,選擇NO。
local_enable=YES
是否允許本地使用者登入,這裡選擇YES,反之,選擇NO。
write_enable=YES
開放本地使用者的寫權限。
local_umask=022
預設的umask碼,設定本地使用者的檔案生成掩碼為022。
anon_upload_enable=NO
禁止匿名上傳檔案。
anon_mkdir_write_enable=NO
是否允許匿名使用者有建立目錄的權利。這裡選擇NO。
dirmessage_enable=YES
是否顯示目錄下的說明檔案,預設是YES,但需要手工建立.message檔案。
xferlog_enable=YES
是否記錄ftp傳輸過程,如果開啟記錄,那麼上傳與下載下傳的資訊将被完整紀錄在下面xferlog_file所指定的檔案中。預設為開啟狀态。
connect_from_port_20=YES
啟用FTP資料端口的連接配接請求,若設為YES,則強迫服務端ftp-data的資料傳送使用port 20。預設值為YES。
#chown_uploads=YES
若是啟動,所有匿名上傳資料的擁有者将被更換為chown_username 指定的使用者。這個選項對于安全及管理,是非常有用的。預設值為NO。這裡注釋此選項,也就是采用預設值。
#chown_username=whoever
這裡定義當匿名登入者上傳檔案時,該檔案所有者将被替換為chown_username設定的使用者名稱。預設值為root。注意chown_username指定的使用者必須是系統存在的。這裡注釋此選項,采用預設值。
xferlog_file=/var/log/vsftpd.log
指定ftp傳輸日志的路徑和名字預設是/var/log/vsftpd.log
xferlog_std_format=YES
是否使用标準的ftp xferlog模式
idle_session_timeout=600
設定FTP預設的斷開不活躍session時間
data_connection_timeout=120
設定資料傳輸逾時時間
nopriv_user=nobody
指定運作vsftpd的非特權系統使用者為nobody。
async_abor_enable=YES
是否允許運作特殊的ftp指令async
#ascii_upload_enable=YES
#ascii_download_enable=YES
是否使用ascii碼方式上傳和下載下傳檔案,這裡注釋此選項,采用預設值。
ftpd_banner=Welcome to blah FTP service.
定制登入FTP的歡迎資訊。輸入自己喜歡的登入歡迎語。
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
是否禁止匿名使用者使用某些郵件位址,如果是,在指定的檔案下輸入禁止的郵件位址的路徑和檔案名。這裡注釋此選項。
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
如果啟動這項功能,則所有的本機使用者登入FTP後均可進到自己根目錄之外的其它目錄,除了在/etc/vsftpd.chroot_list檔案指定的使用者之外,預設值為NO,這裡選擇YES。
ls_recurse_enable=YES
若是啟動此功能,則允許登入者使用ls -R 這個指令,預設值為NO,這裡選擇YES。
pam_service_name=vsftpd
設定PAM認證服務的配置檔案名稱,該檔案存放于/etc/pam.d/目錄下。
userlist_enable=YES
若是啟動此功能,則會讀取/etc/vsftpd/user_list 當中的使用者名稱。此項功能可以在詢問密碼前就給出登入失敗資訊,而不需要執行檢驗密碼程式,預設值為關閉,這裡選擇YES。
userlist_deny=NO
這個選項隻有在userlist_enable 啟動時才會被激活使用。
如果将這個選項設為YES,則在/etc/vsftpd/user_list中的使用者将無法登入FTP伺服器;
若設為NO,則隻有在/etc/vsftpd/user_list中的使用者才能登入。而且此項功能可以在詢問密碼前就出現錯誤訊息,而不需要檢驗密碼的程式,這裡設定為NO。
listen=YES
若設定為YES,表示vsftpd 将以獨立運作的方式執行,在較新的linux版本中,vsftpd都是以獨立的方式啟動的,這裡選擇YES。
tcp_wrappers=YES
設定為YES,表示将vsftpd與TCP_wrapper結合使用。也就是可以在/etc/hosts.allow與/etc/hosts.deny中設定允許連接配接或是拒絕連接配接的來源位址。這裡選擇YES。
3.建立FTP使用者
FTP配置完畢,接下來我們建立一個能通路FTP伺服器的使用者,其實就是在FTP伺服器上添加一個系統使用者,例如要添加ixdba這個使用者,執行如下操作:
[root@localhost ~]#useradd ixdba
[root@localhost ~]#passwd ixdba
Changing password for user ixdba
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
為了安全期間,我們希望讓登入FTP的使用者隻能用來通路FTP資源,而不能登入系統,也就是建立FTP虛拟使用者,操作如下:
[root@localhost ~]#userdel -r ixdba
[root@localhost ~]#useradd -g ftp -s /sbin/nologin ixdba
上面先删除了原來建立的ixdba使用者,然後建立了一個屬于ftp組,但是不能登入作業系統的使用者。
接着将這個使用者導入到允許通路清單即可:
[root@localhost ~]#echo “ixdba”>>/etc/vsftpd/user.list
4.測試vsftp
在測試ftp功能之前,先啟動vsftp服務,執行如下:
啟動vsftpd服務
[root@localhost ~]#/etc/init.d/vsftpd start
停止vsftpd服務
[root@localhost ~]#/etc/init.d/vsftpd stop
重新開機vsftpd服務
[root@localhost ~]#/etc/init.d/vsftpd restart
接着測試ftp配置是否成功,看下面的操作示範:
[root@localhost vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): ixdba (這裡是登入ftp的使用者名)
331 Please specify the password.
Password: (輸入密碼)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd (檢視登入ftp後的目前目錄,其實就是系統使用者的主目錄)
257 "/home/ixdba"
ftp> mkdir ftp_data (建立一個目錄)
257 "/home/ixdba/ftp_data" created
ftp> ? (輸入”?”即可顯示在ftp指令行下可執行的所有指令)
Commands may be abbreviated. Commands are:
! cr mdir proxy send
$ delete mget sendport site
account debug mkdir put size
append dir mls pwd status
ascii disconnect mode quit struct
bell form modtime quote system
binary get mput recv sunique
bye glob newer reget tenex
case hash nmap rstatus trace
ccc help nlist rhelp type
cd idle ntrans rename user
cdup image open reset umask
chmod lcd passive restart verbose
clear ls private rmdir ?
close macdef prompt runique
cprotect mdelete protect safe
ftp> cd /usr/local (嘗試切換到其它目錄)
250 Directory successfully changed.
ftp> pwd (可以切換到其它目錄下,因為在vsftp配置中開放了chroot_list_enable指令)
257 "/usr/local"
ftp> quit
221 Goodbye.
[root@localhost vsftpd]# su - ixdba
This account is currently not available. (這裡的ixdba是虛拟使用者,是以無法登入系統)
到此為止,一台FTP伺服器已經架設完畢了。
本文轉自南非螞蟻51CTO部落格,原文連結: http://blog.51cto.com/ixdba/526437,如需轉載請自行聯系原作者