自學linux——18.FTP伺服器的搭建

                                                                  Centos7下FTP伺服器的搭建

一、FTP的作用

文件傳輸協議(File Transfer Protocol,FTP),是一種在互聯網中進行文件傳輸的協議,基於客戶端/伺服器模式,默認使用 20、21 號埠,其中20埠是數據埠用於進行數據傳輸,21埠為命令埠,用於接收客戶端發出的相關FTP命令和參數

FTP協議工作模式有兩種:主動模式和被動模式,其中被動模式是默認的工作模式

A.主動模式:FTP 伺服器主動向客戶端發起連接請求

B.被動模式:FTP 伺服器等待客戶端發起連接請求

由於FTP一般部署在企業內網,如果開啟並配置了防火牆,有時候需要將FTP的工作模式設置為主動模式,才可以傳輸數據

二、vsftpd(FTP守護進程)三種認證模式

1.匿名開放模式:任何人都可以無需密碼驗證而直接登錄到FTP伺服器

2.本地用戶模式:是通過Linux系統本地的賬戶密碼資訊進行認證的模式

3.虛擬用戶模式:需要為FTP服務單獨 建立用戶資料庫文件,虛擬出用來進行口令驗證的賬戶資訊,而這些賬戶資訊在 伺服器系統中實際上是不存在的,僅供 FTP 服務程式進行認證使用。是三種模式中最安全的一種認證模式,用的最多

三、vsftpd.conf的主要參數(根據實際情況來進行配置許可權)

 

四、搭建流程

1.伺服器端vsftpd的安裝

①    通過rpm命令查看是否已經安裝過vsftpd,如果沒有安裝則通過yum命令安裝    

rpm  - q  vsftpd              #查看是否安裝vsftpd                      
yum  -y  install  vsftpd      #下載vsftpd

 

安裝完成後,是否成功查看配置文件/etc/vsftpd/

rpm  -q  vsftpd             #查看是否安裝vsftpd 
ll /etc/vsftpd              #查看配置文件

 2.匹配認證模式

(1)匿名開放模式:匿名用戶可以上傳、下載、創建、刪除、更名文件的許可權

A.伺服器端:

①    把主配置文件備份,刪除注釋的參數,再重定向將其覆蓋到主配置文件

cat /etc/vsftpd/vsftpd.conf          #查看配置文件(注釋看多不好看,把注釋刪除)
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak  #配置文件備份
ll  /etc/vsftpd                      #查看文件(夾)
grep -v "#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf   #刪除注釋的參數,再重定向將其覆蓋到配置文件
cat /etc/vsftpd/vsftpd.conf          #查看配置文件(已沒有注釋參數)

 ②寫入相應的許可權

vim /etc/vsftpd/vsftpd.conf       #編輯配置文件
anon_umask=022                    #匿名用戶上傳文件的umask的值
anon_upload_enable=YES            #允許匿名用戶上傳文件
anon_mkdir_write_enable=YES       #允許匿名用戶創建目錄
anon_other_write_enable=YES       #允許匿名用戶其他的許可權(重命名,刪除)

③重啟vsftpd服務,並添加到開機啟動

systemctl restart vsftpd        #重啟服務
systemctl enable vsftpd         #添加到開機啟動

④在/var/ftp/pub/下創建文件

cd /var/ftp/pub/       #切換路徑
touch  文件名   #創建文件

⑤清除防火牆的默認策略(或直接關掉防火牆)

systemctl stop firewalld           #關閉防火牆    
yum -y install iptables-services   #下載iptables
systemctl enable iptables          #開啟自啟
systemctl start  iptables          #啟動iptables
iptables -F                        #清除策略
service iptables save              #保存配置

若直接關閉防火牆則不需要以上的操作,因為實際工作當中為了安全防火牆是開啟的,而防火牆默認禁止了ftp傳輸的埠,因此清除防火牆的默認策略,centos7中沒有service iptables save指令來保存防火牆的規則,所有採用以上的方式來實現

⑥修改ftp用戶的許可權

ll -d /var/ftp/pub                  #查看pub目錄
chown -Rf ftp /var/ftp/pub          #改變ftp用戶的許可權
ll -d /var/ftp/pub                  #查看pub目錄

通過查看pub目錄發現只有root用戶才有寫入的許可權,所以直接把pub目錄所有者改為ftp用戶,讓ftp用戶也擁有寫入的許可權

⑦修改ftp域相關的規則(或直接關掉SELinux,方法見17)

getenforce                        #查看SELinux的狀態
getsebool -a | grep ftp           #查看ftp的規則
setsebool -P ftpd_full_access=on  #修改ftpd_full_access為永久打開

實際工作中SELinux一般都是開啟的,當SELinux狀態為開啟,查看與ftp域相關的策略,修改當中的規則

B.客戶機端:

①通過rpm命令查看是否已經安裝過ftp,如果沒有安裝則通過yum命令安裝  

rpm -q ftp             #查看是否安裝ftp
yum -y install ftp     #下載ftp

②用ftp連接下載文件

ftp  伺服器地址     #連接伺服器端

匿名開放認證模式下,賬戶統一為 anonymous,密碼為空,進入後

ls               #查看文件/目錄
cd  pud          #切換路徑
ls               #查看文件/目錄
get  文件名       #下載文件
quit(exit)      #退出
ll               #可以查看到剛下載的目錄

③用ftp連接創建目錄

ftp  伺服器地址      #連接伺服器端
anonymous  用戶名  密碼為空
mkdir  文件名        #創建目錄
ls                  #查看剛創建的目錄
rmdir 文件名 #刪除目錄

回伺服器端,用 ll  /var/ftp/pub可以查看剛從客戶機端創建的目錄

(2)本地用戶模式

 A.伺服器端:

①關閉匿名模式,開啟本地匿用戶模式,並添加相應的參數

anonymous_enable=NO            #關閉匿名模式登錄
local_enable=YES               #允許本地用戶登錄
write_enable=YES               #可寫許可權
local_umask=022                #本地用戶模式創建文件的 umask 值
userlist_enable=YES            #啟用「禁止用戶名單」  
userlist_deny=YES              #開啟用戶作用名單文件功能

vsfftpd服務默認開啟了匿名模式和本地用戶模式,如果沒有手動配置一下

②重啟vsftpd服務

systemctl restart vsftpd       #重啟
systemctl enable vsftpd        #自啟

③創建用戶設置密碼

useradd  用戶名    #添加用戶
passwd   用戶名    #給用戶設置密碼

輸入密碼指令後,會提示輸入密碼和確認密碼

B.客戶機端

用ftp連接伺服器後,用剛創建的用戶密碼登錄就可以進行操作。

注意:

a.本地用戶模式不用修改用戶的許可權,因為連接後默認訪問的是該用戶的家目錄(/home/ftptest)

b.該模式下默認禁止root和大部分系統用戶登錄,如果非登不可,就在伺服器端刪除/etc/vsftpd/user_list和/etc/vsftpd/ftpusers路徑下的同個用戶名

(3)虛擬用戶模式

 A.伺服器端

①在vuser.list中創建用戶資訊

cd /etc/vsftpd/      #切換路徑
vim vuser.list       #創建用戶資訊
用戶1
密碼
用戶2
密碼

②轉換用戶文件格式(db_load命令)

db_load                #查看是否安裝此命令(若有顯示如下)
usage: db_load [-nTV] [-c name=value] [-f file]
        [-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
yum -y install db4      #若沒有則下載(有就略過此步)
db_load -T -t hash -f vuser.list vuser.db   #明文的vuser.list文件轉換為了vuser.db格式的文件
file vuser.db           #看是否轉換成功(成功如下)
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
ll vuser.db            #查看
chmod 600 vuser.db     #降低該文件的許可權
rm -rf vuser.list      #刪除明文文件

③創建PAM文件

vim /etc/pam.d/vsftpd.vu      #創建並編輯.du文件
auth required pam_userdb.so db=/etc/vsftpd/vuser     #db參數
account required pam_userdb.so db=/etc/vsftpd/vuser  #db參數

.vu的文件名可以任意,用於虛擬用戶認證,db參數為上一步db_load命令生成的資料庫文件的路徑,不用寫後綴名

④創建本地用戶來映射虛擬用戶

useradd -d /var/ftpdir -s /sbin/nologin virtual   #創建虛擬用戶的映射賬戶
chmod -Rf 755 /var/ftpdir/       #修改許可權

創建本地用戶來映射虛擬用戶,避免 系統無法處理虛擬用戶所創建文件的屬性許可權

⑤添加虛擬用戶模式的參數

anonymous_enable=NO      #禁止匿名開放模式
local_enable=YES         #允許本地用戶模式
guest_enable=YES         #開啟虛擬用戶模式
guest_username=virtual   #指定虛擬用戶賬戶
pam_service_name=vsftpd.vu(將vsftpd修改為vsftpd.vu)  #指定PAM文件,存放於/etc/pam.d/目錄下
allow_writeable_chroot=YES    #允許對禁錮的FTP根目錄執行寫入操作,而且不拒絕用戶的登錄請求

在本地模式的基礎上添加虛擬用戶模式的參數,必須關閉匿名模式,開啟本地模式,且修改pam_service_name參數為vsftpd.vu

⑥設置虛擬用戶的許可權

mkdir /etc/vsftpd/a(任意)      #創建用戶目錄,此目錄對應之前創建的用戶
cd a/                           #切換到創建的目錄路徑
touch 用戶1(默認查看許可權)        #創建之前一樣的用戶並寫入相應的許可權    
vim  用戶2                      #創建之前一樣的用戶並寫入相應的許可權    
anon_upload_enable=YES          #上傳許可權
anon_mkdir_write_enable=YES     #寫的許可權
anon_other_write_enable=YES     #重命名,刪除許可權

vim /etc/vsftpd/vsftpd.conf    #定義虛擬用戶不同許可權的配置文件所存放的路徑
user_config_dir=/etc/vsftpd/a(文件中添加)

 ⑦重啟vsftpd服務

systemctl restart vsftpd

B.客戶機端

ftp連接用虛擬用戶1和用戶2登錄進行測試了,實現各自之前設置的許可權即可

 

總結:

1.涉及到服務的配置,要考慮防火牆和SELinux的因素

2.配置了服務,都要加入開機啟動中,讓其每次重啟自動生效

3.出現問題從用戶許可權、目錄許可權、網路防火牆、SELinux服務幾個方面去考慮