在Linux上设置FTP服务器
FTP 代表“文件传输协议”,是在客户端和服务器之间传输文件的有用方法。根据授予用户的权限,他们可以遍历服务器上的目录,将文件下载到本地计算机,也可以将文件从计算机上传到服务器。通常,服务器仅允许有帐户的用户通过 FTP 登录来保证服务器的安全,但也可以配置匿名授权,允许任何人连接到服务器来下载和/或上传文件。
如果您需要允许用户访问托管文件或授予他们将本地文件放到服务器上的能力,那么运行 FTP 服务器是一个不错的选择。这是因为 FTP 得到广泛支持(尤其是在 Linux 系统上)、使用简单并且在用户权限方面易于配置。
在本教程中,我们将介绍在 Linux 系统上设置 FTP 服务器的分步说明。我们还将了解如何通过各种设置来配置 FTP 服务器,然后如何使用命令行、GNOME GUI 或 FTP 客户端软件连接到 FTP 服务器。
警告 - FTP 未加密
FTP 在某些情况下就足够了,但对于通过互联网的连接,建议使用 SFTP。这是因为通过 Internet 连接使用 FTP 并不安全,因为您的凭据和数据的传输没有加密。 SFTP 中的“S”代表“安全”,通过 SSH 传输 FTP 协议,提供建立安全连接所需的加密。要了解有关 SFTP 的更多信息,请参阅有关如何使用 SFTP 安全传输文件的教程。
在本教程中您将学习:
如何在主要 Linux 发行版上安装和配置 vsftpd
如何允许 FTP 流量通过系统防火墙
如何设置 FTP 用户帐户
如何通过命令行连接FTP服务器
如何通过 GUI 连接到 FTP 服务器
如何配置匿名FTP登录
如何更改默认FTP监听端口
如何在 Linux 上安装 vsftpd
vsftpd(非常安全的 FTP 守护进程)是 Linux 上最好和最流行的 FTP 服务器之一。其他也存在,但我们建议使用 vsftpd。您可以使用下面适当的命令通过系统的包管理器安装 vsftpd。
要在 Ubuntu、Debian 和 Linux Mint 上安装 vsftpd:
$ sudo apt install vsftpd
要在 Fedora、CentOS、AlmaLinux 和 Red Hat 上安装 vsftpd:
$ sudo dnf install vsftpd
要在 Arch Linux 和 Manjaro 上安装 vsftpd:
$ sudo pacman -S vsftpd
配置 vsftpd 服务器
安装后,我们将进行基本配置以启动并运行 FTP 服务器:
最好的做法是保留原始配置文件的备份副本,以防以后出现问题。让我们重命名默认配置文件:
$ sudo mv /etc/vsftpd.conf /etc/vsftpd.conf_orig
使用 nano 或您喜欢的任何文本编辑器创建新的 vsftpd 配置文件:
$ sudo nano /etc/vsftpd.conf
将以下基本配置复制到您的文件中。此配置足以满足基本的 FTP 服务器的要求,并且在验证其正常工作后可以根据环境的特定需求进行调整:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 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/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO pasv_enable=Yes pasv_min_port=10000 pasv_max_port=10100 allow_writeable_chroot=YES
将以上行粘贴到新创建的 /etc/vsftpd.conf 文件中,然后保存更改并关闭该文件。
您的 Linux 防火墙当前可能配置为阻止与 FTP 的连接,但针对您的发行版执行以下适当的命令将创建例外以允许流量:
在 Ubuntu 和使用 ufw(简单防火墙)的系统上:
$ sudo ufw allow from any to any port 20,21 proto tcp
在基于 RHEL 的发行版或任何其他使用 firewalld 的发行版上:
$ sudo firewall-cmd --zone=public --permanent --add-service=ftp
或者,如果您只使用 iptables 而没有防火墙前端:
$ sudo iptables -A INPUT -m state --state NEW,ESTABLISHED -m tcp -p tcp --dport 20,21 -j ACCEPT
保存配置文件并更新防火墙规则后,重新启动 vsftpd 以应用新更改:
$ sudo systemctl restart vsftpd
创建FTP用户
我们的 FTP 服务器已准备好接收传入连接,因此现在是时候创建一个新的用户帐户,我们将用它来连接到 FTP 服务。
使用第一个命令创建一个名为 ftpuser 的新帐户,使用第二个命令为该帐户设置密码:
$ sudo useradd -m ftpuser $ sudo passwd ftpuser New password: Retype new password: passwd: password updated successfully
为了验证一切是否正常工作,您应该在 ftpuser 的主目录中至少存储一个文件。当我们在接下来的步骤中登录 FTP 时,该文件应该可见。
$ sudo bash -c "echo FTP TESTING > /home/ftpuser/FTP-TEST"
通过命令行连接到 FTP 服务器
您现在应该能够通过 IP 地址或主机名连接到 FTP 服务器。要从命令行连接并验证一切正常,请打开终端并使用 ftp 命令连接到您的环回地址 (127.0.0.1)。
$ ftp 127.0.0.1
正如您在上面的屏幕截图中看到的,我们可以通过指定之前配置的用户名和密码来登录 FTP 服务器。接下来,让我们尝试发出
ls
命令,该命令应列出我们在前面的步骤中创建的测试文件。ftp> ls
您的输出应如上面的屏幕截图所示,表明登录成功,并且 ls 命令显示了我们之前创建的测试文件。
通过 GUI 连接到 FTP 服务器
大多数桌面环境都有内置的方式来连接 FTP 服务器。即使您的没有,也有很多适用于 Linux 的免费 FTP 客户端。在下面的说明中,我们将使用 Ubuntu 上的 GNOME 桌面环境连接到 FTP 服务器。如果您正在运行其他 GUI,请在文件管理器中查找连接到外部服务器的选项 - 从那里,说明应与以下内容大致相同:
在文件管理器中,单击“其他位置”(如果不使用 GNOME,可能会被称为不同的名称),然后在底部的“连接到服务器”框中输入
ftp://127.0.0.1
窗口并单击连接。选择“注册用户”,然后输入我们之前设置的 FTP 帐户凭据,然后单击“连接”。
连接成功后,您将看到之前创建的测试文件。您现在可以下载并查看此文件,或将您自己的内容上传到该目录。
允许在 vsftpd 中匿名访问
到目前为止,我们已经了解了如何创建可以访问 FTP 服务器的新用户。如果您希望其他人无需提供用户名和密码即可访问您的 FTP 服务器,您可以配置匿名身份验证。请按照以下步骤进行设置。
首先,我们需要编辑
/etc/vsftpd.conf
文件,因此使用 nano 或任何其他文本编辑器打开它。$ sudo nano /etc/vsftpd.conf
接下来,查找
anonymous_enable=NO
行,并将设置更改为YES
。anonymous_enable=YES
完成后,退出此文件并保存新更改,然后重新启动 vsftpd 服务以使更改生效。
$ sudo systemctl restart vsftpd
要测试匿名登录,请发出
ftp 127.0.0.1
命令,使用anonymous
作为您的用户名,并使用空白密码。您应该会收到230 Login success
消息,如下面的屏幕截图所示。
更改默认 FTP 端口号
默认情况下,FTP 协议侦听端口 21 以进行用户身份验证,并侦听端口 20 以进行数据传输。但是,我们可以通过对 /etc/vsftpd.conf
文件进行少量编辑来更改此行为。在文件底部,使用 listen_port
指令指定 vsftpd 使用的不同端口。例如,添加以下行将指示 vsftpd 侦听端口 2121:
listen_port=2121
结束语
在本教程中,我们了解了如何通过 vsftpd 在 Linux 系统上设置 FTP 服务器。我们还学习了如何使用命令行或 GUI 作为 FTP 客户端连接到服务器。运行 FTP 服务器时,本地网络上的计算机可以通过命令行或首选 FTP 客户端访问您的系统来存储和检索文件。