上一篇 下一篇 分享链接 返回 返回顶部

如何在Ubuntu上使用VSFTPD设置FTP服务器?

发布人:Minchunlin 发布时间:2021-03-05 11:19 阅读量:1798

本文介绍了如何在Ubuntu 20.04上安装和配置一个FTP服务器,用于在设备之间共享文件。

FTP(文件传输协议)是一个标准的网络协议,用于在远程网络之间传输文件。有几个开源的FTP服务器可用于Linux。最著名和使用最广泛的是PureFTPd,ProFTPD和vsftpd。我们将安装vsftpd(Very Secure Ftp Daemon),这是一个稳定、安全、快速的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服务器配置存储在 /etc/vsftpd.conf 文件中。

大部分的服务器设置都在这个文件中被记录下来。关于所有可用的选项,请访问 vsftpd 文档页面。

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

首先打开 vsftpd 配置文件。

sudo nano /etc/vsftpd.conf

1. FTP访问

我们将只允许本地用户访问FTP服务器。搜索anonymous_enable和local_enable指令,并验证你的配置是否符合下面的行。

2. 启用上传

找到并取消comment write_enable指令,以允许文件系统更改,如上传和删除文件。

3. Chroot jail

要防止本地FTP用户访问其主目录以外的文件,取消以chroot_local_user开头的lne。

默认情况下,出于安全考虑,当启用chroot时,如果用户被锁定的目录是可写的,vsftpd将拒绝上传文件。

使用下面的一种方法来允许在启用chroot时上传文件。

方法①. - 推荐的方案是保持启用chroot功能并配置FTP目录。在本例中,我们将在用户主页内创建一个ftp目录,作为chroot和一个可写的uploads目录,用于上传文件。

方法②. - 另一种方法是启用 allow_writeable_chroot 指令。

只有当你必须授予用户对其主目录的可写访问权时,才使用此选项。

4. 被动FTP连接

默认情况下,vsftpd 使用主动模式。要使用被动模式,请设置端口的最小和最大范围。

您可以使用任何端口进行被动FTP连接。启用被动模式后,FTP客户端会在您选择的范围内的随机端口上打开与服务器的连接。

5. 限制用户登录

你可以配置 vsftpd 只允许某些用户登录。要做到这一点,请在文件末尾添加以下几行。

启用该选项后,需要通过在/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。

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

重新启动vsftpd服务

一旦完成编辑,vsftpd 配置文件(不包括注释)应该是这样的。

保存文件并重启 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

创建FTP用户

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

如果你想授予FTP访问权的用户已经存在,请跳过第一步。

如果你在配置文件中设置了allow_writeable_chroot=YES,请跳过第三步。

①创建一个名为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访问服务器的权限。要禁用shell访问,创建一个新的shell,该shell将打印一条消息,告诉用户他们的帐户只限于FTP访问。

运行以下命令来创建/bin/ftponly文件并使其可执行。

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

sudo chmod a+x /bin/ftponly

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

echo "/bin/ftponly" | sudo tee -a /etc/shells

将用户Shell改为/bin/ftponly。

sudo usermod newftpuser -s /bin/ftponly

你可以使用同样的命令来改变你想只给FTP访问权的所有用户的shell。

我们已经向您展示了如何在Ubuntu 20.04系统上安装和配置一个安全和快速的FTP服务器。

目录结构
全文