天天看點

如何在 CentOS 8 上使用 Vsftpd 配置 FTP 伺服器

如何在 CentOS 8 上使用 Vsftpd 配置 FTP 伺服器

本文最先釋出在:

https://www.itcoder.tech/posts/how-to-setup-ftp-server-with-vsftpd-on-centos-8/

FTP (檔案傳輸協定) 是一個用戶端-服務端 網絡協定,它允許使用者在本地用戶端和遠端伺服器之間傳輸檔案。

在 Linux 上有很多開源的 FTP 伺服器可用。最流行并且最常被使用的伺服器包括

PureFTPd

,

ProFTPD

, and

vsftpd

.

在這篇指南中,我們将會在 CentOS 8 上安裝 vsftpd (Very Secure Ftp Daemon)。它是一個穩定的,安全的,并且快速的 FTP 伺服器。我們将會向你展示如何配置 vsftpd 來限制使用者通路他們的主目錄,并且使用 SSL/TLS 來加密資料傳輸。

一、 在 CentOS 8 上安裝 vsftpd

vsftpd 軟體包在預設的 CentOS 源倉庫中可用。想要安裝它,以 root 或者其他有 sudo 權限的使用者身份運作下面的指令:

sudo dnf install vsftpd           

一旦軟體包被安裝,啟動 vsftpd 守護程式,并且啟用開機自動啟動:

sudo systemctl enable vsftpd --now           

驗證伺服器狀态:

sudo systemctl status vsftpd           

輸出将會像下面這樣,顯示 vsftpd 服務已經激活并且運作:

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s ago
  Process: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
  ...           

二、 配置 vsftpd

vsftpd 設定被存儲在

/etc/vsftpd/vsftpd.conf

配置檔案中。 檔案中的大部分設定都在文檔中有詳細說明。想要檢視所有的選項,浏覽

vsftpd 官方網站頁面

在下面的章節中,我們将會一起看看一些配置vsftpd安全性相關的重要的設定。

打開 vsftpd 配置檔案:

sudo nano /etc/vsftpd/vsftpd.conf           

2.1 FTP Access

我們僅僅允許本地使用者可以通路 FTP 伺服器,找到

anonymous_enable

local_enable

指令,并且確定你的配置像下面這樣:

anonymous_enable=NO
local_enable=YES           

2.2 允許上傳

取消

write_enable

的注釋,允許對檔案系統的修改,例如 上傳或者删除檔案。

write_enable=YES           

2.3 Chroot Jail

通過取消

chroot

指令的注釋,阻止 FTP 使用者 通路任何他們主目錄外的檔案。

chroot_local_user=YES           

預設情況下,當chroot啟用時,如果使用者不允許寫入一個檔案夾,那麼 vsftpd 會拒絕使用者上傳檔案到該目錄。 這是為了防止出現安全問題。

chroot

被啟用時,使用下面的任何一種方法來允許上傳。

  • 方法一 - 這是通過啟用chroot并且配置FTP目錄來允許上傳的一種推薦方式。在這個指南中,我們将會在使用者主目錄建立一個

    ftp

    目錄,這個目錄将會充當 chroot 并且一個可寫的

    uploads

    目錄用于上傳檔案。
user_sub_token=$USER
local_root=/home/$USER/ftp           
  • 方法二 - 另一個選項就是在 vsftpd 配置檔案中添加下面的指令。 使用這個選項,你必須授權你的使用者對他的主目錄寫權限。
allow_writeable_chroot=YES           

2.4 FTP 被動模式

vsftpd 可以使用 FTP 被動模式連接配接的任何端口。 我們将會指令一個最小端口和最大端口,稍後還要在防火牆中打開這個端口範圍。

在配置檔案中添加下面的行:

pasv_min_port=30000
pasv_max_port=31000           

2.5 限制使用者登入

想要允許指定使用者登入 FTP 伺服器,在

userlist_enable=YES

一行下面添加下面的配置:

userlist_file=/etc/vsftpd/user_list
userlist_deny=NO           

當這個選項啟用時,你需要通過将使用者名添加到

/etc/vsftpd/user_list

(一個使用者一行)來明确指定哪些使用者可以登入。

2.6 使用 SSL/TLS 加密傳輸

為了使用 SSL/TLS 加密 FTP 傳輸, 你需要一個 SSL 證書,并且配置 FTP 伺服器使用它。

你可以使用一個由可信證書授權商頒發的SSL 證書或者建立一個 自建證書。

如果你由一個域名或者一個子域名指向 FTP 伺服器的公網 IP 位址,你可以很容易生成一個免費的Let’s Encrypt SSL證書。

在這個指南中,我們将會使用

openssl

生成一個自簽名的 SSL 證書。

下面的指令将會建立一個2048位的私鑰 和 10年有效期的自簽名證書。私鑰和證書都被儲存在同一個檔案:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem           

一旦 SSL 證書被建立,打開 vsftpd 配置檔案:

sudo nano /etc/vsftpd/vsftpd.conf           

找到

rsa_cert_file

rsa_private_key_file

指令,修改它們的值到

pam

檔案路徑 并且設定

ssl_enable

指令到

YES

:

rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES           

如果沒有指定其他的,那麼 FTP 伺服器将會僅僅使用 TLS 來進行安全連接配接。

2.7 重新開機 vsftpd 服務

一旦你完成編輯,vsftpd配置檔案

/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
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES           

儲存檔案并且重新開機 vsftpd 服務 使修改生效:

sudo systemctl restart vsftpd           

三、 打開防火牆

如果你正在運作 FTP 伺服器,你需要允許 FTP 流量通過防火牆。

打開

21

端口(FTP 指令端口),

20

端口(FTP 資料端口) 和

30000-31000

(被動模式端口範圍),在你的防火牆中,輸入下面的指令:

sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp           

輸入下面的指令,重新加載防火牆規則:

firewall-cmd --reload           

四、建立一個 FTP 使用者

想要測試 FTP 伺服器,你需要建立一個新使用者。

  • 如果你已經擁有一個使用者,你僅僅需要讓他可以通路 FTP 通路,跳過第一步。
  • 如果你在配置中設定

    allow_writeable_chroot=YES

    ,跳過第三部。

01.建立一個新使用者,名稱為

newftpuser

sudo adduser newftpuser           

下一步,你需要設定使用者密碼:

sudo passwd newftpuser           

02.添加使用者到允許的 FTP 使用者清單:

echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list           

03.建立 FTP 目錄樹,并且設定正确的權限:

sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp           

正如前面所讨論的,使用者将會被允許上傳他們的檔案到

ftp/upload

目錄。

此時,你的 FTP 伺服器完全可用,并且你可以使用任何可以配置 TLS 加密的 FTP用戶端,例如

FileZilla

來連接配接你的 FTP 伺服器。

五、禁用 Shell 通路

預設情況下,當建立一個使用者時,如果沒有明顯的指定,這個使用者将可以通過 SSH 通路到伺服器。

想要禁用 shell 通路,我們将會建立一個新的 shell,它将會簡單列印一個資訊,告訴使用者,他們僅僅被允許通路 FTP。

運作下面的指令來建立

/bin/ftponly

shell 并且使它可執行:

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
sudo chmod a+x /bin/ftponly           

将這個新的 shell 附加到

/etc/shells

檔案中:

echo "/bin/ftponly" | sudo tee -a /etc/shells           

修改這個使用者 shell 到

/bin/ftponly

sudo usermod newftpuser -s /bin/ftponly           

使用同樣的指令來修改其他使用者的 shell,限制他們僅僅隻能通過 FTP 通路。

六、 總結

我們已經向你展示了如何在 CentOS 8 上安裝和配置一個安全并且快速的 FTP 伺服器。

想要更安全,更快速的資料傳輸,你應該使用

SCP

或者

SFTP

繼續閱讀