FTP(File Transfer Protocol)是一種提供對服務器上的文件的訪問協議。它是最早允許用户通過互聯網下載文件的協議之一。通過 FTP 協議,用户可以輕鬆地在服務器上下載和上傳文件。
Vsftpd(Very Secure FTP daemon)是一種安全的 FTP 守護進程,是 FTP 協議的升級。它通過加密傳遞數據,保證文件安全傳輸,不受黑客的攻擊。
在本篇文章中,我們將焦點放在 CentOS 8 / RHEL 8 上的 vsftpd 上。
1) 安裝 vsftpd
運行 dnf 命令,安裝vsftpd
$ sudo dnf install vsftpd
按 y 並按 ENTER 開始安裝,下面的輸出確認 vsftpd 已經成功安裝。
查看 vsftpd 版本
[linuxtechi@centos8-vsftpd ~]$ rpm -q vsftpd
vsftpd-3.0.3-31.el8.x86_64
[linuxtechi@centos8-vsftpd ~]$
輸出結果應與終端上打印的版本一致。要獲取 vsftpd 的更詳細信息,可以在末尾添加 -i 標誌,如下所示
$ rpm -qi vsftpd
啓動 vsftpd 服務
$ sudo systemctl start vsftpd
設置開機自啓動 vsftpd 服務
$ sudo systemctl enable vsftpd --now
查看 vsftpd 服務狀態
$ sudo systemctl status vsftpd
2) 創建 FTP 用户及其目錄
接下來,我們將創建一個用於訪問 FTP 服務器的用户,名稱可以酌情修改。
$ sudo adduser ftpuser
$ sudo passwd ftpuser
有了 FTP 用户之後,我們將繼續創建 FTP 目錄,並分配以下權限和目錄所有權。
$ sudo mkdir -p /home/ftpuser/ftp_dir
$ sudo chmod -R 750 /home/ftpuser/ftp_dir
$ sudo chown -R ftpuser: /home/ftpuser/ftp_dir
我們還需要將 FTP 用户添加到 /etc/vsftpd/user_list 文件中,以允許用户訪問 VSFTP 服務器。
$ sudo bash -c 'echo ftpuser >> /etc/vsftpd/user_list'
3) 配置 vsftpd
vsftpd 的默認配置文件是 /etc/vsftpd/vsftpd.conf ,該文件充滿了各種指令,可幫助加強您的 FTP 服務器的安全性。
允許本地用户遠程訪問 FTP 服務器,並阻止匿名用户,請設置如下行
anonymous_enable=NO
local_enable=YES
授予用户運行任何 FTP 命令的權限,並進行上傳、下載和刪除文件等更改,請設置如下行
write_enable=YES
出於安全考慮,您可以選擇限制用户訪問其主目錄以外的任何文件和目錄,請設置如下行
chroot_local_user=YES
授予用户對其各自主目錄的寫訪問權,請設置如下行
allow_writeable_chroot=YES
接下來,我們將自定義端口來啓用被動 FTP 連接。在本例中,我們將指定端口 30000 和 31000。稍後我們將在防火牆上打開這些。
pasv_min_port=30000
pasv_max_port=31000
接下來,我們將僅允許在 /etc/vsftpd/user_list 中定義的用户訪問服務器,請設置如下行
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
保存文件並重啓 vsftpd 服務
$ sudo systemctl restart vsftpd
通過運行 ftp 命令測試 FTP 連通性
$ ftp ip-address
輸入 ftp 用户名,然後提供密碼,您應該得到如下所示的輸出。
4) 配置 SSL / TLS 證書
為了加密服務器和客户端系統之間的通信,我們需要生成一個 TLS 證書,然後配置服務器使用它。
運行下面的命令,生成證書
$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
隨後會出現一系列提示,要求您提供一些詳細信息,例如國家名稱、州或省以及組織名稱。
返回到配置文件 /etc/vsftpd/vsftpd.conf,指定證書文件的路徑。
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd.pem
然後,指示服務器打開 SSL
ssl_enable=YES
保存文件,重啓 vsftpd 服務
$ sudo systemctl restart vsftpd
5) 防火牆中放行 FTP 端口
如果您正在運行防火牆,則需要允許以下端口
- 20 – to allow FTP traffic
- 21 – FTP data port
- 30000-31000 – To allow passive communication with the FTP server.
運行如下命令,放行端口
$ sudo firewall-cmd --permanent --add-port=20-21/tcp
$ sudo firewall-cmd --permanent --add-port=30000-31000/tcp
重新加載防火牆
$ sudo firewall-cmd --reload
6) 測試 FTP
所有設置完成後,是時候測試我們的連接了。在本例中,我們使用一個名為 FileZilla 的 FTP 客户端,它是客户端和服務器系統的免費 FTP 客户端,它支持普通 FTP 和 TLS 之上的 FTP。
啓動後,界面如下所示。提供主機的 IP 地址,FTP 用户名和密碼,然後點擊 Quickconnect 按鈕。
不久之後,彈出窗口將顯示 FTP 服務器的證書和會話詳細信息。要繼續連接,請單擊“Always trust this certificate in future session”,然後按 enter 鍵。
在右下窗格中,遠程服務器的主目錄如所示。現在你可以上傳、下載和編輯文件了。
我的開源項目
- course-tencent-cloud(酷瓜雲課堂 - gitee倉庫)
- course-tencent-cloud(酷瓜雲課堂 - github倉庫)