如何设置 Linux FTP 服务器以进行快速文件传输

FTP 或文件传输协议是用于从远程服务器发送和接收文件的标准协议。它比 scp
等命令行选项更易于使用,尤其是使用 FileZilla 等 GUI 界面时。
什么是 FTP?
在过去的互联网时代,公共 FTP 服务器是一种非常普遍的方式,可以让大量的人可以访问文件。今天,FTP 仍然存在,并广泛用于管理任务。
虽然大多数主要操作系统都附带了某种形式的 FTP CLI,但像 FileZilla 这样的 GUI 客户端使得在服务器之间移动文件的过程就像从本地存储拖放到远程存储上一样简单,反之亦然。所有底层流量都使用 FTP 处理。

设置它需要您在要访问的远程计算机上安装和配置 FTP 服务器,例如 vsftpd
。
应该注意的是,通过 FTP 登录的用户将可以像您一样访问您的系统。您可以采取一些措施来减轻这些风险,例如将访问权限列入白名单并将用户锁定到他们的主目录。
安装 vsftpd
首先,从您的发行版包管理器安装 vsftpd
。对于像 Ubuntu 这样的基于 Debian 的系统,这将来自 apt
:
sudo apt-get install vsftpd
接下来,您必须启动该服务并将其设置为在启动时运行:
systemctl start vsftpd
systemctl enable vsftpd
FTP 有两种主要的身份验证方法:
- 匿名 FTP,任何人都可以在没有密码的情况下登录。这用于公共文件共享,默认情况下处于禁用状态。
- 本地用户登录,允许
/etc/passwd
中的任何用户使用用户名和密码访问 FTP。
您可能希望启用本地用户登录,并禁用匿名访问。使用您的用户帐户登录 FTP 将使您可以访问您的帐户可以访问的任何内容。
在您喜欢的文本编辑器中打开 /etc/vsftpd.conf
,并将以下行更改为 YES
:
local_enable=YES
如果您希望能够上传文件,请将 write_enable
也更改为 YES
:
write_enable=YES
重新启动 vsftpd
(systemctl restart vsftpd
),您现在应该可以使用 FileZilla 等客户端或个人计算机上的 CLI 登录 FTP。
如果只想为特定用户启用 FTP,则可以将访问列入白名单。打开 /etc/vsftpd.userlist
,并在单独的行中添加您要启用的每个帐户的名称。
nano /etc/vsftpd.userlist
然后,将以下行添加到 /etc/vsftpd.conf
:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
这将只允许访问用户列表文件中定义的用户,并拒绝所有其他用户。
如果你不希望用户访问他们主目录之外的文件,你可以将他们放在一个 chroot 监狱中,这将阻止他们与任何上层目录进行交互。您可以通过取消注释 /etc/vsftpd.conf
中的以下行来启用此功能:
chroot_local_user=YES
使用 systemctl restart vsftpd
重新启动 vsftpd
以应用更改。
设置 FTPS
标准 FTP 流量像 HTTP 一样未加密发送。这显然不太好,因此您应该配置 vsftpd
以使用 TLS 加密流量。
为此,生成一个新密钥并使用 openssl
签署请求:
openssl genrsa -des3 -out FTP.key
openssl req -new -key FTP.key -out certificate.csr
vsftpd
需要从此密钥中删除密码,因此复制密钥并将其传回给 openssl
:
cp FTP.key FTP.key.orig
openssl rsa -in FTP.key.orig -out ftp.key
最后,使用此密钥生成 TLS 证书:
openssl x509 -req -days 365 -in certificate.csr -signkey ftp.key -out mycertificate.crt
将密钥和证书复制到 /etc/pki/tls/certs/
:
cp ftp.key /etc/pki/tls/certs/
cp mycertificate.crt /etc/pki/tls/certs
现在所有证书都已设置,您可以再次打开 /etc/vsftpd.conf
,并添加以下行:
ssl_enable=YES
allow_anon_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/pki/tls/certs/mycertificate.crt
rsa_private_key_file=/etc/pki/tls/certs/ftp.key
ssl_ciphers=HIGH
require_ssl_reuse=NO
使用 systemctl restart vsftpd
重新启动 vsftpd
以应用更改。