linux ftp服務的搭建配置

abin1703發表於2020-03-02

FTP介紹

FTP:是檔案傳輸協議的縮寫。

功能: 用來實現檔案的上傳(upload)和下載(download)

ftp的工作埠: 21 : 控制埠,用於在客戶機和伺服器之間建立連線

                       20 : 資料埠,用於伺服器給客戶機主動進行資料連線

vsftpd:非常安全檔案傳輸協議守護程式(very secure ftp daemon)

ftp的工作模式:主動port、被動passive模式

客戶端與服務端傳輸資料時,服務端傳輸埠為20時為主動模式,傳輸埠為>1024的隨機埠時為被動模式

ftp主動(port)模式工作過程

1.客戶機和伺服器建立連線關係(登入): 客戶機(>1024的隨機埠號)  <---->   伺服器 21號port

2.雙方建立資料連線關係,傳輸資料:客戶機(>1024的隨機port) <---->   伺服器 20號port

ftp被動(pasv)模式工作過程

1.客戶機和伺服器建立連線關係(登入): 客戶機(>1024的隨機埠號)  <---->   伺服器 21號port

2.雙方建立資料連線關係,傳輸資料:客戶機(>1024的隨機port) <---->   伺服器(>1024的隨機port)

說明:當ftp伺服器上有防火牆時,通常客戶機是以被動模式去訪問ftp伺服器的。在ftp伺服器的vsftpd.conf和防火牆上要指定放行的被動模式埠範圍的最小值和最大值。

vsftpd.conf 的被動模式埠範圍:

pasv_min_port=5000

pasv_max_port=6000


vsftpd部署思路:

1.關閉安全功能,並查狀態:

    systemctl  stop  firewalld    ;  setenforce  0                  #關閉防火牆及selinux安全設定

    systemctl  status  firewalld  ;  getenforce                    #檢視防火牆狀態,檢查是否關閉

2.查軟體是否已安裝,如果未安裝就安裝軟體。

    rpm  -q  vsftp  ftp  lftp                                                  #vsftpd是伺服器端程式, ftp lftp為客戶端程式 

3.啟動服務,並允許開機自動啟動

   systemctl  restart  vsftpd                                               #重啟vsftpd服務

   systemctl  enable  vsftpd                                               #設定vsftpd開機自啟動

4.設定共享目錄,重新載入設定。

5.做本地(內測)訪問測試,做異地(公測)訪問測試。


實驗環境:

centos7.6 (以本機IP為例 192.168.11.11)


安裝步驟:

yum  install -y  vsftpd  ftp  lftp                              #使用yum安裝vsftpd  ftp  lftp 軟體systemctl  restart  vsftpd                                      #啟動服務systemctl  enable  vsftpd                                       #設定開機自啟動systemctl  status  vsftpd                                       #檢視服務狀態,為running 時則服務啟動成功

共享需要的檔案:

vsftpd的預設共享目錄:

1.匿名使用者(ftp或anonymous)共享: /var/ftp目錄

2.普通使用者:訪問的是普通使用者自己的家目錄,通常是" /home/使用者名稱"資料夾

注意:root使用者預設不能登入vsftpd伺服器來訪問共享,因為root賬號在黑名單裡。


服務測試:

 方式一: ftp 192.168.11.11  回車 再按照提示輸入使用者密碼即可登陸

image.png

 方式二: lftp  192.168.11.11  -u  使用者名稱,密碼  即可登陸成功 (例: 使用者名稱為tom  密碼為0 登陸)

image.png

 在window下可以用資源管理器進行登陸: ftp://192.168.11.11

image.png


vsftpd配置檔案:  rpm  -qc  vsftpd  (檢視vsftpd的配置檔案)

image.png

主配置檔案為  /etc/vsftpd/vsftpd.conf


FTP服務功能及修改對應配置檔案介紹


黑名單功能:


/etc/vsftpd/ftpusers  和   /etc/vsftpd/user_list  為黑名單檔案

功能:可以把使用者設定為黑白名單,限制使用者訪問


例:root使用者預設在黑名單中,把兩個上述檔案中的root用#號註釋即可用root使用者訪問

image.png

也可以把其他使用者加入黑名單中

(注: user_list 可以設定為白名單,在/etc/vsftpd/vsftpd.conf 配置檔案中最後一行新增 userlist_deny=NO )

新增後重啟服務,白名單的使用者可以訪問,而非白名單使用者不能訪問,當黑白名單同時存在時,黑名單優先順序大於白名單,也就是隻要出現在  黑名單就不能正常登陸服務

建議:修改配置檔案時最好先備份檔案


chroot牢籠功能:

因登陸的使用者訪問的是自身的家目錄,但可以透過命令檢視其他檔案,比如根目錄或其他配置檔案,所以可以使用chroot牢籠功能限制,只  允許登陸的使用者訪問自己的家目錄

chroot牢籠分為四種情況:

 1.全部使用者不加鎖(預設,但不安全)

 2.全部加鎖

 3.少數使用者不加鎖

 4.少數使用者加鎖


情況一:使用vim 編輯 配置檔案 /etc/vsftpd/vsftpd.conf ,並用set nu顯示行號,可以看到以下行數的配置檔案,預設不加鎖,不用修改

image.png


情況二:啟動所有普通使用者的牢籠功能(即對所有人加鎖)

按照上述步驟編輯配置檔案/etc/vsftpd/vsftpd.conf ,set nu顯示行號,去除101行#號,並新增allow_writeable_chroot=YES,如下圖所示:

image.png


情況三:給指定少數使用者不啟用牢籠功能(即少數人不加鎖)

同理編輯配置檔案,並指定白名單路徑,如下圖所示:

image.png

vim編輯/etc/vsftpd/chroot_list,新增不需要啟用牢籠功能的使用者,再重啟服務即可


情況四:給指定的少數普通使用者啟用牢籠功能(即少數人加鎖)

編輯配置檔案如下圖所示:

image.png

用#號註釋掉101行 chroot_local_user=YES,此時只有檔案/etc/vsftpd/chroot_list 中的使用者啟用了牢籠功能

最後重啟服務( 注:每次修改完配置檔案都得重啟服務  systemctl  restart  vsftpd)


anonymous匿名使用者功能

實際作用:實現允許anonymous匿名使用者對共享檔案具有可讀可寫的許可權

分析:想實現上述功能必須滿足以下條件

1.檔案共享軟體必須允許這個使用者有可讀可寫的許可權。

2.使用者對共享目錄自身要有可讀可寫的許可權。

3.匿名使用者僅允許上傳檔案到/var/ftp中的子目錄中。如/var/ftp/upload,且ftp匿名使用者對upload目錄要有可讀可寫許可權。

( 警告:/var/ftp目錄的屬主、屬組不允許修改,且other許可權不允許有w可寫許可權,否則用ftp匿名使用者訪問共享時會提示下面這個500錯誤:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

           Login failed.

           421 Service not available, remote server has closed connection)


實際操作步驟:

                   

1.編輯配置檔案/etc/vsftpd/vsftpd.conf ,去除29 , 30行的#號,再新增兩行程式碼,如圖所示:

image.png

#anon_upload_enable=YES        允許匿名使用者上傳#anon_mkdir_write_enable=YES   允許匿名使用者用mkdir建立目錄anon_other_write_enable=YES    允許匿名使用者執行rm刪除等操作(新增此行)anon_world_readable_only=NO    關閉匿名使用者只讀的限制(為YES時會無法下載)

2.用root使用者建立/var/ftp/upload目錄,許可權為777或屬主和屬組均為ftp,重啟vsftpd服務,使用ftp登陸,即可實現匿名共享

image.png


ftp服務限速功能:  

即對不同使用者限制不同的檔案傳輸速度


1.在配置檔案/etc/vsftpd/vsftpd.conf 中新增如下內容:

user_config_dir=/etc/vsftpd/userconf                        #指定個性化配置檔案的主目錄

image.png


2.建立指定個性化配置檔案的主目錄: mkdir -pv /etc/vsftpd/userconf

使用vim 建立編輯 /etc/vsftpd/userconf/gg

新增內容: local_max_rate=2000000          #即對名為gg的使用者上傳和下載速度限制為2MB/s


vsftpd的tcp_wrapers防火牆設定:

tcp_wrapers功能:一個迷你的防火牆,可以用來做基於tcp協議的應用程式的ip安全訪問控制

配置檔案:  /etc/hosts.allow (白名單)  ;  /etc/hosts.deny (黑名單)

!技巧:讓少數人為白戶,那麼先在hosts.deny中做拒絕所有(all)黑名單,然後在hosts.allow中做少數IP的放行白名單。

設定舉例:

格式說明: 守護程式名稱 : 主機名或IP地址

vim  /etc/hosts.deny           #黑名單

vsftpd:192.168.11.1              #拒絕192.168.11.1這臺主機訪問vsftpd共享

sshd:192.168.11.1                 #拒絕192.168.11.1這臺主機訪問sshd共享


vsftpd虛擬使用者功能:

虛擬使用者:即非useradd建立的使用者賬號(非/etc/passwd中的賬號),而是用vim建立的屬於vsftpd的獨立使用者賬號。

虛擬使用者的優勢:可以避免系統中的使用者賬號過多,讓vsftpd檔案共享軟體獨立管理自己的使用者賬號。


虛擬使用者賬號檔案格式:

檔案中的奇數行是使用者賬號,偶數行是使用者的密碼。

例:

1.建立虛擬使用者賬號檔案:vim /etc/vsftpd/vuser.txt,輸入圖中內容,即建立虛擬使用者f1,f2,f3,密碼為123456

image.png


2.將虛擬使用者賬號轉換成加密的資料庫格式檔案。

yum  install  -y  libdb-utils                                 #安裝libdb-utils

cd  /etc/vsftpd                                                     #cd到/etc/vsftpd目錄下

db_load  -T  -t  hash  -f  /etc/vsftpd/vuser.txt  /etc/vsftpd/vuserdb.db         #用hash演算法對vuser.txt轉化格式為.db

chmod  -v  600  /etc/vsftpd/vuserdb.db              #給予檔案/etc/vsftpd/vuserdb.db 許可權


3.在vsftpd的pam認證檔案中新增虛擬使用者賬號檔案的認證關係。

vim  /etc/pam.d/vsftpd , 在檔案開頭插入以下兩行,並如圖:

auth  sufficient  pam_userdb.so     db=/etc/vsftpd/vuserdb

account  sufficient  pam_userdb.so  db=/etc/vsftpd/vuserdb (程式碼作用:既能讓虛擬使用者訪問共享,也能讓普通使用者訪問共享。)

image.png


4.用useradd建立一個普通使用者賬號qq

 useradd  qq  -s  /sbin/nologin                #建立一個名為qq的使用者,指定登入shell為.sbin/nologin


5.在vsftpd.conf配置檔案中設定一個真實使用者賬號,並將真實使用者賬號vftper和虛擬使用者賬號檔案關聯起來。

 vim  vsftpd.conf 在檔案最後新增如下內容:

 guest_enable=YES                                        #允許來賓使用者訪問共享,即虛擬使用者

 guest_username=vftper                               # 指定來賓使用者名稱為vftper使用者(即第4步新建的使用者)

 user_config_dir=/etc/vsftpd/vuser_conf     #指定使用者配置檔案目錄

 allow_writeable_chroot=YES                       #允許chroot功能下執行寫操作(必須加此行,否則會登入失敗)


6.給每個虛擬使用者賬號設定獨立的共享訪問速度和訪問目錄。

cd  /etc/vsftpd

mkdir  -v  vuser_conf

cd  vuser_conf                                             #在/etc/vsftpd目錄下,建立vuser_conf目錄

#建立f1、f2虛擬使用者的會員個性化設定檔案,允許f1這個虛擬使用者在自己的家目錄中可讀可寫。

touch  f1  f2

mkdir  -v  /home/vftper/{f1,f2}

chmod  -v  777  /home/vftper/{f1,f2}

vim  f1 輸入內容:

                     write_enable=YES

                    anon_world_readable_only=NO

                    anon_upload_enable=YES

                    anon_mkdir_write_enable=YES

                    anon_other_write_enable=YES

                    local_root=/home/vftper/f1

#允許f2這個使用者在自己的家目錄中可讀,但不可寫。

vim  f2 輸入內容:

                     local_root=/home/vftper/f2        #只寫這行,其餘行可以不寫

                    write_enable=NO

                    anon_world_readable_only=NO

                    anon_upload_enable=NO

                    anon_mkdir_write_enable=NO

                    anon_other_write_enable=NO

7.重啟vsftpd服務,並分別用虛擬使用者賬號訪問共享。

    systemctl  restart  vsftpd

    ftp  192.168.11.11 -->用f1、f2虛擬使用者分別訪問共享,測試檔案的上傳。


    到此,vsftpd的虛擬使用者專案試驗完畢。



ftp和lftp客戶端程式的操作功能:

兩者都是客戶端應用程式

ftp命令格式: ftp   192.168.11.11 

lftp命令格式:lftp  192.168.11.11  -u  qq,0    #使用密碼為0,使用者名稱為qq的賬號登陸

ftp 和 lftp 的區別:  ftp模式下傳輸檔案需指定檔案的根目錄,lftp則不需指定檔案的根目錄


關於ftp的服務部署即配置檔案的設定就介紹到這裡!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2677967/,如需轉載,請註明出處,否則將追究法律責任。

相關文章