1. 程式人生 > 其它 >【轉載】關於Linux環境下安裝配置vsftpd服務全攻略(踩坑)

【轉載】關於Linux環境下安裝配置vsftpd服務全攻略(踩坑)

文章轉載來自:https://www.2cto.com/os/201708/666967.html

參考文章:
玩轉vsftpd伺服器的四大高階配置
我見過最好的vsftpd配置教程

FTP傳輸模式

檔案傳輸協議(File Transfer Protocol,FTP),基於該協議FTP客戶端與服務端可以實現共享檔案、上傳檔案、下載檔案。
FTP基於C/S模式,FTP客戶端與伺服器端有兩種傳輸模式,分別是FTP主動模式FTP被動模式。主被動模式均是以FTP伺服器端為參照。

FTP主動模式:客戶端從一個任意的埠N(N>1024)連線到FTP伺服器的port 21命令埠,客戶端開始監聽埠N+1,併發送FTP命令“port N+1”到FTP伺服器,FTP伺服器以資料埠(20)連線到客戶端指定的資料埠(N+1)。

FTP被動模式:客戶端從一個任意的埠N(N>1024)連線到FTP伺服器的port 21命令埠,客戶端開始監聽埠N+1,客戶端提交 PASV命令,伺服器會開啟一個任意的埠(P >1024),併發送PORT P命令給客戶端。客戶端發起從本地埠N+1到伺服器的埠P的連線用來傳送資料。

在企業實際環境中,如果FTP客戶端與FTP服務端均開放防火牆,FTP需以主動模式工作,這樣只需要在FTP伺服器端防火牆規則中,開放20、21埠即可。

以上內容來自:http://www.linuxidc.com/Linux/2017-06/144886.htm

Vsftp安裝與配置

安裝

在linux環境下,使用最多的FTP服務端軟體就是Vsftpd!
安裝Vsftpd,執行一下命令需要在root使用者下進行!

yum install vsftpd

啟動服務

service vsftpd start
//或者
systemctl start vsftpd.service

重啟服務使用restart

配置

配置檔案說明

①/etc/vsftpd/vsftpd.conf這個檔案是vsftpd服務的核心配置檔案!
我們在修改配置檔案的時候,最好先備份一份!

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

我們先來了解一下里邊可以配置的大致內容:

useradd 新的使用者名稱
passwd 新的使用者名稱

然後需要修改配置檔案:

anonymous_enable=NO   #禁止匿名使用者登入
chown_uploads=NO      #設定禁止上傳檔案更改宿主
nopriv_user=ftptest   #設定支撐Vsftpd服務的宿主使用者為新建使用者
ascii_upload_enable=YES
ascii_download_enable=YES #設定支援ASCII模式的上傳和下載功能。
userlist_enable=YES
userlist_deny=NO

最後開啟/etc/vsftpd/user_list檔案,將新建的使用者新增到最後一行(一個使用者一行

這種模式下,登入訪問的目錄就是/home/新建使用者/

虛擬使用者配置

系統使用者模式雖然可以控制訪問,但是如果使用者過多,就會影響伺服器系統的管理,對伺服器安全造成威脅!而且我們需要的僅僅是可以使用搭建在伺服器的FTP服務而已!
那麼就需要我們設定虛擬使用者進行登入,這也是推薦的方式!這種方式更加安全!

虛擬使用者就是沒有實際的真實系統使用者,而是通過對映到其中一個真實使用者以及設定相應的許可權來實現訪問驗證,虛擬使用者不能登入Linux系統,從而讓系統更加的安全可靠。

一、首先需要我們新建一個虛擬宿主使用者,也就是上邊說的要對映的真實使用者:

useradd virtualhost -s /sbin/nologin

這裡設定宿主使用者也不允許登入系統!

二、然後修改配置檔案,下邊我給出我的設定:

anonymous_enable=NO  #設定不允許匿名訪問
local_enable=YES  #設定本地使用者可以訪問。注意:主要是為虛擬宿主使用者,如果該專案設定為NO那麼所有虛擬使用者將無法訪問。
write_enable=YES  #設定可以進行寫操作。
local_umask=022  #設定上傳後文件的許可權掩碼。
anon_upload_enable=NO  #禁止匿名使用者上傳。
anon_mkdir_write_enable=NO  #禁止匿名使用者建立目錄。
dirmessage_enable=YES  #設定開啟目錄標語功能。
xferlog_enable=YES  #設定開啟日誌記錄功能。
connect_from_port_20=YES #設定埠20進行資料連線。(主動模式)
chown_uploads=NO  #設定禁止上傳檔案更改宿主。
#chown_username=whoever
xferlog_file=/var/log/xferlog
#設定Vsftpd的服務日誌儲存路徑。注意,該檔案預設不存在。必須要手動touch出來,並且由於這裡更改了Vsftpd的服務宿主使用者為手動建立的Vsftpd。必須注意給與該使用者對日誌的寫入許可權,否則服務將啟動失敗。
xferlog_std_format=YES #設定日誌使用標準的記錄格式。
#idle_session_timeout=600 #設定空閒連線超時時間,單位為秒,這裡預設。
#data_connection_timeout=120 #設定空閒連線超時時間,單位為秒,這裡預設
#nopriv_user=ftptest

async_abor_enable=YES  #設定支援非同步傳輸功能。

ascii_upload_enable=YES
ascii_download_enable=YES  #設定支援ASCII模式的上傳和下載功能。

ftpd_banner=Welcome to blah FTP service.  #設定Vsftpd的登陸標語。

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

chroot_list_enable=NO #禁止使用者登出自己的FTP主目錄。

# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

ls_recurse_enable=NO  #禁止使用者登陸FTP後使用"ls -R"的命令。該命令會對伺服器效能造成巨大開銷。如果該項被允許,那麼擋多使用者同時使用該命令時將會對該伺服器造成威脅。
listen=YES 設定該Vsftpd服務工作在StandAlone模式下
#listen_ipv6=YES

userlist_enable=YES  #設定userlist_file中的使用者將不得使用FTP。
#userlist_deny=NO
tcp_wrappers=YES  #設定支援TCP Wrappers

#下邊是關於虛擬使用者的重要配置
guest_enable=YES  #設定啟用虛擬使用者功能。
guest_username=virtualhost  #指定虛擬使用者的宿主使用者。
virtual_use_local_privs=YES  #設定虛擬使用者的許可權符合他們的宿主使用者。
pam_service_name=vsftpd  #設定PAM服務下Vsftpd的驗證配置檔名。因此,PAM驗證將參考/etc/pam.d/下的vsftpd檔案配置。
user_config_dir=/etc/vsftpd/virtualconf  #設定虛擬使用者個人Vsftp的配置檔案存放路徑。也就是說,這個被指定的目錄裡,將存放每個Vsftp虛擬使用者個性的配置檔案,一個需要注意的地方就是這些配置檔名必須和虛擬使用者名稱相同。

需要注意的地方
①Vsftpd的日誌檔案不存在,建立Vsftpd的日誌檔案,並更該屬主為Vsftpd的服務宿主使用者。

touch /var/log/vsftpd.log
chown virtualhost.virtualhost /var/log/vsftpd.log

②建立虛擬使用者配置檔案存放路徑:

mkdir /etc/vsftpd/virtualconf

這裡是跟配置檔案中的user_config_dir這一項是對應的!

三、接著製作虛擬使用者資料庫檔案,這裡需要先安裝db4包,用來支援檔案資料庫。
安裝:

yum install db4

然後建立虛擬使用者名稱單檔案:touch /etc/vsftpd/virtusers
建立了一個虛擬使用者名稱單檔案,這個檔案就是來記錄vsftpd虛擬使用者的使用者名稱和口令的資料檔案,我這裡給它命名為virtusers。為了避免檔案的混亂,我把這個名單檔案就放置在/etc/vsftpd/下。
接著編輯這個檔案,將虛擬使用者資訊寫入這個檔案vi /etc/vsftpd/virtusers

virtual1
123456
virtual2
123456

類似上邊的格式,一行使用者名稱,一行密碼
接著生成虛擬使用者資料檔案:

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

四、設定PAM驗證檔案,並指定虛擬使用者資料庫檔案進行讀取
這裡需要我們安裝pam服務,一般系統都會有安裝:

yum install pam

Vsftp的PAM驗證配置檔案:/etc/pam.d/vsftpd
這裡對應的就是核心配置檔案中的pam_service_name,它會去找/etc/pam.d/vsftpd這個檔案!

那麼我們需要編輯這個檔案,同樣的編輯前先備份一下:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

然後編輯檔案:vi /etc/pam.d/vsftpd

#%PAM-1.0
auth    sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers

以上兩條是手動新增的,內容是對虛擬使用者的安全和帳戶許可權進行驗證
這裡的auth是指對使用者的使用者名稱口令進行驗證。
這裡的accout是指對使用者的帳戶有哪些許可權哪些限制進行驗證。
其後的sufficient表示充分條件,也就是說,一旦在這裡通過了驗證,那麼也就不用經過下面剩下的驗證步驟了。相反,如果沒有通過的話,也不會被系統立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著使用者還必須將經歷剩下來的驗證稽核。
再後面的/lib/security/pam_userdb.so表示該條稽核將呼叫pam_userdb.so這個庫函式進行。
最後的db=/etc/vsftpd/virtusers則指定了驗證庫函式將到這個指定的資料庫中呼叫資料進行驗證。

這裡有一個問題需要注意一下
如果你的系統是64位的,那麼這裡要改成:

/lib64/security/pam_userdb.so

否則會驗證失敗!不能登入!

五、配置虛擬使用者
1.規劃好虛擬使用者的主路徑:mkdir /opt/vsftp/
2.建立測試使用者的FTP使用者目錄:

mkdir /opt/vsftp/virtual1/  /opt/vsftp/virtual2/

3.建立虛擬使用者配置檔案模版:

cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/virtualconf/vconf.tmp

4.定製虛擬使用者模版配置檔案: vi /etc/vsftpd/virtualconf/vconf.tmp

local_root=/opt/vsftp/virtuser
指定虛擬使用者的具體主路徑。
anonymous_enable=NO
設定不允許匿名使用者訪問。
write_enable=YES
設定允許寫操作。
local_umask=022
設定上傳檔案許可權掩碼。
anon_upload_enable=NO
設定不允許匿名使用者上傳。
anon_mkdir_write_enable=NO
設定不允許匿名使用者建立目錄。
idle_session_timeout=600
設定空閒連線超時時間。
data_connection_timeout=120
設定單次連續傳輸最大時間。
max_clients=10
設定併發客戶端訪問個數。
max_per_ip=5
設定單個客戶端的最大執行緒數,這個配置主要來照顧Flashget、迅雷等多執行緒下載軟體。
local_max_rate=50000
設定該使用者的最大傳輸速率,單位b/s。

這裡將原vsftpd.conf配置檔案經過簡化後儲存作為虛擬使用者配置檔案的模版。這裡將並不需要指定太多的配置內容,主要的框架和限制交由 Vsftpd的主配置檔案vsftpd.conf來定義,即虛擬使用者配置檔案當中沒有提到的配置專案將參考主配置檔案中的設定。而在這裡作為虛擬使用者的配置檔案模版只需要留一些和使用者流量控制,訪問方式控制的配置專案就可以了。這裡的關鍵項是local_root這個配置,用來指定這個虛擬使用者的FTP主路徑。
5.更改虛擬使用者的主目錄的屬主為虛擬宿主使用者:

 chown -R virtualhost.virtualhost/opt/vsftp/

6.配置虛擬使用者,從虛擬使用者模版配置檔案複製:
cp /etc/vsftpd/virtualconf/vconf.tmp /etc/vsftpd/virtualconf/virtual1

7.針對具體使用者進行定製:vi /etc/vsftpd/virtualconf/virtual1

local_root=/opt/vsftp/virtual1
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=90
max_clients=1
max_per_ip=1
local_max_rate=25000

當然,如果很熟練的話3,4,6步驟都可以省略!不要設定!
這裡主要是為了方便!可以在原來的基礎的進行修改而已!

最後別忘了,開啟或者重啟服務!

測試

我們可以先在模板目錄新建一個空檔案

touch /opt/vsftp/virtual1/test.txt

登入一下,在windows開啟cmd:(當然我們使用瀏覽器,或者使用windows檔案瀏覽視窗都可以!)

ftp 192.168.164.133

使用使用者virtual1和密碼123456登入!
然後輸入ls,展示該目錄下檔案列表。
看有沒有我們剛才新建的test.txt文字?!
然後測試一下上傳,使用put命令,然後看一下目錄中是否有上傳的檔案?
接著測試一下建立目錄操作:mkdir newdir,看是否有新目錄被建立?!
然後測試一下下載:使用get test.txt,將test.txt檔案下載到本地!注意預設的下載路徑為windows使用者目錄c:\Users\xxxxx目錄下`!