vsftpd的安裝和使用

一、簡介

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。