FTP 是 "文件传输协议 "的缩写,是在客户端和服务器之间传输文件的一种有效方式。在某些情况下,FTP 就足够了,但对于通过互联网的连接,建议使用 SFTP。
在本教程中,我们将逐步介绍如何在 Linux 系统上建立一个 FTP 服务器。我们还将看到如何通过各种设置来配置 FTP 服务器,然后如何使用命令行、GNOME GUI 或 FTP 客户端软件来连接到 FTP 服务器。
目录 | 要求 |
系统 | 任意 linux 发行版 |
软件 | vsftpd |
其它 | 以 root 身份或通过 sudo 命令对你的 Linux 系统进行特权访问。 |
说明 | #- 要求给定的 Linux 命令以 root 权限执行,可以直接以 root 用户身份或使用 sudo 命令。 $ - 要求给定的 Linux 命令以普通非特权用户的身份执行。 |
一、如何在 Linux 上安装 vsftpd
vsftpd(非常安全传输的 FTP) 是 Linux 下最好和最流行的 FTP 服务器之一。其他的也存在,但 vsftpd 是我们推荐使用的。你可以使用下面适当的命令,用你系统的软件包管理器安装 vsftpd。

要在 Ubuntu、Debian、Linux Mint、UOS、deep 上安装 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 文件中加入上述几行,然后保存修改并关闭该文件。
(4) 你的 Linux 防火墙目前可能被配置为阻止对 FTP 的连接,但为你的发行版执行以下适当的命令将创建一个例外以允许流量。在 Ubuntu 和使用 ufw(uncomplicated firewall) 的系统上。
$ 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
(5) 在保存了配置文件并更新了防火墙规则之后,重新启动 vsftpd 以生效。
$ sudo systemctl restart vsftpd
三、建立一个 FTP 账户
FTP 服务器已配置好了,所以现在是时候创建一个新的用户账户,我们将用它来连接到 FTP 服务。
(1) 使用这第一条命令创建一个名为 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 服务器
(1) 现在你应该能够通过 IP 地址或主机名连接到你的 FTP 服务器。要从命令行连接并验证一切是否正常,请打开终端,使用 ftp 命令连接到你的回环地址 (127.0.0.1)。
$ ftp 127.0.0.1
(2) 正如你在上面的截图中看到的,我们能够通过指定我们先前配置的用户名和密码登录到 FTP 服务器。接下来,让我们试着发出 ls 命令,它应该会列出我们在前面步骤中创建的测试文件。
ftp> ls

如果你的输出应该像上面的截图一样,表明登录成功,并显示出我们先前创建的测试文件的 ls 命令。
五、通过图形化工具连接到 FTP 服务器
大多数桌面环境都有一个内置的方法来连接到 FTP 服务器。即使你的环境没有,也有很多免费的 FTP 客户端可供 Linux 使用。在下面的说明中,我们将使用 Ubuntu 上的 GNOME 桌面环境来连接到 FTP 服务器。如果你正在运行其他的 GUI,在你的文件管理器中寻找连接到外部服务器的选项--从那里,说明应该和下面一样。
(1) 在你的文件管理器中,点击 "其他位置"(如果不使用 GNOME,可能叫法不同),在窗口底部的 "连接到服务器 "框中输入 ftp://127.0.0.1,点击连接。

(2) 选择 "注册用户",然后输入我们之前设置的 FTP 账户的用户名和密码,点击连接。
(3) 连接成功后,你将看到你先前创建的测试文件。你现在可以下载并查看这个文件,或将你自己的内容上传到该目录。
六、允许匿名访问 vsftpd
到目前为止,我们已经看到如何创建可以访问 FTP 服务器的新用户。如果你希望其他人能够访问你的 FTP 服务器而不需要给出用户名和密码,你可以配置匿名认证。按照下面的步骤来设置它。
$ sudo nano /etc/vsftpd.conf
接下来,寻找 anonymous_enable=NO 行,并将设置改为 YES。接下来,寻找 anonymous_enable=NO 行,并将设置改为 YES。
anonymous_enable=YES
完成后,在保存新的修改时退出这个文件,然后重新启动 vsftpd 服务以使修改生效。
$ sudo systemctl restart vsftpd
要测试匿名登录,发出 ftp 127.0.0.1 命令,使用 anonymous 作为你的用户名,并使用一个空白密码。你应该收到一个 230 登录成功的消息,如下面的截图所示。

七、改变默认的 FTP 端口号
默认情况下,FTP 协议对用户认证采用 21 端口监听,对数据传输采用 20 端口监听。然而,我们可以通过对 /etc/vsftpd.conf 文件进行小小的编辑来改变这一行为。在文件的底部,使用 listen_port 指令为 vsftpd 指定一个不同的端口来使用。例如,添加以下一行将指示 vsftpd 监听 2121 端口。
listen_port=2121
在本教程中,我们看到如何通过 vsftpd 在 Linux 系统上建立一个 FTP 服务器。我们还学习了如何使用命令行或 GUI 作为 FTP 客户端来连接到服务器。当运行一个 FTP 服务器时,本地网络上的计算机可以通过命令行或他们喜欢的 FTP 客户端访问你的系统以存储和检索文件。