主頁 > 作業系統 > 【VSFTP服務】vsftpd檔案傳輸協議部署

【VSFTP服務】vsftpd檔案傳輸協議部署

2020-10-08 23:16:22 作業系統

vsftpd檔案傳輸協議

系統環境:CentOS Linux release 7.6.1810 (Core) 

一、簡介

  FTP(檔案傳輸協議)全稱是:Very Secure FTP Server,   Vsftpd是linux類作業系統上運行的ftp服務器軟體, vsftp提供三種登陸方式:1.匿名登錄  2.本地用戶登錄  3.虛擬用戶登錄

vsftpd的特點:

  1)較高的安全性需求   

  2)帶寬的限制   

  3)創建支持虛擬用戶   

  4)支持IPV6   

  5)中等偏上的性能   

  6)可分配虛擬IP   

  7)高速

 Ftp會話時采用了兩種通道(連接方式):

   1)控制通道:與Ftp服務器進行溝通的通道,鏈接Ftp發送ftp指令都是通過控制通道來完成的,埠為21,用于發送FTP命令資訊,

   2)資料通道:資料通道和Ftp服務器進行檔案傳輸或則串列的通道 ,埠為20,用于上傳下載資料,

二、作業原理

  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那個隨機的埠連接后,進行資料傳輸,

簡而言之:就是服務端從20埠主動向客戶端發起連接

  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,這一點請特別注意,尤其是在使用防火墻的企業里,這一點非常關鍵,如果設定錯了,那么客戶將無法連接,

三、安裝vsfpd

1.安裝vsftpd相關組件

  [root@VM_0_10_centos tmp]# rpm -qa | grep vsftpd

 [root@VM_0_10_centos shellScript]# yum -y install vsftpd*

2.安裝PAM服務相關組件

[root@VM_0_10_centos shellScript]# yum -y install pam*

安裝pam報錯:

--> Finished Dependency Resolution
Error: Package: 2:postfix-2.10.1-7.el7.x86_64 (@anaconda)
           Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)
Error: Package: libmapi-7.1.14-3.el7.x86_64 (epel)
           Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)
Error: Package: libmapi-7.1.14-3.el7.x86_64 (epel)
           Requires: libmysqlclient.so.18()(64bit)
Error: Package: 2:postfix-2.10.1-7.el7.x86_64 (@anaconda)
           Requires: libmysqlclient.so.18()(64bit)
 You could try using --skip-broken to work around the problem
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
2:postfix-2.10.1-7.el7.x86_64 has missing requires of libmysqlclient.so.18()(64bit)
2:postfix-2.10.1-7.el7.x86_64 has missing requires of libmysqlclient.so.18(libmysqlclient_18)(64bit)

解決:

缺少Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm這個包

[root@VM_0_10_centos tmp]# wget http://www.percona.com/redir/downloads/Percona-XtraDB-Cluster/5.5.37-25.10/RPM/rhel6/x86_64
/Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm
[root@VM_0_10_centos tmp]# rpm -ivh Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm 
warning: Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: N
OKEYPreparing...                          ################################# [100%]
Updating / installing...
   1:Percona-XtraDB-Cluster-shared-55-################################# [100%]

參考網址:https://blog.csdn.net/debimeng/article/details/78143071

最后再運行安裝pam即可

# yum -y install pam*

3.安裝DB4部件包

用來支持檔案資料庫

[root@VM_0_10_centos tmp]# yum -y install db4*

四、系統賬戶

1.建立Vsftpd服務的宿主用戶

  默認的Vsftpd的服務宿主用戶是root,但不符合安全性的需要,這里建立名字為vsftpd的用戶,用他來作為支持Vsftpd的服務宿主用戶,由于該用戶僅用來支持Vsftpd服務用,因此沒有許可他登陸系統的必要,并設定他為不能登陸系統的用戶,

nologin參考網址:https://blog.csdn.net/danson_yang/article/details/65629948

[root@VM_0_10_centos tmp]# useradd vsftpd -s /sbin/nologin

/sbin/nologin更改用戶是否可以使用ssh登錄

2.建立Vsftpd虛擬宿主用戶

[root@VM_0_10_centos tmp]# useradd vrvsftpd -s /sbin/nologin

虛擬用戶并不是系統用戶,也就是說這些FTP的用戶在系統中是不存在的,他們的總體權限其實是集中寄托在一個在系統中的某一個用戶身上的,所謂Vsftpd的虛擬宿主用戶,就是這樣一個支持著所有虛擬用戶的宿主用戶,由于他支撐了FTP的所有虛擬的用戶,那么他本身的權限將會影響著這些虛擬的用戶,因此,處于安全性的考慮,也要非分注意對該用戶的權限的控制,該用戶也絕對沒有登陸系統的必要,這里也設定他為不能登陸系統的用戶,

五、修改vsftpd組態檔

# 1. 匿名用戶的有關設定
anonymous_enable =YES/NO    # 是否允許匿名用戶登錄FTP服務器,默認值為YES,
no_anon_password =YES/NO     # 控制匿名用戶登入時是否需要密碼,YES不需要,NO需要,默認值為NO,
anon_world_readable_only =YES/NO     # 匿名用戶是否允許下載可閱讀的檔案,默認值為YES, 
anon_upload_enable =YES/NO    # 是否允許匿名用戶上傳檔案,默認為NO,
anon_mkdir_write_enable =YES/NO    # 是否允許匿名用戶有創建目錄的寫入權限,默認值為NO
anon_other_write_enable=YES/NO     # 是否允許匿名用戶有其他的寫入權限,如對檔案改名、覆寫及洗掉檔案,默認值為NO,
ftp_username=           (自添)# 匿名用戶所使用的系統用戶名,默認下,此引數在組態檔中不出現,默認值為ftp,
anon_root=/var/ftp         (自添)# 設定匿名用戶登錄后所在的目錄(默認為/var/ftp)
anon_umask=022            (自添)# 匿名用戶所上傳檔案的默認權限掩碼值
anon_max_rate=200000     # 設定匿名用戶的最大傳輸速度,單位為bytes/sec,值為0表示不限制 
# 2.本地用戶的設定
local_enable=YES|NO     # 是否允許本地用戶登錄FTP服務器,默認值為YES, 
local_umask=022    # 本地用戶上傳檔案的默認權限掩碼值
local_max_rate=500000    # 設定本地用戶的最大傳輸速度,單位為bytes/sec,值為0時表示不限制
local_root=/var/ftp    (自添)# 設定本地用戶登錄后所在目錄(預設為為用戶主目錄),如:user1用戶為:/home/user1
# 3. 全域設定
write_enable=YES|NO    # 允許用戶訪問時,是否允許他們有寫入的權限,默認值為YES,
listen=YES|NO    # 設定vsftpd服務器是否以獨立(standalone)模式運行 ,默認值為YES,建議不要更改,很多與服務器運行相關的配置命令,需要此運行模式才有效,若設定為NO,則vsftpd不是以獨立的服務運行,要受xinetd服務的管理控制,功能上會受限制,
listen_port=21    # 設定FTP服務器建立連接所偵聽的埠,默認值為21,
max_clients=0    # 設定FTP服務器所允許的最大客戶端連接數,默認值為0,表示不限制,若設定為150時,則同時允許有150個連接,超出的將拒絕建立連接,只有在以standalone模式運行時才有效,
max_per_ip=5    # 設定每個IP地址允許與FTP服務器同時建立連接的數目,默認為0,不受限制,通常可對此配置進行設定,防止同一個用戶建立太多的連接,只有在以standalone模式運行時才有效,
xferlog_enable=YES    # 是否啟用日志
xferlog_file=var/log/vsftpd.log      # 設定日志檔案名及路徑,需啟用xferlog_enable選項
xferlog_std_format=YES     # 是否用標準格式存盤日志
pam_service_name=vsftpd     # 設定PAM認證服務的組態檔名,該檔案位于/etc/pam.d目錄下

# 3. 全域設定——歡迎資訊 
ftpd_banner=Welcome blah FTP service    # 這邊可定義歡迎話語的字串,相較于banner_file 是檔案的形式,而ftpd_banner 是字串的格式,預設為無,
banner_file =/etc/vsftpd/banner    # 當使用者登入時,會顯示此設定所在的檔案的內容,通常為歡迎話語或是說明,默認值為無, 
dirmessage_enable =YES    # 如果啟動這個選項,使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,若是有,則會出現此檔案的內容,通常這個檔案會放置歡迎話語,或是對該目錄的說明,默認值為開啟,
message_file=.message    # 設定目錄訊息檔案,當使用者第一次進入一個目錄時,是否顯示該目錄中的.message檔案(需用編輯器手工創建)的內容,該檔案通常放置歡迎話語,或是對該目錄的說明資訊 

# 4. 控制用戶是否允許切換到上級目錄 
# 1)配置所有登錄不能改變自己的FTP根目錄(本地用戶是否鎖定在宿主目錄中,要對本地用戶查看效果,需先設定 local_root=/var/ftp )
chroot_local_user=YES|NO 

# 2)配置部分賬戶不允許改變自己的FTP根目錄
#chroot_list_enable=YES|NO    # 是否啟用chroot_list_file配置項指定的用戶串列檔案
#chroot_list_file=/etc/vsftpd/chroot_list     # 此檔案需自己建立,被列入此檔案的用戶,在登錄后將不能切換到自己目錄以外的其他目錄

# chroot_list中的用戶未鎖定, chroot_list外的用戶鎖定
chroot_list_enable=YES
chroot_local_user=NO
# chroot_list中的用戶鎖定, chroot_list外的用戶未鎖定
chroot_list_enable=NO
chroot_local_user=YES
# 所有用戶鎖定
chroot_list_enable=NO
chroot_local_user=NO
# 所有用戶未鎖定
chroot_list_enable=YES
chroot_local_user=YES
# 5. 設定訪問控制
# 1)設定允許或不允許訪問的主機
tcp_wrappers=YES
# 設定vsftpd服務器是否與tcp wrapper相結合,進行主機的訪問控制,默認為YES,vsftpd服務器會檢查/etc/hosts.allow和/etc/hosts.deny中的設定,以決定請求連接的主機是否允許訪問該FTP服務器,這兩個檔案可以起到簡易的防火墻功能,
# 如:若僅允許192.168.168.1~192.168.168.254的用戶,可以訪問連接vsftpd服務器,則可在/etc/hosts.allow檔案中添加以下內容:
vsftpd:192.168.168.0/255.255.255.0 :allow
all:all:deny

# 2)設定允許或不允許訪問的用戶
# 對用戶的訪問控制由/etc/vsftpd/user_list和/etc/vsftpd/ftpusers檔案來控制實作,
# 相關配置命令如下:
userlist_enable=YES | NO        # 設定/etc/vsftpd/user_list檔案是否啟用生效,YES則生效,NO不生效,
userlist_deny=YES | NO    #設定/etc/vsftpd/user_list檔案中的用戶是允許訪問還是不允許訪問,
# 若設定為YES,則/etc/vsftpd/user_list檔案中的用戶將不允許訪問FTP服務器;若設定為NO,則只有vsftpd.user_list檔案中的用戶,才能訪問FTP服務器,
# 用戶檔案串列
/etc/vsftpd/ftpusers     # 指定了不允許訪問FTP服務器的本地用戶賬號(黑名單) ,例如root等,這些賬號不是普通用戶賬號,而是在系統中具有較高權限的賬號,禁止這些賬號進行FTP登錄可提高系統的安全性,
/etc/vsftpd/user_list     # 指定允許或不允許登陸的用戶串列,使用起來比ftpusers更加靈活,需要在主組態檔中進行設定,如下圖

userlist_enable=YES

userlist_deny=YES

●ftpusers中用戶禁止訪問

● user_list中用戶禁止訪問(登錄時不會出現密碼提示,直接被服務器拒絕 )

●其他的ftp用戶都可以登錄

userlist_enable=YES

userlist_deny=NO

●只允許 user_list中的用戶訪問

●其他的ftp用戶都不可以登錄

# 6.設定用戶組態檔所在的目錄
# 在vsftpd服務器中,不同用戶還可使用不同的配置,這要通過用戶組態檔來實作,
user_config_dir=/etc/vsftpd/userconf
# 用于設定用戶組態檔所在的目錄,
  # 設定了該配置項后,當用戶登錄FTP服務器時,系統就會到/etc/vsftpd/userconf目錄下讀取與當前用戶名相同的檔案,并根據檔案中的配置命令,對當前用戶進行更進一步的配置,比如,利用用戶組態檔,可實作對不同用戶進行訪問的速度進行控制,在各用戶組態檔中,定義local_max_rate配置,以決定該用戶允許的訪問速度,
# 7.FTP作業方式與服務埠
connect_from_port_20=YES|NO    # 指定FTP資料傳輸連接是否使用20埠,默認值為YES ,若設定為NO,則進行資料連接時,所使用的埠由ftp_data_port指定
ftp_data_port=20     # 設定PORT方式下FTP資料連接所使用的埠,默認值為20,
pasv_enable=YES|NO     # 若設定為YES,則使用PASV作業模式;若設定為NO,使用PORT模式,默認為YES,即使用PASV模式,
pasv_max_port=0    # 設定在PASV作業方式下,資料連接可以使用的埠范圍的上界,默認值為0,表示任意埠,
pasv_mim_port=0    # 設定在PASV作業方式下,資料連接可以使用的埠范圍的下界,默認值為0,表示任意埠, 
# 8.設定傳輸模式
# FTP在傳輸資料時,可使用二進制(Binary)方式,也可使用ASCII模式來上傳或下載資料,
ascii_download_enable=YES    # 設定是否啟用ASCII模式下載資料,默認為NO
ascii_upload_enable=YES    # 設定是否啟用ASCII模式上傳資料,默認為NO

1.編輯組態檔前先備份

[root@VM_0_10_centos tmp]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup

內容如下:

[root@VM_0_10_centos tmp]# cat /etc/vsftpd/vsftpd.conf

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
# anonymous_enable=YES
# 是否允許匿名用戶訪問,默認為YES,這里設定不允許匿名訪問
anonymous_enable=NO

#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
# 設定本地用戶可以訪問,PS:主要為虛擬宿主用戶,如該專案設定為No,那么所有虛擬用戶將無法訪問
 local_enable=YES

#
# Uncomment this to enable any form of FTP write command.
# 設定可進行寫操作
write_enable=YES

#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
# 設定上傳后檔案的權限掩碼
local_umask=022

#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
#anon_upload_enable=YES
# 禁止匿名用戶上傳檔案
anonymous_enable=NO

#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
# 禁止匿名用戶建立目錄
anon_mkdir_write_enable=NO

#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
# 設定開啟目錄標語功能
dirmessage_enable=YES

#
# Activate logging of uploads/downloads.
# 開啟日志記錄功能
xferlog_enable=YES

#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# 設定埠20進行資料庫連接
connect_from_port_20=YES

#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
# 設定禁止上傳檔案更改宿主
chown_uploads=NO

#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/xferlog
# 設定vsftpd服務日志保存路徑,PS:該檔案默認不存在,須手動創建,
# 由于這里手動更改了vsftpd宿主用戶為vsftpd,須注意給與改用戶對日志的寫入權限
xferlog_file=/var/log/vsftpd.log

#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
# 設定日志使用標準的記錄格式
xferlog_std_format=YES

#
# You may change the default value for timing out an idle session.
# 設定空閑連接超時時間,這里使用默認,
# 將具體數值留給每個具體用戶具體指定,當然如果不指定的話,還是使用這里的默認值600,單位秒
#idle_session_timeout=600

#
# You may change the default value for timing out a data connection.
# 設定單次最大連續傳輸時間,這里使用默認,
# 將具體數值留給每個具體用戶具體指定,當然如果不指定的話,還是使用這里的默認值120,單位秒,
#data_connection_timeout=120

#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
# 設定支撐Vsftpd服務的宿主用戶為手動建立的Vsftpd用戶,
# PS:一旦做出更改宿主用戶后,必須注意一起與該服務相關的讀寫檔案的讀寫賦權問題,比如日志檔案就必須給與該用戶寫入權限等,
nopriv_user=vsftpd

#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
# 設定支持異步傳輸功能
async_abor_enable=YES

#
# ASCII mangling is a horrible feature of the protocol.
# 設定支持ASCII模式上傳和下載功能
ascii_upload_enable=YES
ascii_download_enable=YES

#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
# 設定vsftpd的登錄標語
ftpd_banner=This Vsftp server supports virtual users ^_^

#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# 禁止用戶登出自己的ftp主目錄
chroot_list_enable=NO

# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
# 禁止用戶登錄ftp后使用"ls -R"命令,該命令會對服務器性能造成巨大開銷,如果該項被允許,那么擋多用戶同時使用該命令時將會對該服務器造成威脅,
ls_recurse_enable=NO

#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
# listen=NO
# 設定該Vsftpd服務作業在StandAlone模式下,
# 順便展開說明一下,所謂StandAlone模式就是該服務擁有自己的守護行程支持,
# 在ps -A命令下我們將可用看到vsftpd的守護行程名,如果不想作業在StandAlone模式下,則可以選擇SuperDaemon模式,
# 在該模式下 vsftpd將沒有自己的守護行程,而是由超級守護行程Xinetd全權代理,與此同時,Vsftp服務的許多功能將得不到實作
listen=YES

#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!

 # listen_ipv6=YES
 # 設定pam服務下vsftpd的驗證組態檔名,因此,PAM驗證將參考/etc/pam.d/下的vsftpd檔案配置
  pam_service_name=vsftpd
 # 設定userlist_file中的用戶將不得使用FTP,
  userlist_enable=YES
 # 設定支持TCP Wrappers,
  tcp_wrappers=YES

# 以下這些是關于Vsftpd虛擬用戶支持的重要配置專案,默認Vsftpd.conf中不包含這些設定專案,需要自己手動添加配置,
# 設定啟用虛擬用戶功能
guest_enable=YES

# 指定虛擬用戶宿主用戶
guest_username=vrvsftpd

# 設定虛擬用戶的權限符合他們的宿主用戶,
virtual_use_local_privs=YES

# 設定虛擬用戶個人Vsftp的組態檔存放路徑,
# 也就是說,這個被指定的目錄里,將存放每個Vsftp虛擬用戶個性的組態檔,一個需要注意的地方就是這些組態檔名必須和虛擬用戶名相同,
user_config_dir=/etc/vsftpd/vconf

 3.建立Vsftpd的日志檔案,并更該屬主為Vsftpd的服務宿主用戶

[root@VM_0_10_centos tmp]# touch /var/log/vsftpd.log
[root@VM_0_10_centos tmp]# chown vsftpd.vsftpd /var/log/vsftpd.log

4.建立虛擬用戶組態檔存放路徑

[root@VM_0_10_centos tmp]# mkdir /etc/vsftpd/vconf

六、制作虛擬用戶資料庫檔案

 1.先建立虛擬用戶名單檔案

建立了一個虛擬用戶名單檔案,這個檔案就是來記錄vsftpd虛擬用戶的用戶名和口令的資料檔案,我這里給它命名為virtusers,為了避免檔案的混亂,我把這個名單檔案就放置在/etc/vsftpd/下,

[root@VM_0_10_centos tmp]# touch /etc/vsftpd/virtusers

2.編輯虛擬用戶名單檔案

格式為:“一行用戶名,一行口令”,

[root@VM_0_10_centos tmp]# cat /etc/vsftpd/virtusers 
zs
設定的密碼
thy 設定的密碼

3.生成虛擬用戶資料檔案

db_load主要用來生成db資料庫使用,在Vsftpd的虛擬用戶設定中先新建一個檔案users.txt 把用戶名密碼放入其中

接著 db_load -T -t hash -f   */users.txt    */users.db

PS: * 表示目錄

這樣就生成了一個users.db檔案(hash碼型的資料庫檔案)

 參考網址:http://blog.itpub.net/20943428/viewspace-661714/

[root@VM_0_10_centos tmp]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

引數:

  選項-T允許應用程式能夠將文本檔案轉譯載入進資料庫,由于我們之后是將虛擬用戶的資訊以檔案方式存盤在檔案里的,為了讓Vsftpd這個應用程式能夠通過文本來載入用戶資料,必須要使用這個選項,  

  子選項-t,追加在在-T選項后,用來指定轉譯載入的資料庫型別,擴展介紹下,-t可以指定的資料型別有Btree、Hash、Queue和Recon資料庫

 PS:如果指定了選項-T,那么一定要追跟子選項 -t

4.察看生成的虛擬用戶資料檔案

[root@VM_0_10_centos tmp]# ll /etc/vsftpd/virtusers.db 
-rw-r--r-- 1 root root 12288 Oct  9 11:02 /etc/vsftpd/virtusers.db

PS:以后再添加虛擬用戶的時候,只需要按照“一行用戶名,一行口令”的格式將新用戶名和口令添加進虛擬用戶名單檔案,但是光這樣做還不夠,不會生效的哦!還要再執行一遍“ db_load -T -t hash -f 虛擬用戶名單檔案 虛擬用戶資料庫檔案.db ”的命令使其生效才可以!

七、設定PAM驗證檔案,并指定虛擬用戶資料庫檔案進行讀取

1.察看原來的Vsftp的PAM驗證組態檔

[root@VM_0_10_centos tmp]# cat /etc/pam.d/vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required    pam_shells.so
auth       include    password-auth
account    include    password-auth
session    required     pam_loginuid.so
session    include    password-auth

2.在編輯前做好備份

[root@VM_0_10_centos tmp]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
[root@VM_0_10_centos tmp]# vi /etc/pam.d/vsftpd

內容如下

[root@VM_0_10_centos tmp]# vi /etc/pam.d/vsftpd
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
# 以下兩條是手動添加的,內容是對虛擬用戶的安全和帳戶權限進行驗證,
# 這里的auth是指對用戶的用戶名口令進行驗證
auth    sufficient      /usr/lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers
# 這里的accout是指對用戶的帳戶有哪些權限哪些限制進行驗證,
# 其后的sufficient表示充分條件,也就是說,一旦在這里通過了驗證,那么也就不用經過下面剩下的驗證步驟了,
# 相反,如果沒有通過的話,也不會被系統立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著用戶還必須將經歷剩下來>的驗證審核,
account sufficient /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers # 后面的/lib/security/pam_userdb.so表示該條審核將呼叫pam_userdb.so這個庫函式進行, # 最后的db=/etc/vsftpd/virtusers則指定了驗證庫函式將到這個指定的資料庫中呼叫資料進行驗證, auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth

八、虛擬用戶的配置

1.規劃好虛擬用戶的主路徑

[root@VM_0_10_centos tmp]# mkdir /opt/vsftpd

2.建立測驗用戶的FTP用戶目錄

[root@VM_0_10_centos tmp]# mkdir /opt/vsftpd/{zs,thy}
[root@VM_0_10_centos tmp]# ls /opt/vsftpd/
thy  zs

3.建立虛擬用戶組態檔模版

[root@VM_0_10_centos tmp]# cp /etc/vsftpd/vsftpd.conf.backup /etc/vsftpd/vconf/vconf.tmp

4.定制虛擬用戶模版組態檔

[root@VM_0_10_centos tmp]# vi /etc/vsftpd/vconf/vconf.tmp 
# 指定虛擬用戶的具體主路徑,
local_root=/opt/vsftpd/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
# 設定單個客戶端的最大執行緒數,這個配置主要來照顧Flashget、迅雷等多執行緒下載軟體,
max_per_ip=5
# 設定該用戶的最大傳輸速率,單位b/s,
local_max_rate=50000

這里將原vsftpd.conf組態檔經過簡化后保存作為虛擬用戶組態檔的模版,將并不需要指定太多的配置內容,主要的框架和限制交由 Vsftpd的主組態檔vsftpd.conf來定義,即虛擬用戶組態檔當中沒有提到的配置專案將參考主組態檔中的設定,而在這里作為虛擬用戶的組態檔模版只需要留一些和用戶流量控制,訪問方式控制的配置專案就可以了,這里的關鍵項是local_root這個配置,用來指定這個虛擬用戶的FTP主路徑,

5.更改虛擬用戶的主目錄的屬主為虛擬宿主用戶:

[root@VM_0_10_centos tmp]# chown -R vrvsftpd.vrvsftpd /opt/vsftpd/
[root@VM_0_10_centos tmp]# ll /opt/vsftpd/
total 8
drwxr-xr-x 2 vrvsftpd vrvsftpd 4096 Oct  9 11:24 thy
drwxr-xr-x 2 vrvsftpd vrvsftpd 4096 Oct  9 11:24 zs

九、給測驗用戶定制

1.從虛擬用戶模版組態檔復制

[root@VM_0_10_centos tmp]# cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/thy

2.針對具體用戶進行定制

[root@VM_0_10_centos tmp]# vi /etc/vsftpd/vconf/thy 
# 指定虛擬用戶的具體主路徑,
local_root=/opt/vsftpd/thy
# 設定不允許匿名用戶訪問,
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
# 設定單個客戶端的最大執行緒數,這個配置主要來照顧Flashget、迅雷等多執行緒下載軟體,
max_per_ip=1
# 設定該用戶的最大傳輸速率,單位b/s,
local_max_rate=25000

十、啟動服務

[root@VM_0_10_centos tmp]# systemctl restart vsftpd
[root@VM_0_10_centos tmp]# systemctl status vsftpd

十一、測驗

1.在虛擬用戶目錄中預先放入檔案

[root@VM_0_10_centos tmp]# touch /opt/vsftpd/thy/thy.test

2.從其他機器作為客戶端登陸FTP

前提這臺機器安裝了ftp服務,能使用ftp命令

 解決:

可能是pam問題,上面配置vsftpd.conf組態檔時,沒有開啟pam的驗證,將pam驗證開啟即可

參考網址:https://blog.csdn.net/junjunjiao/article/details/50738009

測驗登錄:

3.測驗列單操作

解決:

將主動改為被動,然后重新登錄ftp

ftp> passive
Passive mode on.

參考網址:https://blog.csdn.net/indexman/article/details/42649329

4.測驗上傳操作

引數使用格式參考網址:https://www.jb51.net/article/124033.htm

首先現在客戶端服務器上當前目錄創建hello.txt檔案,登錄ftp,測驗上傳

[root@VM_0_16_centos ~]# touch hello.txt
[root@VM_0_16_centos ~]# ftp
ftp> ls
227 Entering Passive Mode (106,53,73,200,241,96).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Oct 09 03:51 thy.test
226 Directory send OK.
ftp> put
(local-file) hello.txt
(remote-file) ftp_hello.txt
local: hello.txt remote: ftp_hello.txt
227 Entering Passive Mode (106,53,73,200,91,237).
150 Ok to send data.
226 Transfer complete.
30 bytes sent in 3e-05 secs (1000.00 Kbytes/sec)

在vsftpd服務端就能看到剛剛上傳的檔案了

[root@VM_0_10_centos tmp]# ls /opt/vsftpd/thy/
ftp_hello.txt  thy.test

5.測驗建立目錄操作

ftp> mkdir ftp_test
257 "/opt/vsftpd/thy/ftp_test" created

6.測驗下載操作

 需要下載的檔案,vsftpd服務端必須要有這個檔案才行

ftp> get thy.test
local: thy.test remote: thy.test
227 Entering Passive Mode (106,53,73,200,245,241).
150 Opening BINARY mode data connection for thy.test (0 bytes).
226 Transfer complete.

 在/etc/vsftpd/vsftpd.conf中,local_enable的選項必須打開為Yes,使得虛擬用戶的訪問成為可能,否則會出現以下現象:

[root@KcentOS5 ~]# ftp
ftp> open ip地址
Connected to ip地址.
500 OOPS: vsftpd: both local and anonymous access disabled!

原因:虛擬用戶再豐富,其實也是基于它們的宿主用戶overlord的,如果overlord這個虛擬用戶的宿主被限制住了,那么虛擬用戶也將受到限制,
補充:

500 OOPS:錯誤

有可能是你的vsftpd.con組態檔中有不能被識別的命令,還有一種可能是命令的YES 或 NO 后面有空格,

550 權限錯誤,不能創建目錄和檔案

解決方法: 關閉selinux

# vi /etc/selinux/config

將 SELINUX=XXX -->XXX 代表級別

改為

SELINUX=disabled

修改組態檔需要重啟

7、通過瀏覽器訪問

ftp://106.53.73.200/

輸入配置的用戶名和密碼即可

 

 

 

 

參考網址:https://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html

引數使用格式參考網址:https://www.jb51.net/article/124033.htm

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/163588.html

標籤:Linux

上一篇:linux jdk配置

下一篇:nginx組態檔 http 強跳轉 https

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more