1. 程式人生 > >ftp服務的搭建和配置

ftp服務的搭建和配置

 我們學了的檔案遠端傳輸除有:有scp命令和rsync命令

今天我寫的是與以上兩種方式不同的一種方式——ftp

只要在ftp伺服器上下載相應的軟體,將檔案放到ftp的釋出目錄下,

客戶端只要登陸ftp伺服器,就能瀏覽,下載,上傳檔案。

要搭建ftp遠端傳輸下載其相應的軟體vsftp服務端軟體和lftp客戶端軟體。

在安裝軟體之前,首先要將selinux核心級防火牆關閉,

否則會影響客戶端的登陸。

ftp的簡單介紹:

ftp(檔案傳輸協議)是internet上仍常用的最老的網路協議之一,

它為系統提供了通過網路與遠端伺服器進行傳輸的簡單方法。

在red hat entreprise linux 6中ftp服務包的名稱為vsftpd,

它代表very secure file transferprotocol damon服務名稱也叫做vsftp。

預設配置檔案讓anonymous使用者只能下載位於chroot目錄中的內容。

/var/ftp這意味著遠端ftp 使用者端能以使用者anonymous或ftp身份連線到伺服器(無需密碼),

並從ftp伺服器上的/var/ftp目錄下載檔案(其本地ftp使用者可以讀取 這些檔案)

如果顯示結果不是disabled

則需編輯/etc/sysconfig/selinux檔案,關閉selinux

vim /etc/sysconfig/selinux

如下圖編輯:



在改變selinux之後需要重啟主機

,讓核心重新載入,識別selinux的值。
除此之外還需要修改防火牆配置,關閉防火牆或者如下方式將lftp服務加入防火牆策略:

systemctl start firewalld

firewall-cmd --permanent --add-service=ftp

firewall-cmd --reload

firewall-cmd --list-all

public(default,active)

interfaces:eth0

services:dhcpv6-client ftp ssh           #如果此處有ftp則新增成功

masquerade:no

下來就可以安裝vsftp和lftp了:

yum install vsftpd            安裝服務端軟體

yum install lftp                   安裝客戶端軟體

systemctl start vsftpd            開啟vsftpd

systemctl enable vsftpd         開機啟動

下來客戶端就可以進行測試,可以在本機上測試,也可以在別的主機上測試。

lftp 172.25.254.157


lftp的預設釋出目錄為/var/ftp/,所以在客戶端登陸後看到的是pub目錄。
像上面的這種方式是以匿名使用者登陸的lftp,

除此之外還可以用本地使用者的身份登陸伺服器,

需要強調的是這裡的使用者是服務端的使用者,不是客戶端的使用者,

並且本地登陸的使用者是具有建立,刪除,上傳和下載許可權的

在服務端建立一個westosstudent使用者,並給該使用者一個密碼(我兩個設的一樣方便記憶):自己設定



在客戶端使用westos使用者登陸ftp伺服器:

lftp 172.25.254.157 -u westos

lftp中沒有touch命令,可用的命令可以使用**?** 進行檢視。


作為一個安全的伺服器,不允許客戶端有這麼多的操作,

所以需要對客戶端的登陸進行控制,

只要在lftp的配置檔案/etc/vsftpd/vsftpd.conf中新增相應的引數,

就可以進行控制。

常用的lftp配置檔案引數:

anonymous_enable=YES            允許匿名使用者登陸

local_enable=YES                        允許本地使用者登陸

write_enable=YES                        允許登陸的使用者可寫

anon_upload_enable=YES          匿名使用者可寫

anon_root=/westos                        更改匿名使用者登陸後的家目錄

anon_umask=022                          更改匿名使用者上傳檔案的許可權 

anon_world_readable__only=N   匿名使用者可以下載,此處設定為NO表示可以下載

anon_other_write_enable=YES   匿名使用者可以刪除

anon_mkdir_write_enable=YES   匿名使用者可以建立資料夾

anon_max_rate=1024000             控制下載速率

max_clients=2                                 最多主機連線數

chown_uploads=YES                    

chown_username=westos              更改使用者登陸時的使用者

local_root=/directory                       本地使用者家目錄修改

local_umask=077                            本地使用者上傳檔案的保留許可權

上列所有引數帶(+)的,配置檔案中是沒有的,需要寫入到配置檔案中。

下面是這些引數的示例,所有修改都在配置檔案/etc/vsftpd/vsftpd.conf中,

並且在修改後重啟服務,建議在客戶端退出登陸後再重啟vsftpd

注意:

1.更改ftp配置時(即執行vim /var/vsftpd/vsftpd.conf的命令)完後,都要執行systemctl restart vsftpd

2.每次做下一個實驗時都要將環境還原到最適合的狀態否則會影響下一個實驗(尤其是更改:配置的實驗)

禁止匿名使用者登陸

更改之前:


重啟服務後如下圖,登陸成功是可以瀏覽到其內容,否則為失敗:



禁止本地使用者登陸

改之前



客戶端再次登陸會出現530的報錯,即成功禁止本地使用者登陸:



相應的錯誤號如下:

530:認證失敗,服務不給認證或者認證過程有問題

550:服務本身為開放該功能

553:本地檔案系統許可權過小

500:本地檔案系統許可權過大

修改本地使用者登陸的許可權



/root/westos檔案為修改之後上傳的檔案:

修改本地使用者登陸的目錄
本地使用者預設登陸之後的目錄為本使用者的家目錄,修改為/var/ftp:

禁止登陸的使用者可寫

改之前:



預設情況下匿名使用者只有讀許可權,本地使用者有寫許可權,

所以是對本地使用者寫許可權的控制,

如下圖,本地使用者student登陸後不能上傳和刪除檔案:



匿名使用者可以上傳檔案

匿名使用者上傳檔案時由於檔案許可權太小

553:本地檔案系統許可權過小,如下圖


所以需要將pub目錄的屬性進行更改:

chgrp ftp /var/ftp/pub/

chmod 775 /var/ftp/pub/

將pub目錄的組改為ftp是因為匿名使用者再登陸時預設為ftp使用者,

在給pub的775許可權(相當於給組加上w許可權),

保證了所有的匿名使用者可以上傳檔案:

更改匿名使用者家目錄

在anon_upload enable=YES

下加上anon_root=/root/westos

預設情況下匿名使用者在登陸之後的目錄為/var/ftp,更改為/root/westos




允許匿名使用者上傳

改之前:


更改匿名使用者上傳檔案的許可權,預設為077,更改為022之後,如下:



檔案huige2為修改預設許可權後的檔案。

允許匿名使用者可以下載
anon_world_readable_only=NO



允許匿名使用者可以刪除
anon_other_write_enable=YES




只允許同時存在2個連結



當有第三個連結時,登陸失敗:



所有使用者登陸的使用者都為westos


修改之後在上傳檔案的所有人為westos,westos的id為1002

看檔案huig3的ID與westos相同




可以設定登陸黑名單

禁止一些使用者登陸lftp伺服器。涉及兩個檔案

/etc/vsftpd/user_list   臨時黑名單
/etc/vsftpd/ftpusers    永久黑名單

將本地使用者huige加入/etc/vsftpd/user_list檔案之後,huige使用者就不能登陸:



臨時黑名單和永久黑名單最大的區別是,

加入永久黑名單的使用者永遠不能登陸,但是加入臨時黑名單的使用者,

在給配置檔案加上以下引數之後,臨時黑名單就轉化為了白名單,

只有在user_list檔案中使用者可以登陸,其餘使用者都禁止登陸:

userlist_deny=NO


 在實際生產應用中,客戶端在登陸時需要註冊帳號

qq的使用者非常多,如果每個使用者註冊帳號,服務端就要建立一個本地使用者,

是沒有 辦法實現的。因為本地使用者的建立個數是有一定數量的,比實際生產所需要的使用者要少的多,

所以就需要建立一些虛擬帳號,來滿足這種生產環境。

要生成虛擬使用者,首先需要以一張表去記錄這些虛擬使用者,

在/etc/vsftpd/目錄下建立一個檔案,檔名根據自己的喜好而定:

該檔案是明文的,為了安全,需要對 該檔案加密:

-t  指定加密方式
-f  指定加密檔案
/etc/vsftpd/loginusers.db  加密後的檔案

加密完成之後需要在/etc/pam.d/目錄下建立一個檔案,如下:

account  帳號
required  必須有帳號
pam_userdb.so db=/etc/vsftpd/loginusers  通過pam_userdb.so外掛去/etc/vsftpd/loginusers

編輯配置檔案:

如圖:修改pam_service_name=vsftpd

            為pam_service_name=ftpauth

            並新增guest_enable=YES

檢測:

在另一個shell中用虛擬使用者連線