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

本文介绍了如何在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服务器。