1. 程式人生 > >FTP伺服器安裝及配置檔案設定 (阿里雲ESC )

FTP伺服器安裝及配置檔案設定 (阿里雲ESC )

一、簡介

 FTP(檔案傳輸協議)全稱是:Very Secure FTP Server。   Vsftpd是linux類作業系統上執行的ftp伺服器軟體。 

vsftp提供三種登陸方式:1.匿名登入  2.本地使用者登入  3.虛擬使用者登入

vsftpd的特點:1.較高的安全性需求    2.頻寬的限制    3.建立支援虛擬使用者    4.支援IPV6    5.中等偏上的效能    6.可分配虛擬IP    7.高速

 Ftp會話時採用了兩種通道:

 控制通道:與Ftp伺服器進行溝通的通道,連結Ftp傳送ftp指令都是通過控制通道來完成的。

 資料通道:資料通道和Ftp伺服器進行檔案傳輸或則列表的通道 

二、工作原理

  Ftp協議中控制連線均是由客戶端發起,而資料連線有兩種工作方式:Port和Pasv方式

  Port模式(主動模式)--> 預設

  Ftp客戶端首先和Ftp server的tcp 21埠建立連線,通過這個通道傳送命令,客戶端要接受資料的時候在這個通道上傳送Port命令,Port命令包含了客戶端用什麼埠(一個大於1024的埠)接受資料,在傳送資料的時候,伺服器端通過自己的TCP 20埠傳送資料。這個時候資料連線由server向client建立一個連線。

 Port互動流程:

client端:client連結server的21埠,併發送使用者名稱密碼和一個隨機在1024上的埠及port命令給server,表明採用主動模式,並開放那個隨機的埠。

server端:server收到client發來的Port主動模式命令與埠後,會通過自己的20埠與client那個隨機的埠連線後,進行資料傳輸。

  Pasv模式(被動方式)

  建立控制通道和Port模式類似,當客戶端通過這個通道傳送Pasv命令的時候,Ftp server打開了一個位於1024和5000之間的隨機埠並且通知客戶端在這個埠上進行傳輸資料請求,然後Ftp server將通過這個埠進行資料傳輸。這個時候資料連線由client向server建立連線。

  Pasv互動流程

Clietn:client連線server的21號埠,傳送使用者名稱密碼及pasv命令給server,表明採用被動模式。

server:server收到client發來的pasv被動模式命令之後,把隨機開放在1024上的埠告訴client,client再用自己的20 埠與server的那個隨機埠進行連線後進行資料傳輸。

  如果從C/S模型這個角度來說,PORT對於伺服器來說是OUTBOUND,而PASV模式對於伺服器是INBOUND,這一點請特別注意,尤其是在使用防火牆的企業裡,這一點非常關鍵,如果設定錯了,那麼客戶將無法連線。

三、安裝vsftpd及相關軟體

yum -y install vsftpd*  pam*   db4*

vsftpd:ftp軟體      pam:認證模組       DB4:支援檔案資料庫

四、vsftpd的使用者管理:

   FTP伺服器對使用者的管理,在預設的情況下是根據“ /etc/passwd系統使用者配置檔案” 及 “/etc/group系統使用者組配置檔案” 來進行配置。

   在FTP伺服器中,匿名使用者的使用者名稱和密碼都是ftp ;這個使用者可以在您的作業系統中的 /etc/passwd 中能找得到;如:

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

在ftp使用者這行中,我們看到七個欄位,每個欄位寫欄位之間用:號分割;

1.ftp 是使用者名稱

2.x 是密碼欄位,隱藏的

3.14 是使用者的UID欄位,可以自己來設定,不要和其它使用者的UID相同,否則會造成系統安全問題;

4.50 用使用者組的GID,可以自己設定,不要和其它使用者組共用FTP的GID,否則會造成系統全全問題;

5.FTP User 是使用者說明欄位

6./var/ftp 是ftp使用者的家目錄,可以自己來定義

7./sbin/nologin 這是使用者登入SHELL ,這個也是可以定義的,/sbin/nologin 表示不能登入系統;系統虛擬帳號(也被稱為偽使用者)一般都是這麼設定。比如我們把ftp使用者的/sbin/nologin 改為 /bin/bash ,這樣ftp使用者通過本地或者遠端工具ssh或telnet以真實使用者身份登入到系統。這樣做對系統來說是不安全的;如果您認為一個使用者沒有太大的必要登入到系統,就可以只給他FTP帳號的許可權,也就是說只給他FTP的許可權,而不要把他的SHELL設定成 /bin/bash 等

匿名使用者的屬組:/etc/group

ftp:x:50:

第一個欄位為:ftp:使用者組、第二個欄位為:x:密碼段、第三個欄位為:50:GID

可以根據對比使用者配置檔案以及使用者組配置檔案中的UID得知 是否為隸屬關係。

五、vsftpd的配置

)因為vsftpd預設的宿主使用者是root,不符合安全性要求,所以將新建立的vsftpd服務的宿主使用者的shell改為“ /sbin/nologin意思是禁止登入系統 ”:useradd vsftpd -s /sbin/nologin

2.)建立vsftpd虛擬宿主使用者:useradd virtusers  -s /sbin/nologin

此次主要介紹虛擬使用者,顧名思義虛擬使用者在系統中是不純在的,它們集體寄託於方才建立的“virtusers”使用者,那麼這個使用者就相當於一個虛擬使用者組了,因為這個使用者的許可權將影響到後續講到的虛擬使用者。

3.)調整vsftpd的配置檔案(編輯所有的配置檔案前最好養成備份的習慣)

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.backup.conf

vim /etc/vsftpd/vsftpd.conf

複製程式碼
#設定為NO代表不允許匿名
anonymous_enable=YES
 
#設定本地使用者可以訪問,主要是虛擬宿主使用者,如果設為NO那麼所欲虛擬使用者將無法訪問。
local_enable=YES
 
#可以進行寫的操作
write_enable=YES
 
#設定上傳檔案的許可權掩碼
local_umask=022
 
#禁止匿名使用者上傳
anon_upload_enable=NO
 
#禁止匿名使用者建立目錄
anon_mkdir_write_enable=NO
 
# 設定開啟目錄標語功能
dirmessage_enable=YES
 
# 設定開啟日誌記錄功能
xferlog_enable=YES
 
#設定埠20進行資料連線
connect_from_port_20=YES
 
#設定禁止上傳檔案更改宿主
chown_uploads=NO
 
#設定vsftpd服務日誌儲存路勁。注意:改檔案預設不純在,需手動touch,且由於這裡更改了vsftpd服務的宿主使用者為手動建立的vsftpd,則必
須注意給予該使用者對日誌的讀取許可權否則服務啟動失敗。
xferlog_file=/var/log/vsftpd.log
 
#設定日誌使用標準的記錄格式
xferlog_std_format=YES
 
#設定空閒連結超時時間,這裡使用預設/秒。
#idle_session_timeout=600
 
#設定最大連線傳輸時間,這裡使用預設,將具體數值留給每個使用者具體制定,預設120/秒
data_connection_timeout=3600
 
#設定支撐vsftpd服務的宿主使用者為手動建立的vsftpd使用者。注意:一旦更改宿主使用者,需一起與該服務相關的讀寫檔案的讀寫賦權問題.
nopriv_user=vsftpd
 
#設定支援非同步傳輸的功能
#async_abor_enable=YES
 
#設定vsftpd的登陸標語
ftpd_banner=hello 歡迎登陸
 
#禁止使用者登出自己的ftp主目錄
chroot_list_enable=NO
 
#禁止使用者登陸ftp後使用ls -R 命令。該命令會對伺服器效能造成巨大開銷,如果該項運行當多個使用者使用該命令會對伺服器造成威脅。
ls_recurse_enable=NO
 
#設定vsftpd服務工作在standalone模式下。所謂standalone模式就是該服務擁有自己的守護程序,在ps -A可以看出vsftpd的守護程序名。如果
不想工作在standalone模式下,可以選擇SuperDaemon模式,註釋掉即可,在該模式下vsftpd將沒有自己的守護程序,而是由超級守護程序Xinetd全權代理,>與此同時,vsftpd服務的許多功能,將得不到實現。
listen=YES
 
#設定userlist_file中的使用者將不能使用ftp
userlist_enable=YES
 
 
#設定pam服務下的vsftpd驗證配置檔名。因此,PAM驗證將參考/etc/pam.d/下的vsftpd檔案配置。
pam_service_name=vsftpd
 
#設定支援TCPwrappers
tcp_wrappers=YES
 
#################################################以下是關於虛擬使用者支援的重要配置專案,預設.conf配置檔案中是不包含這些專案的,需手動新增。
#啟用虛擬使用者功能
guest_enable=YES
 
#指定虛擬的宿主使用者
guest_username=virtusers
 
#設定虛擬使用者的許可權符合他們的宿主使用者
virtual_use_local_privs=YES
 
#設定虛擬使用者個人vsftp的配置檔案存放路勁。這個被指定的目錄裡,將被存放每個虛擬使用者個性的配置檔案,注意的地方是:配置檔名必須
和虛擬使用者名稱相同。
user_config_dir=/etc/vsftpd/vconf
 
#禁止反向域名解析,若是沒有新增這個引數可能會出現使用者登陸較慢,或則客戶連結不上ftp的現象
reverse_lookup_enable=NO
複製程式碼

4.)建立vsftpd的日誌檔案,並更改屬主為vsftpd的服務宿主使用者

touch /var/log/vsftpd.log

chown vsftpd.vsftpd /var/log/vsftpd.log

六、配置虛擬使用者

1.)建立虛擬使用者配置檔案的存放路徑

mkdir /etc/vsftpd/vconf/

2.)建立一個虛擬使用者名稱單檔案,用來記錄虛擬使用者的賬號和密碼,格式為:一行使用者名稱,一行密碼。

vim /opt/vsftp/passwd

test
123456
test1
654321

3.)生成虛擬使用者資料檔案

db_load -T -t hash -f   /opt/vsftp/passwd  /opt/vsftp/passwd.db

需要注意的是,以後對虛擬使用者的增刪操作完之後需要再次執行上述命令,使其生成新的資料檔案。

七、設定PAM驗證檔案,並制定虛擬使用者資料庫檔案進行讀取

對原驗證檔案備份後進行更改:cp /etc/pam.d/vsftpd   /etc/pam.d/vsftpd.backup

cat /etc/pam.d/vsftpd

複製程式碼
#%PAM-1.0
#####32位系統配置
#auth    sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/xnpasswd
#account sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/xnpasswd
#####64位系統配置
auth    sufficient      /lib64/security/pam_userdb.so     db=/opt/vsftp/passwd
account sufficient      /lib64/security/pam_userdb.so     db=/opt/vsftp/passwd

#以上兩條是手動新增的,內容是對虛擬使用者的安全和帳戶許可權進行驗證。
#這裡的auth是指對使用者的使用者名稱口令進行驗證。
#這裡的accout是指對使用者的帳戶有哪些許可權哪些限制進行驗證。
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
session    required     pam_loginuid.so
複製程式碼

八、虛擬使用者的配置

1.)定製虛擬使用者模板配置檔案(虛擬使用者的配置檔名需要和虛擬使用者一致,因為在登入ftp時輸入相應的使用者名稱之後會根據名稱去載入相應的配置檔案)

vim /etc/vsftpd/vconf/test

複製程式碼
local_root=/opt/vsftp/file
#指定虛擬使用者倉庫的具路徑
anonymous_enable=NO
#設定不允許匿名訪問
write_enable=YES
#允許寫的操作
local_umask=022
#上傳檔案的許可權掩碼
anon_upload_enable=NO
#不允許匿名上傳
anon_mkdir_write_enable=NO
#不允許匿名使用者建立目錄
idle_session_timeout=300
#設定空閒連結超時時間
data_connection_timeout=1000
#設定單次傳輸最大時間
max_clients=0
#設定併發客戶端的訪問數量
max_per_ip=0
#設定客戶端的最大執行緒數
local_max_rate=0
#設定使用者的最大傳輸速率,單位b/s
複製程式碼

2.)建立虛擬使用者的倉庫目錄並更改相應屬主/組且賦予相應許可權

mkdir -p /opt/vsftpd/file

chown virtusers:virtusers /opt/vsftpd/file

chmod 755 /opt/vsftpd/file

3.)隨便建立個檔案方便後續檢測是否安裝成功:touch  /opt/vsftpd/file/abc

九、啟動方式

ftp守護程序的啟動方式有兩種,standalone和(xinetd/inetd)

1.)xinetd模式:大多數較新的系統採用的是xinetd超級服務守護程序,它是inetd(因特網守護程序)的替代品。在linux中一些不主要的服務,並沒有作為單獨的守護程序在開機時啟動,而是將他們的監聽埠交給一個獨立的程序xinetd集中監聽,當收到客戶端的請求之後,xinted程序就臨時啟動相應伺服器並把埠移交給相應的服務,客戶端斷開之後,相應的服務程序結束,xinetd繼續監聽。

有的系統可能會需要安裝xinetd:yum install xinetd

若是在/etc/xinetd.d/中沒有vsftpd則需要新建,並新增如下內容:

複製程式碼
service ftp  
 
{  

socket_type = stream 
 
wait = no 
 
user = root 
 
server = /usr/sbin/vsftpd  
 
 
nice = 10 
 
disable = no 

} 
複製程式碼

釋掉”/etc/vsftpd.conf“中的listen=YES之後重啟,以xinetd啟動  /etc/rc.d/init.d/xinetd restart

2.)standalone模式:執行期間一直駐留在記憶體中,對接入訊號反應較快但是佔用了些系統資源,因此常常用於需求較高的服務。

standalone模式執行ftp:

此模式便於實現PAM驗證功能,進入這種模式首先關閉xinetd下的vsftpd,設定”disable=yes“,或則註釋掉/etc/initd.conf中的相應的行,然後取消/etc/vsftpd/vsftpd.conf中listen=YES的註釋。

啟動:service vsftpd restart

十、從其他機器登陸ftp進行測試

建議關閉iptables 與 selinux 進行測試。

#需要先下載客戶端 yum -y install ftp

Name (192.168.1.67:root):test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,67,23,40).
150 Here comes the directory listing.
-rwxr-xr-x 2 500 500 4096 May 05 03:53 abc
226 Directory send OK.

可能會出現的錯誤:

1.)500 OOPS:錯誤

有可能是你的vsftpd.con配置檔案中有不能被實別的命令,還有一種可能是命令的YES 或 NO 後面有空格

2.)若是提示許可權問題,檢測配置檔案無誤後執行:setsebool -P ftp_home_dir=1

vsftpd 對於許可權的要求並不嚴格,對於指定ftp的宿主使用者vsftpd也只是需要有日誌檔案的許可權,其他地方預設即可,而虛擬使用者的宿主則需要有相關的虛擬使用者倉庫路徑的許可權,且新版本下針對倉庫的上級目錄貌似不能是777許可權可以是755