Ftp(文件传输协议)是一种标准网络协议,用于在远程网络之间传输文件。

有许多可用于 Linux 的开源 FTP 服务器。最流行和使用最广泛的是PureFTPd 、ProFTPD 和vsftpd 。在本教程中,我们将安装 vsftpd(非常安全的 Ftp 守护程序)。它是一个稳定、安全、快速的 FTP 服务器。我们还将向您展示如何配置 vsftpd 以将用户限制在他们的主目录中并使用 SSL/TLS 加密整个传输。

尽管本教程是为 Ubuntu 18.04 编写的,但相同的说明适用于 Ubuntu 16.04 和任何基于 Debian 的发行版,包括 Debian、Linux Mint 和 Elementary OS。

要获得更安全和更快的数据传输,请使用SCP 或SFTP 。

1、先决条件

在继续本教程之前,请确保您以具有 sudo 权限的用户身份登录 。

2、在 Ubuntu 18.04 上安装 vsftpd

vsftpd 软件包在 Ubuntu 存储库中可用。要安装它,只需运行以下命令:

sudo apt update

sudo apt install vsftpd

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(1)

vsftpd 服务将在安装过程完成后自动启动。通过打印服务状态来验证它:

执行命令:sudo systemctl status vsftpd

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(2)

输出将如下所示,表明 vsftpd 服务处于活动状态并正在运行:

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(3)

3、配置 vsftpd

可以通过编辑/etc/vsftpd.conf文件来配置 vsftpd 服务器。大多数设置都在配置文件中详细记录。有关所有可用选项,请访问官方 vsftpd 页面。

在以下部分中,我们将介绍配置安全 vsftpd 安装所需的一些重要设置。

首先打开 vsftpd 配置文件:

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(4)

3.1 FTP访问

我们将只允许本地用户访问 FTP 服务器,找到anonymous_enable和local_enable指令并验证您的配置是否与以下行匹配:

anonymous_enable=NO

local_enable=YES

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(5)

3.2 启用上传

取消注释write_enable设置以允许更改文件系统,例如上传和删除文件。

write_enable=YES

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(6)

3.3 Chroot监狱

要防止 FTP 用户访问其主目录之外的任何文件,请取消注释该chroot设置。

chroot_local_user=YES

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(7)

默认情况下,为了防止安全漏洞,当启用 chroot 时,如果用户被锁定的目录是可写的,vsftpd 将拒绝上传文件。

启用 chroot 时,使用以下方法之一允许上传。

方法 1. - 允许上传的推荐方法是保持 chroot 启用,并配置 FTP 目录。在本教程中,我们将在用户主目录中创建一个ftp目录,该目录将用作 chroot 和一个uploads用于上传文件的可写目录。

user_sub_token=$USER

local_root=/home/$USER/FTP

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(8)

方法 2. - 另一种选择是在 vsftpd 配置文件中添加以下指令。如果您必须授予用户对其主目录的可写访问权限,请使用此选项。

allow_writeable_chroot=YES

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(9)

3.4 被动 FTP 连接

vsftpd 可以使用任何端口进行被动 FTP 连接。我们将指定端口的最小和最大范围,然后在我们的防火墙中打开该范围。

将以下行添加到配置文件中:

pasv_min_port=30000

pasv_max_port=31000

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(10)

3.5.限制用户登录

要仅允许某些用户登录 FTP 服务器,请在文件末尾添加以下行:

userlist_enable=YES

userlist_file=/etc/vsftpd.user_list

userlist_deny=NO

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(11)

启用此选项后,您需要通过将用户名添加到文件中来明确指定哪些用户能够登录/etc/vsftpd.user_list(每行一个用户)。

3.6 使用 SSL/TLS 保护传输

为了使用 SSL/TLS 加密 FTP 传输,您需要拥有 SSL 证书并配置 FTP 服务器以使用它。

您可以使用由受信任的证书颁发机构签名的现有 SSL 证书或创建自签名证书。

如果您有一个指向 FTP 服务器 IP 地址的域或子域,您可以轻松生成免费的 Let's Encrypt SSL 证书。

我们将使用该命令生成自签名 SSL 证书。openssl

以下命令将创建一个有效期为 10 年的 2048 位私钥和自签名证书。私钥和证书都将保存在同一个文件中:

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

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(12)

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(13)

创建 SSL 证书后,打开 vsftpd 配置文件:

sudo nano /etc/vsftpd.conf

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(14)

找到rsa_cert_fileandrsa_private_key_file指令,将它们的值更改为pam文件路径并将ssl_enable指令设置为YES:

rsa_cert_file=/etc/ssl/private/vsftpd.pem

rsa_private_key_file=/etc/ssl/private/vsftpd.pem

ssl_enable=YES

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(15)

如果没有另外指定,FTP 服务器将只使用 TLS 来建立安全连接。

4、重启 vsftpd 服务

完成编辑后,vsftpd 配置文件(不包括注释)应如下所示:

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

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(16)

保存文件并重新启动 vsftpd 服务以使更改生效:

执行命令:sudo systemctl restart vsftpd

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(17)

5、打开防火墙

如果您正在运行UFW 防火墙,则 需要允许 FTP 流量。

要打开端口21(FTP 命令端口)、端口20(FTP 数据端口)和30000-31000(被动端口范围),请运行以下命令:

sudo ufw allow 20:21/tcp

sudo ufw allow 30000:31000/tcp

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(18)

为避免被锁定,请打开端口22:

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(19)

通过禁用和重新启用 UFW 重新加载 UFW 规则:

sudo ufw disable

sudo ufw enable

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(20)

要验证更改运行:

sudo ufw status

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(21)

6、创建 FTP 用户

为了测试我们的 FTP 服务器,我们将创建一个新用户。

如果您已经有一个要授予 FTP 访问权限的用户,请跳过第一步。

如果您allow_writeable_chroot=YES在配置文件中设置,请跳过第 3 步。

6.1 创建一个名为的新用户newftpuser:

执行命令:sudo adduser newftpuser

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(22)

6.2 将用户添加到允许的 FTP 用户列表:

执行命令:echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(23)

6.3创建 FTP 目录树并设置正确的权限 :

执行命令1:sudo mkdir -p /home/newftpuser/ftp/upload

执行命令2:sudo chmod 550 /home/newftpuser/ftp

执行命令3:sudo chmod 750 /home/newftpuser/ftp/upload

执行命令4:sudo chown -R newftpuser: /home/newftpuser/ftp

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(24)

如上一节所述,用户将能够将其文件上传到ftp/upload目录。

此时,您的 FTP 服务器功能齐全,您应该能够使用任何可以配置为使用 TLS 加密的 FTP 客户端(例如FileZilla )连接到您的服务器 。

7、禁用外壳访问

默认情况下,创建用户时,如果未明确指定,用户将拥有对服务器的 SSH 访问权限。

要禁用 shell 访问,我们将创建一个新的 shell,它会简单地打印一条消息,告诉用户他们的帐户仅限于 FTP 访问。

创建/bin/ftponly外壳并使其可执行:

执行命令1:echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly

执行命令2:sudo chmod a x /bin/ftponly

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(25)

将新的 shell 附加到/etc/shells文件中的有效 shell 列表中:

执行命令:echo "/bin/ftponly" | sudo tee -a /etc/shells

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(26)

将用户外壳更改为/bin/ftponly:

执行命令:sudo usermod newftpuser -s /bin/ftponly

ubuntu怎么搭建ftp服务器(如何在Ubuntu18.04)(27)

使用相同的命令更改您只想授予 FTP 访问权限的所有用户的 shell。

8、结论

在本教程中,您学习了如何在 Ubuntu 18.04 系统上安装和配置安全快速的 FTP 服务器。

如果您有任何问题或反馈,请随时发表评论。

,