如何在CentOS 7上使用VSFTPD設置FTP服務器

FTP(文件傳輸協議)是一種標準的客戶端-服務器網絡協議,允許用戶在遠程網絡之間傳輸文件。

有幾種可用於Linux的開源FTP服務器。 最流行和廣泛使用的是PureFTPd,ProFTPD和vsftpd。

在本教程中,我們將在CentOS 7上安裝vsftpd(非常安全的Ftp守護程序)。這是一個穩定,安全和快速的FTP服務器。 我們還將向您展示如何配置vsftpd以將用戶限制在其主目錄中,並使用SSL / TLS加密整個傳輸。

為了更安全,更快地傳輸數據,請使用SCP或SFTP。

先決條件

在繼續本教程之前,請確保您以具有sudo特權的用戶身份登錄。

在CentOS 7上安裝vsftpd

vsftpd軟件包在默認的CentOS存儲庫中可用。 要安裝它,請發出以下命令:

sudo yum install vsftpd

安裝軟件包後,啟動vsftpd守護程序,並使其在啟動時自動啟動:

sudo systemctl start vsftpdsudo systemctl enable vsftpd

您可以通過打印狀態來驗證vsftpd服務是否正在運行:

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 Thu 2018-11-22 09:42:37 UTC; 6s ago
 Main PID: 29612 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

配置vsftpd

配置vsftpd服務涉及編輯 /etc/vsftpd/vsftpd.conf 配置文件。 大多數設置在配置文件中都有詳細記錄。 有關所有可用選項的信息,請訪問官方的vsftpd頁面。

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

首先打開vsftpd配置文件:

sudo nano /etc/vsftpd/vsftpd.conf

1. FTP訪問號

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

/etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES

2.啟用上傳#

取消注釋 write_enable 設置以允許更改文件系統,例如上載和刪除文件。

/etc/vsftpd/vsftpd.conf

write_enable=YES

3. Chroot監獄#

通過取消注釋,防止FTP用戶訪問其主目錄之外的任何文件。 chroot 指示。

/etc/vsftpd/vsftpd.conf

chroot_local_user=YES

默認情況下,啟用chroot時,如果用戶鎖定的目錄是可寫的,則vsftpd將拒絕上傳文件。 這是為了防止安全漏洞。

啟用chroot時,請使用以下方法之一允許上傳。

  • 方法1 -推薦的允許上載的方法是保持chroot啟用並配置FTP目錄。 在本教程中,我們將創建一個 ftp 用戶主目錄中的目錄,將用作chroot和可寫目錄 uploads 用於上傳文件的目錄。

    /etc/vsftpd/vsftpd.conf

    user_sub_token=$USER
    local_root=/home/$USER/ftp
  • 方法2 -另一個選項是在vsftpd配置文件中添加以下指令。 如果必須將用戶的可寫訪問權限授予其主目錄,請使用此選項。

    /etc/vsftpd/vsftpd.conf

    allow_writeable_chroot=YES

4.被動FTP連接#

vsftpd可以使用任何端口進行被動FTP連接。 我們將指定端口的最小和最大範圍,然後在防火牆中打開該範圍。

將以下行添加到配置文件:

/etc/vsftpd/vsftpd.conf

pasv_min_port=30000
pasv_max_port=31000

5.限制用戶登錄號

要僅允許某些用戶登錄FTP服務器,請在 userlist_enable=YES 線:

/etc/vsftpd/vsftpd.conf

userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

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

6.使用SSL / TLS保護傳輸#

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

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

如果您有一個指向FTP服務器IP地址的域或子域,則可以輕鬆生成一個免費的“讓我們加密SSL”證書。

在本教程中,我們將使用生成自簽名SSL證書。 openssl 命令。

以下命令將創建一個有效期為10年的2048位私鑰和自簽名證書。 私鑰和證書都將保存在同一文件中:

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_filersa_private_key_file 指令,將其值更改為 pam 文件路徑並設置 ssl_enable 指令 YES

/etc/vsftpd/vsftpd.conf

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

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

重新啟動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通信。

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

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

通過輸入以下命令重新加載防火牆規則:

firewall-cmd --reload

創建一個FTP用戶#

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

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

    sudo adduser newftpuser

    接下來,您需要設置用戶密碼:

    sudo passwd 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訪問權限的其他用戶的外殼程序。

結論#

在本教程中,您學習了如何在CentOS 7系統上安裝和配置安全快速的FTP服務器。

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

FTP中心

Sidebar