簡介vsftpd及搭建配置

1、簡介linux

 FTP(文件傳輸協議)全稱是:Very Secure FTP Server。   Vsftpd是linux類操做系統上運行的ftp服務器軟件。 shell

vsftp提供三種登錄方式:1.匿名登陸  2.本地用戶登陸  3.虛擬用戶登陸數據庫

vsftpd的特色:1.較高的安全性需求    2.帶寬的限制    3.建立支持虛擬用戶    4.支持IPV6    5.中等偏上的性能    6.可分配虛擬IP    7.高速vim

 

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

 控制通道:與Ftp服務器進行溝通的通道,連接Ftp發送ftp指令都是經過控制通道來完成的。bash

 數據通道:數據通道和Ftp服務器進行文件傳輸或則列表的通道 服務器

 

2、工做原理session

  Ftp協議中控制鏈接均是由客戶端發起,而數據鏈接有兩種工做方式:Port和Pasv方式併發

 

  Port模式(主動模式)--> 默認app

  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,這一點請特別注意,尤爲是在使用防火牆的企業裏,這一點很是關鍵,若是設置錯了,那麼客戶將沒法鏈接。

 

3、安裝vsftpd及相關軟件

yum -y install vsftpd*  pam*   db4*

vsftpd:ftp軟件      pam:認證模塊       DB4:支持文件數據庫

 

4、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得知 是否爲隸屬關係。

 

5、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

 

6、配置虛擬用戶

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

須要注意的是,之後對虛擬用戶的增刪操做完以後須要再次執行上述命令,使其生成新的數據文件。

 

7、設置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

 

 

8、虛擬用戶的配置

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

 

9、啓動方式

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

 

 

10、從其餘機器登錄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

相關文章
相關標籤/搜索