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,除此之外還可以用本地使用者的身份登陸伺服器,
需要強調的是這裡的使用者是服務端的使用者,不是客戶端的使用者,
並且本地登陸的使用者是具有建立,刪除,上傳和下載許可權的。
在服務端建立一個westos和student使用者,並給該使用者一個密碼(我兩個設的一樣方便記憶):自己設定
在客戶端使用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中用虛擬使用者連線