如何在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 update
sudo 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_enable
和 local_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_file
和 rsa_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/tcp
sudo ufw allow 30000:31000/tcp
為避免被鎖定,請確保端口 22
開了:
sudo ufw allow OpenSSH
通過禁用和重新啟用UFW重新加載UFW規則:
sudo ufw disable
sudo 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步。
創建一個新用戶,名為
newftpuser
:sudo adduser newftpuser
將用戶添加到允許的FTP用戶列表中:
echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
創建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)連接到服務器。
禁用Shell訪問#
默認情況下,在創建用戶時,如果未明確指定,則該用戶將具有對服務器的SSH訪問權限。 要禁用外殼程序訪問,請創建一個新的外殼程序,該外殼程序將顯示一條消息,告知用戶其帳戶僅限於FTP訪問。
運行以下命令以創建 /bin/ftponly
文件並使其可執行:
echo -e '#!/bin/shnecho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo 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的