FTP,文件傳輸協議的首字母縮寫,用於在給定的計算機網絡中的計算機和服務器之間傳輸文件。 FTP 協議使用不安全的數據傳輸方式,應僅限於您信任的網絡。 相反,我們應該有 FTPS(帶 SSL 的文件傳輸協議),它在兩端之間使用 SSL 安全連接或使用 SFTP(SSH 文件傳輸協議/安全文件傳輸協議)。
本教程提供了有關如何在 Ubuntu 18.04 上使用 SSL/TLS 配置安全 vsftpd 服務器並使用終端和 GUI 工具連接到服務器的詳細步驟。
安裝 VSFTPD 服務器
Linux 上有多個 FTP 服務器可用。 我們要安裝 vsftp。 要在 Ubuntu 18.04 上執行此操作,我們在終端中鍵入以下命令:
sudo apt install vsftpd
安裝 vsftpd 後,它的默認配置文件位於 /etc/vsftpd.conf。 為了對該文件進行更改並測試自定義配置,我們首先創建該文件的備份。 為此,您可以運行:
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
然後我們使用以下命令創建 vsftpd.conf 文件:
sudo vim /etc/vsftpd.conf
並將以下幾行添加到文件中:vsftpsft
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
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
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
請注意,這些是最常用的配置,您可以根據需要自由更改它們。
Ubuntu 18.04 預裝並啟用了 ufw(簡單防火牆)。 您可以使用以下命令檢查 ufw 是否在您的機器上運行:
sudo service ufw status
如果它正在運行並且您打算讓它繼續運行,則必須允許進入 FTP 端口的流量(20,21 用於主動連接,10000-10100 用於被動連接)。 為此,您可以運行:
sudo ufw allow from any to any port 20,21,10000:11000 proto tcp
如果成功,輸出將如下所示:
Rules updated
Rules updated (v6)
完成所有這些步驟後,我們需要使用以下命令重新啟動 vsftpd 服務器:
sudo service vsftpd restart
創建用戶以連接到 FTP 服務器
一旦根據我們的需要安裝並配置了 vsftp 服務器,我們就不需要創建用戶(例如 ftpsuer)來連接到 ftp 服務器。 為此,您可以運行:
sudo useradd -m ftpuser
使用以下命令為新創建的用戶創建密碼:
sudo passwd ftpuser
系統將提示您輸入新的 UNIX 密碼並重新鍵入它以應用更改後。 成功的輸出如下所示:
passwd: password updated successfully
準備FTP用戶目錄
為保護 FTP 連接需要執行的最重要的操作之一是將用戶限制在其主目錄中,以便他們根本無法訪問其他目錄。 要在 vsftpd 中這樣做,我們需要在配置文件中啟用 chroot,我們已經在文章的配置部分(chroot_local_user=YES
)。 vsftpd 的目錄安全方式假設用戶沒有寫訪問權限。 但是,如果我們為現有用戶提供 FTP 訪問權限,並且他們使用 shell 來使用服務器,則他們可能需要對其主文件夾具有寫訪問權限。 為了避免缺乏安全性並為用戶提供適當的 FTP 訪問,我們在用戶的主目錄中創建了一個 ftp 文件夾,並在通過 FTP 連接時將其添加到 vsftpd 配置中作為本地根目錄。 我們還需要更改目錄的所有權並刪除寫訪問權限。 為此,您可以運行:
sudo mkdir /home/ftpuser/ftp
sudo chown nobody:nogroup /home/ftpuser/ftp
sudo chmod a-w /home/ftpuser/ftp
然後在 vsftpd 配置文件中添加/更改以下幾行 /etc/vsftpd.conf
user_sub_token=$USER
local_root=/home/$USER/ftp
完成這些步驟後,我們需要在其中創建另一個文件夾 /home/ftpuser/ftp
並將其所有權分配給用戶
sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser/home/ftpuser/ftp/files
為了測試在連接到 FTP 服務器後我們能夠查看用戶主目錄中的文件,我們將在該目錄中創建測試文件並在其中添加一些文本。 為此,您可以運行:
echo "test file for vsftpd" | sudo tee /home/ftpuser/ftp/files/test.txt
要允許或拒絕特定用戶訪問 vsftpd,我們可以使用 userlist 文件並在 vsftpd 配置文件中添加適當的記錄。 為此,您可以運行以下命令:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
如果 userlist_deny 設置為 NO,則只有添加到該文件的用戶才能訪問 FTP 服務器,如果設置為 YES,則該文件中列出的用戶將無法訪問 FTP 服務器,其他人可以訪問。 使用以下命令將用戶名添加到上述文件中:
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
為 VSFTPD 配置 SSL
由於通過 FTP 傳輸的數據(甚至憑據)未加密,我們可以啟用 TLS/SSL 為我們的 FTP 服務器提供另一個級別的安全性。 要使用 openssl 創建證書,請運行以下命令:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
其中 -days 365 用於添加一年的證書並為 -out、-keyout 標誌添加相同的值以在同一文件中定位私鑰和證書。 系統會提示您添加所有必要信息以創建證書,如下所示
Generating a 2048 bit RSA private key
.................+++
..............................................................................................+++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:SY
Locality Name (eg, city) []:Sydney
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ubuntu
Email Address []:[email protected]
創建證書後,我們需要將其添加到 vsftpd 配置文件並啟用 SSL。 為此,將以下行添加到上述文件中:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
在我們需要拒絕通過 SSL 的匿名連接並要求 SSL 進行數據傳輸和登錄之後。 為此,將以下行添加到 /etc/vsftpd.conf
文件:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
添加上述行後,我們將配置服務器以使用 TLS,它是 SSL 的首選後繼。 為此,請在同一文件中添加以下行:
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
完成所有步驟後,我們的 vsftpd 配置文件將如下所示:
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
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
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
在 vsftpd 的配置文件中進行任何更改後,我們需要通過以下命令重新啟動服務:
sudo service vsftpd restart
您還可以將 vsftpd 配置為對 sftp 使用 letencrypt 證書,但請確保您有一個要驗證的域。 您可以在 vsftpd 配置中添加路徑變量,其中 ssl cert 和 private 是密鑰存儲。
rsa_cert_file=/ssl/letsencrypt/ftpdomain.com/chain-bundle.pem
rsa_private_key_file=/ssl/letsencrypt/ftpdomain.com/private-key.pem
連接到FTP服務器
有兩種方法可以連接到 ftp 服務器:
- 使用終端
- 使用帶有 GUI 的 FTP 客戶端
使用終端連接
要通過命令行連接到 ftp 服務器,請在終端中鍵入以下命令:
ftp ubuntu
在哪裡 ubuntu
是安裝 ftp 服務器的機器的主機名。 確保可以通過您嘗試連接的機器的主機名訪問 ftp 服務器機器。
連接後,系統會提示您輸入用戶名和密碼以連接到 ftp 服務器:
Connected to ubuntu.
220 (vsFTPd 3.0.3)
Name (ubuntu:ubuntu): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
類型 ls
檢查之前創建的測試文件是否存在:
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1001 1001 4096 May 21 13:39 files
226 Directory send OK.
使用帶有 GUI 的 FTP 客戶端連接
我們將使用 Filezilla 連接到我們安裝在 Linux 上的 FTP 服務器。 為此,請在您的計算機上打開 Filezilla 客戶端並輸入 FTP 服務器 IP 地址、ftpuser 憑據以進行連接,然後按下連接按鈕,如下面的屏幕截圖所示。 系統會提示您將證書添加到受信任,之後您就可以連接到 FTP 服務器。
連接後我們可以看到 test.txt
我們之前創建的就在那裡。
相關閱讀:
- 如何在 Ubuntu 18.04 上設置 MySecureShell SFTP 服務器
- 在 Debian 9 Stretch 上安裝和設置 ProFTPD 的 5 個步驟
- 12 條管理文件的 lftp 命令示例
正如您從文章中了解到的,安裝 vsftpd 服務器並連接到它非常簡單,只需幾個步驟即可完成。 這裡的要點是通過它的配置文件來保護 ftp 服務器,例如將用戶 chroot 到其主目錄,禁用匿名登錄並添加本地 umask 和用戶讀寫權限。