1. 程式人生 > >FTP伺服器搭建詳解(vsftpd)

FTP伺服器搭建詳解(vsftpd)

前言


在Linux系統中,vsftpd是專門用於搭建FTP伺服器的軟體。我們要下面總結的就是搭建FTP伺服器詳細操作及FTP三種登陸方式的配置。



一、FTP的登入方式



【1】匿名使用者登陸


實際上,當我們使用預設安裝的時候,系統就預設會提供匿名使用者訪問了,無需另外的配置,但是如果需要更多細節的配置,可額外新增

任何處於同一區域網或可聯通FTP服務端的使用者都可訪問

通過web端訪問時,要在位址列輸入 ftp://ftp伺服器IP,登陸該ftp伺服器,檢視或下載檔案(無需提供使用者名稱和密碼)

通過FTP客戶端訪問時,要先安裝ftp客戶端



【2】本地使用者登陸


當我們配置了本地使用者登陸時,FTP會以/etc/passwd中的使用者名稱為認證方式

即可以通過建立本地使用者和設定密碼的方式,控制登陸FTP的使用者、密碼檔案存放目錄



【3】虛擬使用者登陸


當我們配置了虛擬使用者登陸時,FTP會將儲存在檔案或資料庫中虛擬出的使用者,對映到指定的系統賬號(/sbin/nologin)來訪問資源,其中這些虛擬使用者是FTP的使用者

可以通過修改配置的虛擬賬號檔案,來控制使用者的登陸,安全性更高




二、FTP防火牆配置與軟體安裝



【1】網路環境(可選)


當我們搭建服務時,要先注意一下網路環境和看具體的情況。

如果是在區域網內部提供服務時,可以設定防火牆規則,也可以關閉防火牆;
如果是向外網提供服務時,必須要配置防火牆規則(硬體防火牆或軟體防火牆);
如果使用的雲伺服器,必須要配置安全組開放相關埠。



iptables防火牆配置


<1>在/etc/sysconfig/iptables-config檔案,新增以下兩行:

IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"


<2>在/etc/sysconfig/iptables 檔案,新增以下三行:

-A -INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT 
-A -INPUT -p tcp -m state --state NEW -m tcp --sport 21 -j ACCEPT 
-A -INPUT -P tcp --dport 20 -j ACCEPT


<3>重啟iptables,使配置生效

service iptables restart


<4>iptables防火牆關閉操作(可選)

/etc/init.d/iptables stop
chkconfig iptables off


firewalld防火牆配置


<1>selinux設定

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0


<2>firewalld防火牆設定

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --permanent --zone=public --add-ports=21/tcp
firewall-cmd --permanent --zone=public --add-ports=22/tcp
firewall-cmd --reload

<3>firewalld防火牆關閉操作(可選)

systemctl stop firewalld 
systemctl disable firewalld


【2】vsftpd安裝


本文vsftpd版本:version 3.0.2


<1>vsftpd安裝:

yum -y install  vsftpd 


<2>使用虛擬登陸賬戶時,安裝依賴包:

yum -y install  pam* db4* 



【3】vsftpd主要配置檔案詳解


下圖為安裝後生成的配置檔案:
在這裡插入圖片描述

下圖為安裝後的預設配置:
在這裡插入圖片描述

  • ftpusers為黑名單,檔案中包含的使用者將被絕對禁止登入ftp伺服器(主配置檔案任何設定,無法影響黑名單)

  • user_list為白名單或黑名單,檔案中包含的使用者可能被禁止登入,也可能被允許登入(與主配置檔案設定有關)

  • vsftpd.conf為主配置檔案,控制使用者及登陸方式,存放位置等

  • 當主配置檔案中存在userlist_enable=YES配置項時,user_list才會生效

  • 當主配置檔案中存在userlist_enable=ON或user_list檔案不存在,user_deny任何配置不會生效

  • 當主配置檔案中存在userlist_enable=YES配置項,且user_deny=YES,則僅禁止列表中的使用者登入

  • 當主配置檔案中存在userlist_enable=YES配置項,且user_deny=NO,則僅允許列表中的使用者登入,匿名使用者將無法登陸




三、FTP的匿名使用者登陸配置


實際上,當我們使用預設安裝的時候,系統就預設會提供匿名使用者訪問了,無需另外的配置,但是如果需要更多細節的配置,可額外新增

任何處於同一區域網或可聯通的網路中的使用者都可通過web端的位址列輸入 ftp://ftp伺服器IP,登陸該ftp伺服器,檢視或下載檔案(無需提供使用者名稱和密碼)

使用ftp訪問該FTP伺服器時,預設使用者和密碼都為ftp,預設無上傳許可權,預設訪問位置為/var/ftp/

配置完成後,都要重啟vsftpd服務,使配置生效
systemctl restart vsftpd


【1】配置檔案


下面為基礎的匿名使用者訪問的配置(如需更多配置可直接新增):
grep -v "^#" /etc/vsftpd/vsftpd.conf 

anonymous_enable=YES                 允許匿名使用者登入控制
local_enable=YES                     允許本地使用者登入控制
write_enable=YES                     開放寫許可權
local_umask=022                      設定本地使用者上傳建立資料夾時的許可權掩碼
dirmessage_enable=YES                設定開啟目錄標語功能
xferlog_enable=YES                   設定開啟日誌記錄功能
connect_from_port_20=YES             設定埠20進行資料連線
xferlog_std_format=YES               設定日誌使用標準的記錄格式
listen=NO                            如果啟用,vsftpd將以獨立(standalone)模式執行,不依賴於xinetd,直接執行自己去監聽服務
listen_ipv6=YES                      啟用後vsftpd去監聽IPV6套接字,這個設定和listen的設定互相排斥(一方為YSS,另一方要設為NO,否則啟動ftp時會報錯)

pam_service_name=vsftpd              設定pam服務下的vsftpd驗證配置檔名,PAM驗證會根據/etc/pam.d/下的vsftpd檔案配置
userlist_enable=YES                  啟用user_list列表檔案
tcp_wrappers=YES                     設定支援TCPwrappers



四、FTP的本地使用者登陸配置


本地使用者登陸,顧名思義就是要先在服務端建立本地使用者,然後配置FTP配置檔案,使其可以通過本地使用者登陸FTP服務端


【1】本地使用者建立


為了安全,可以建立nologin使用者,使此使用者不可登入系統,但可登入FTP

必須設定密碼,否則無法訪問


<1>建立用於ftp遠端登入的本地使用者


-d 為使用者指定家目錄。如不使用,其預設家目錄為/home/ftptest1,訪問FTP的檔案存放位置為/home/ftptest1


useradd ftptest1 -s /sbin/nologin 


<2>設定密碼

passwd ftptest1


【2】配置檔案


下面為基礎的本地使用者訪問的配置(如需更多配置可直接新增):
grep -v "^#" /etc/vsftpd/vsftpd.conf 


anonymous_enable=NO              不允許匿名使用者登入 
local_enable=YES                 允許本地使用者登入 
write_enable=YES                 開放寫許可權 
local_umask=022                  設定本地使用者上傳建立資料夾時的許可權掩碼 
dirmessage_enable=YES            設定開啟目錄標語功能 
xferlog_enable=YES               設定開啟日誌記錄功能
connect_from_port_20=YES         設定埠20進行資料連線
xferlog_std_format=YES           設定日誌使用標準的記錄格式 
listen=YES                       以獨立執行方式監聽服務 
pam_service_name=vsftpd          設定pam服務下的vsftpd驗證配置檔名,PAM驗證會根據/etc/pam.d/下的vsftpd檔案配置
userlist_enable=YES              啟用user_list列表檔案 
userlist_deny=NO                 允許user_list檔案中的使用者登入 
tcp_wrappers=YES                 設定支援TCPwrappers 

chroot_list_enable=YES           啟用chroot_list_file配置項指定的使用者列表檔案
chroot_list_file=/etc/vsftpd/chroot_list    限制使用者的家目錄的使用者配置檔案

下列為額外的配置,根據情況使用:

max_clients=20                   限制併發客戶連線數最多為20個 
max_per_ip=2                     限制來自同一ip的客戶連線數最多為2個 

local_max_rate=102400            限制本地使用者的最大傳輸速率 
pasv_enable=YES                  允許被動模式連線 

pasv_max_port=20000              用於被動連線最大埠號 
pasv_min_port=10000              用於被動連線最小埠號

使用下兩行,可以限制使用者無法切換或cd到其他目錄,只能在自己的主目錄中:

chroot_list_enable=YES           啟用chroot_list_file配置項指定的使用者列表檔案
chroot_list_file=/etc/vsftpd/chroot_list    限制使用者的家目錄的使用者配置檔案



【3】配置使用者


<1>將建立的本地使用者寫入白名單

echo "ftptest1" >> /etc/vsftpd/user_list

在這裡插入圖片描述



<2>將建立的本地使用者寫入限制使用者主目錄的名單

可以使使用者無法切換或cd到其他目錄,只能在自己的主目錄中

echo "ftptest1" >> /etc/vsftpd/chroot_list


<3>重啟服務

systemctl restart vsftpd

配置並重啟vsftpd服務後,即可通過該使用者訪問




【4】使用者主目錄許可權設定



從2.3.5版之後,當用戶被限定在了其主目錄下時,該使用者的主目錄不能再有寫許可權,否則會報錯



<1>修改使用者主目錄的許可權

chown -R ftptest1.ftptest1 /home/ftptest1
chmod a-w /home/ftptest1
mkdir /home/ftptest1/life


<2>或在vsftpd的主配置檔案中,新增下列

allow_writeable_chroot=YES



五、FTP的虛擬使用者登陸配置


虛擬使用者登陸是FTP中安全性最高的模式,但也是配置中最容易出現各種問題的。

虛擬使用者登陸,是指建立一個普通系統使用者,並建立家目錄,然後將虛擬的使用者對映到該普通使用者的家目錄中,然後再對各虛擬使用者進行許可權控制。

網上實際上有各種FTP的虛擬使用者登陸的配置,實際上8成都是正確的。但是每個人根據實際情況可能添加了不同的引數,得到的結果對於其是正確的。因此當採用某篇文章的配置時,請一定要按那篇文章的配置走,否則會導致結果出現各種異常。



【1】虛擬使用者的建立


<1>建立普通的使用者


建立一個不可登入的系統本地使用者,並指定家目錄
如果不指定家目錄,預設家目錄在/home下

本文是建立了名為vsftpd的使用者,這可能會導致一些誤會。請將vsftpd記為一個普通使用者

-d為指定家目錄


useradd vsftpd -s /sbin/nologin
chown -R vsftpd:vsftpd /home/vsftpd


<2>建立虛擬使用者賬號檔案


第一行為使用者,第二行為密碼,不可有空格

賬號檔名稱可為其他名稱,並且其內容可寫入多個賬號及密碼


vim /etc/vsftpd/vuser.list

在這裡插入圖片描述



<3>生成虛擬使用者資料檔案


使用db_load命令,用hash演算法生成vuser.list虛擬使用者的資料庫檔案

每次對虛擬使用者的修改操作後,都需要再次執行,使其生成新的資料檔案

並且為了安全,將生成的檔案賦權,並刪除或移動舊檔案到其他位置


db_load -T -t hash -f   /etc/vsftpd/vuser.list   /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
rm -rf /etc/vsftpd/vuser.list


<4>設定PAM驗證檔案


本系統為64位的,新增最下面的兩行即可

auth:對使用者的使用者名稱口令進行驗證
accout:對使用者的帳戶許可權和限制進行驗證
/lib/security/pam_userdb.so :呼叫pam_userdb.so這個庫函式
db:該虛擬使用者資料檔案(預設省略db字尾)

本文是將名為vsftpd的pam驗證檔案修改,也可直接建立一個新的pam驗證檔案


cat /etc/pam.d/vsftpd

auth       required     /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account    required     /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser


【2】虛擬使用者配置檔案


虛擬使用者的配置檔名必須和虛擬使用者名稱一致(因為在登入ftp時輸入相應的使用者名稱後,會根據名稱去載入相應的配置檔案)


mkdir /etc/vsftpd/vconf

下面為基礎的單個虛擬使用者訪問的配置檔案(如需更多配置可直接新增):
vim /etc/vsftpd/vconf/apple

local_root=/home/vsftpd/vuse-apple       指定該虛擬使用者主庫的路徑
write_enable=YES                         允許寫的操作
local_umask=022                          上傳檔案的許可權掩碼
anon_world_readable_only=NO              關閉只可讀
anon_upload_enable=YES                   允許上傳
anon_mkdir_write_enable=YES              允許新建目錄
anon_other_write_enable=YES              允許修改目錄/檔名稱,刪除

下列為額外的配置,根據情況使用:

 idle_session_timeout=300                 設定空閒連結超時時間
 data_connection_timeout=1000             設定單次傳輸最大時間
 max_clients=0                            設定併發客戶端的訪問數量
 max_per_ip=0                             設定客戶端的最大執行緒數
 local_max_rate=0                         設定使用者的最大傳輸速率,單位b/s


【3】vsftpd主配置檔案配置


下面為基礎的虛擬使用者訪問的主配置檔案(如需更多配置可直接新增):
grep -v "^#" /etc/vsftpd/vsftpd.conf 


anonymous_enable=NO              不允許匿名使用者登入 
local_enable=YES                 允許本地使用者登入 
write_enable=YES                 開放寫許可權 
local_umask=022                  設定本地使用者上傳建立資料夾時的許可權掩碼 
dirmessage_enable=YES            設定開啟目錄標語功能 
xferlog_enable=YES               設定開啟日誌記錄功能
connect_from_port_20=YES         設定埠20進行資料連線
xferlog_std_format=YES           設定日誌使用標準的記錄格式 
listen=YES                       以獨立執行方式監聽服務 
pam_service_name=vsftpd          設定pam服務下的vsftpd驗證配置檔名,PAM驗證會根據/etc/pam.d/下的vsftpd檔案配置
userlist_enable=YES              啟用user_list列表檔案 
userlist_deny=NO                 允許user_list檔案中的使用者登入 
tcp_wrappers=YES                 設定支援TCPwrappers 
chroot_list_enable=YES           啟用chroot_list_file配置項指定的使用者列表檔案
chroot_list_file=/etc/vsftpd/chroot_list    限制使用者的家目錄的使用者配置檔案
anon_umask=022                   虛擬使用者的umask值設定
allow_writeable_chroot=YES       

guest_enable=YES                 開啟虛擬賬戶功能
guest_username=vsftpd            指定虛擬賬號對映到本地哪個使用者
user_config_dir=/etc/vsftpd/vconf   指定虛擬使用者的單個配置檔案位置,下方的檔名必須和虛擬使用者名稱相同


【4】虛擬使用者主目錄建立及賦權


這是一個重點。如果目錄許可權配置不當,易導致虛擬使用者許可權出現各種異常。


<1>對映的使用者的主目錄的賦權

chown vsftpd:vsftpd /home/vsftpd
chmod 755 /home/vsftpd


<2>建立虛擬使用者的主目錄並賦權

mkdir -p /home/vsftpd/vuse-apple
chown -R vsftpd /home/vsftpd/vuse-apple
chmod 755 /home/vsftpd/vuse-apple

設定完成後,重啟vsftpd服務,即可通過客戶端訪問




六、FTP客戶端訪問


【1】訪問


任何處於同一區域網或可聯通FTP服務端的使用者都可訪問

通過web端訪問時,要在位址列輸入 ftp://ftp伺服器IP,登陸該ftp伺服器,檢視或下載檔案(無需提供使用者名稱和密碼)

通過FTP客戶端訪問時,要先安裝ftp客戶端


訪問格式:
ftp ftp伺服器IP

命令:
ftp 123.123.123.123

當為匿名模式時,預設使用者和密碼都為ftp,預設無上傳許可權

當為另外兩種模式時,需要輸入設定好的使用者名稱和密碼

在這裡插入圖片描述