ftp服務(wù)概述
FTP,全稱是File transfer protocol,即文件傳輸協(xié)議,是最常用的文件共享和文件傳輸方式。FTP常用的數(shù)據(jù)傳輸模式有2種,分別是主動傳輸模式(PORT FTP)和被動傳輸模式(PASV FTP)。
主動傳輸模式就是一般形式的FTP,首先由client建立傳輸請求,client通過PORT與服務(wù)端建立連接,然后,F(xiàn)TP server端使用一個標(biāo)準(zhǔn)的20端口作為服務(wù)器端的數(shù)據(jù)連接端口,與客戶端建立數(shù)據(jù)傳輸連接,并通過20端口傳輸數(shù)據(jù)。這里的端口20僅僅用于連接源地址是服務(wù)器的情況,同時端口20沒有進(jìn)程來檢測client請求。
被動傳輸模式與PORT FTP類似,也是由client建立傳輸請求,client通過PASV命令與服務(wù)端建立連接,但是FTP服務(wù)端并不建立連接,而是等待client與其聯(lián)系,默認(rèn)情況下,服務(wù)端會通過非20端口的其它端口檢測client請求。
由此我們可知兩種傳輸模式的差異:PORT FTP模式下的數(shù)據(jù)傳輸port是由FTP server指定,而PASV FTP模式下的數(shù)據(jù)傳輸port是由FTP client 決定。通常使用PASV FTP模式是用于有防火墻的環(huán)境下,透過client與server的溝通,決定數(shù)據(jù)傳輸?shù)膒ort。
Linux下有很多FTP server軟件,比較常見的有WU-FTP,VSFTP等,WU-FTP功能強大,在linux早期的版本中,都自帶了這個軟件,不過VSFTP是后起之秀,VSFTP非常安全,同時還具有高速和穩(wěn)定的優(yōu)點,因此在現(xiàn)在的linux版本中都默認(rèn)自帶了VSFTP軟件包,而拋棄了WU-FTP。
VSFTP的安裝與配置
本節(jié)我們以linux下rpm包方式進(jìn)行安裝vsftp軟件,操作系統(tǒng)版本為Red Hat Enterprise Linux Server release 5。
1.安裝vsftp
檢查vsftp是否已經(jīng)安裝,執(zhí)行如下命令:
[root@localhost ~]#rpm -qa|grep vsftpd
沒有任何輸出,表示vsftp軟件還沒有安裝。從系統(tǒng)的第二張光盤可找到vsftp對應(yīng)的安裝包vsftpd-2.0.5-10.el5.i386.rpm。
然后進(jìn)行安裝:
[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已經(jīng)安裝成功。
2.配置vsftp
Vsftp相關(guān)的配置文件都在/etc/vsftpd目錄,默認(rèn)文件如下:
[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文件的詳細(xì)含義。
[root@localhost ~]#vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
是否允許匿名登錄ftp,這里選擇YES,反之,選擇NO。
local_enable=YES
是否允許本地用戶登錄,這里選擇YES,反之,選擇NO。
write_enable=YES
開放本地用戶的寫權(quán)限。
local_umask=022
默認(rèn)的umask碼,設(shè)置本地用戶的文件生成掩碼為022。
anon_upload_enable=NO
禁止匿名上傳文件。
anon_mkdir_write_enable=NO
是否允許匿名用戶有創(chuàng)建目錄的權(quán)利。這里選擇NO。
dirmessage_enable=YES
是否顯示目錄下的說明文件,默認(rèn)是YES,但需要手工創(chuàng)建.message文件。
xferlog_enable=YES
是否記錄ftp傳輸過程,如果開啟記錄,那么上傳與下載的信息將被完整紀(jì)錄在下面xferlog_file所指定的文件中。預(yù)設(shè)為開啟狀態(tài)。
connect_from_port_20=YES
啟用FTP數(shù)據(jù)端口的連接請求,若設(shè)為YES,則強迫服務(wù)端ftp-data的數(shù)據(jù)傳送使用port 20。默認(rèn)值為YES。
#chown_uploads=YES
若是啟動,所有匿名上傳數(shù)據(jù)的擁有者將被更換為chown_username 指定的用戶。這個選項對于安全及管理,是非常有用的。默認(rèn)值為NO。這里注釋此選項,也就是采用默認(rèn)值。
#chown_username=whoever
這里定義當(dāng)匿名登入者上傳文件時,該文件所有者將被替換為chown_username設(shè)定的用戶名稱。預(yù)設(shè)值為root。注意chown_username指定的用戶必須是系統(tǒng)存在的。這里注釋此選項,采用默認(rèn)值。
xferlog_file=/var/log/vsftpd.log
指定ftp傳輸日志的路徑和名字默認(rèn)是/var/log/vsftpd.log
xferlog_std_format=YES
是否使用標(biāo)準(zhǔn)的ftp xferlog模式
idle_session_timeout=600
設(shè)置FTP默認(rèn)的斷開不活躍session時間
data_connection_timeout=120
設(shè)置數(shù)據(jù)傳輸超時時間
nopriv_user=nobody
指定運行vsftpd的非特權(quán)系統(tǒng)用戶為nobody。
async_abor_enable=YES
是否允許運行特殊的ftp命令async
#ascii_upload_enable=YES
#ascii_download_enable=YES
是否使用ascii碼方式上傳和下載文件,這里注釋此選項,采用默認(rèn)值。
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后均可進(jìn)到自己根目錄之外的其它目錄,除了在/etc/vsftpd/chroot_list文件指定的使用者之外,默認(rèn)值為NO,這里選擇YES。
ls_recurse_enable=YES
若是啟動此功能,則允許登入者使用ls -R 這個指令,默認(rèn)值為NO,這里選擇YES。
pam_service_name=vsftpd
設(shè)置PAM認(rèn)證服務(wù)的配置文件名稱,該文件存放于/etc/pam.d/目錄下。
userlist_enable=YES
若是啟動此功能,則會讀取/etc/vsftpd/user_list 當(dāng)中的使用者名稱。此項功能可以在詢問密碼前就給出登錄失敗信息,而不需要執(zhí)行檢驗密碼程序,默認(rèn)值為關(guān)閉,這里選擇YES。
userlist_deny=NO
這個選項只有在userlist_enable 啟動時才會被激活使用。
如果將這個選項設(shè)為YES,則在/etc/vsftpd/user_list中的使用者將無法登入FTP服務(wù)器;
若設(shè)為NO,則只有在/etc/vsftpd/user_list中的使用者才能登入。而且此項功能可以在詢問密碼前就出現(xiàn)錯誤訊息,而不需要檢驗密碼的程序,這里設(shè)置為NO。
listen=YES
若設(shè)置為YES,表示vsftpd 將以獨立運作的方式執(zhí)行,在較新的linux版本中,vsftpd都是以獨立的方式啟動的,這里選擇YES。
tcp_wrappers=YES
設(shè)置為YES,表示將vsftpd與TCP_wrapper結(jié)合使用。也就是可以在/etc/hosts.allow與/etc/hosts.deny中設(shè)定允許連接或是拒絕連接的來源地址。這里選擇YES。
3.創(chuàng)建FTP用戶
FTP配置完畢,接下來我們創(chuàng)建一個能訪問FTP服務(wù)器的用戶,其實就是在FTP服務(wù)器上添加一個系統(tǒng)用戶,例如要添加ixdba這個用戶,執(zhí)行如下操作:
[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資源,而不能登錄系統(tǒng),也就是建立FTP虛擬用戶,操作如下:
[root@localhost ~]#userdel -r ixdba
[root@localhost ~]#useradd -g ftp -s /sbin/nologin ixdba
Changing password for user ixdba
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
上面先刪除了原來建立的ixdba用戶,然后創(chuàng)建了一個屬于ftp組,但是不能登錄操作系統(tǒng)的用戶。
接著將這個用戶導(dǎo)入到允許訪問列表即可:
[root@localhost ~]#echo “ixdba”>>/etc/vsftpd/user.list
4.測試vsftp
在測試ftp功能之前,先啟動vsftp服務(wù),執(zhí)行如下:
啟動vsftpd服務(wù)
[root@localhost ~]#/etc/init.d/vsftpd start
停止vsftpd服務(wù)
[root@localhost ~]#/etc/init.d/vsftpd stop
重啟vsftpd服務(wù)
[root@localhost ~]#/etc/init.d/vsftpd restart
接著測試ftp配置是否成功,看下面的操作演示:
[root@localhost vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1.
220 Welcome to blah FTP WWW.IXDBA.NET
530 Please login with USER and PASS.
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后的當(dāng)前目錄,其實就是系統(tǒng)用戶的主目錄)
257 "/home/ixdba"
ftp> mkdir ftp_data (創(chuàng)建一個目錄)
257 "/home/ixdba/ftp_data" created
ftp> ? (輸入”?”即可顯示在ftp命令行下可執(zhí)行的所有命令)
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是虛擬用戶,因此無法登錄系統(tǒng))
當(dāng)然,我們也可以通過瀏覽器輸入ftp://ip地址/的方式訪問ftp服務(wù)器,這個自己測試一下就可以了。
到此為止,一臺FTP服務(wù)器已經(jīng)架設(shè)完畢了。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。