如何在Ubuntu 20.04上使用VSFTPD設置FTP服務器

本文介紹如何在Ubuntu 20.04上安裝和配置FTP服務器,該FTP服務器用於在設備之間共享文件。

FTP(文件傳輸協議)是用於在遠程網絡之間傳輸文件的標準網絡協議。 有幾種可用於Linux的開源FTP服務器。 最著名和廣泛使用的是PureFTPd,ProFTPD和vsftpd。 我們將安裝vsftpd(非常安全的Ftp守護程序),這是一個穩定,安全且快速的FTP服務器。 我們還將向您展示如何配置服務器以將用戶限制在其主目錄中,並使用SSL / TLS加密整個傳輸。

儘管FTP是一種非常流行的協議,但是為了獲得更安全,更快速的數據傳輸,您應該使用SCP或SFTP。

在Ubuntu 20.04上安裝vsftpd

vsftpd軟件包可在Ubuntu存儲庫中找到。 要安裝它,請執行以下命令:

sudo apt updatesudo apt install vsftpd

安裝過程完成後,ftp服務將自動啟動。 要進行驗證,請打印服務狀態:

sudo systemctl status vsftpd

輸出應顯示vsftpd服務處於活動狀態並正在運行:

● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-03-02 15:17:22 UTC; 3s ago
...

配置vsftpd

vsftpd服務器配置存儲在 /etc/vsftpd.conf 文件。

文件中充分記錄了大多數服務器設置。 有關所有可用選項,請訪問vsftpd文檔頁面。

在以下各節中,我們將介紹配置安全的vsftpd安裝所需的一些重要設置。

首先打開vsftpd配置文件:

sudo nano /etc/vsftpd.conf

1. FTP訪問

我們只允許本地用戶訪問FTP服務器。 搜索 anonymous_enablelocal_enable 指令並驗證您的配置是否與以下行匹配:

/etc/vsftpd.conf

anonymous_enable=NO
local_enable=YES

2.啟用上傳#

找到並取消注釋 write_enable 指令以允許文件系統更改,例如上載和刪除文件:

/etc/vsftpd.conf

write_enable=YES

3. Chroot監獄#

為了防止本地FTP用戶訪問其主目錄之外的文件,請取消注釋開頭為lne的文件。 chroot_local_user

/etc/vsftpd.conf

chroot_local_user=YES

默認情況下,出於安全原因,啟用chroot時,如果用戶鎖定的目錄是可寫的,則vsftpd將拒絕上傳文件。

啟用chroot時,請使用以下解決方案之一允許上傳:

  • 方法1 -建議的選項是保持chroot功能啟用並配置FTP目錄。 在此示例中,我們將創建一個 ftp 用戶主目錄中的目錄,它將用作chroot和可寫目錄 uploads 用於上傳文件的目錄:

    /etc/vsftpd.conf

    user_sub_token=$USER
    local_root=/home/$USER/ftp
  • 方法2 -另一個選項是啟用 allow_writeable_chroot 指示:

    /etc/vsftpd.conf

    allow_writeable_chroot=YES

    僅當必須向用戶授予對其主目錄的可寫訪問權限時,才使用此選項。

4.被動FTP連接#

默認情況下,vsftpd使用活動模式。 要使用被動模式,請設置端口的最小和最大範圍:

/etc/vsftpd.conf

pasv_min_port=30000
pasv_max_port=31000

您可以使用任何端口進行被動FTP連接。 啟用被動模式後,FTP客戶端會在您選擇的範圍內的隨機端口上打開到服務器的連接。

5.限制用戶登錄號

您可以將vsftpd配置為僅允許某些用戶登錄。為此,請在文件末尾添加以下幾行:

/etc/vsftpd.conf

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

啟用此選項後,您需要通過將用戶名添加到來顯式指定哪些用戶可以登錄。 /etc/vsftpd.user_list 文件(每行一個用戶)。

6.使用SSL / TLS保護傳輸安全

要使用SSL / TLS加密FTP傳輸,您需要具有SSL證書並配置FTP服務器以使用它。

您可以使用由受信任的證書頒發機構簽名的現有SSL證書,也可以創建自簽名證書。

如果您有一個指向FTP服務器IP地址的域或子域,則可以快速生成一個免費的Let’s Encrypt SSL證書。

我們將生成一個2048位私鑰和自簽名SSL證書,有效期為十年:

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

私鑰和證書都將保存在同一文件中。

創建SSL證書後,打開vsftpd配置文件:

sudo nano /etc/vsftpd.conf

找出 rsa_cert_filersa_private_key_file 指令,將其值更改為 pam 文件路徑並設置 ssl_enable 指令 YES

/etc/vsftpd.conf

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

如果未另外指定,則FTP服務器將僅使用TLS建立安全連接。

重新啟動vsftpd服務#

完成編輯後,vsftpd配置文件(不包括注釋)應如下所示:

/etc/vsftpd.conf

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

保存文件並重新啟動vsftpd服務,以使更改生效:

sudo systemctl restart vsftpd

打開防火牆#

如果您正在運行UFW防火牆,則需要允許FTP通信。

打開端口 21 (FTP命令端口),端口 20 (FTP數據端口),以及 30000-31000 (被動端口範圍),運行以下命令:

sudo ufw allow 20:21/tcpsudo ufw allow 30000:31000/tcp

為避免被鎖定,請確保端口 22 開了:

sudo ufw allow OpenSSH

通過禁用和重新啟用UFW重新加載UFW規則:

sudo ufw disablesudo ufw enable

要驗證更改運行:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
20:21/tcp                  ALLOW       Anywhere
30000:31000/tcp            ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
20:21/tcp (v6)             ALLOW       Anywhere (v6)
30000:31000/tcp (v6)       ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

創建FTP用戶#

為了測試FTP服務器,我們將創建一個新用戶。

  • 如果您要授予FTP訪問權限的用戶已經存在,請跳過第一步。
  • 如果您設定 allow_writeable_chroot=YES 在您的配置文件中,跳過第3步。
  1. 創建一個新用戶,名為 newftpuser

    sudo adduser newftpuser
  2. 將用戶添加到允許的FTP用戶列表中:

    echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
  3. 創建FTP目錄樹並設置正確的權限:

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

    如上一節所述,用戶將能夠將其文件上傳到 ftp/upload 目錄。

至此,您的FTP服務器已經可以正常使用了。 您應該能夠使用可以配置為使用TLS加密的任何FTP客戶端(例如FileZilla)連接到服務器。

禁用Shell訪問#

默認情況下,在創建用戶時,如果未明確指定,則該用戶將具有對服務器的SSH訪問權限。 要禁用外殼程序訪問,請創建一個新的外殼程序,該外殼程序將顯示一條消息,告知用戶其帳戶僅限於FTP訪問。

運行以下命令以創建 /bin/ftponly 文件並使其可執行:

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

將新的外殼程序附加到該外殼程序中的有效外殼程序列表中 /etc/shells 文件:

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

將用戶外殼更改為 /bin/ftponly

sudo usermod newftpuser -s /bin/ftponly

您可以使用同一命令來更改只希望授予FTP訪問權限的所有用戶的外殼。

結論 #

我們已經向您展示了如何在Ubuntu 20.04系統上安裝和配置安全快速的FTP服務器。

如果您有任何問題或反饋,請隨時發表評論。

FTP的Ubuntu的

Sidebar