FTP或文件传输协议是计算机之间传输文件的常用协议;一个充当客户端,另一个充当服务器。在这篇文章中,我们将讨论 Linux 系统中的 FTP 服务器,特别是 Very Secure FTP Daemon (vsftpd)。
vsftpd 程序是当今许多服务器使用的非常流行的 FTP 服务器。
FTP 服务器如何工作?
FTP服务器采用客户端-服务器架构来通信和传输文件。
FTP 是一种有状态协议,这意味着客户端和服务器之间的连接在 FTP 会话期间保持打开状态。
要从 FTP 服务器发送或接收文件,可以使用 FTP 命令;这些命令是连续执行的。就像一个队列,一个接一个。
您可以启动两种类型的 FTP 连接:
当您建立 FTP 连接时,TCP 端口 21 将打开以发送您的登录凭据;这个连接称为控制连接.
当您传输文件时,数据连接 starts.
数据连接有两种类型:
活动连接由远程服务器发起,客户端等待服务器请求。
客户端向远程服务器发起被动连接,服务器等待请求。
当 FTP 客户端开始传输时,FTP 客户端上有一个选项可以控制您要使用主动还是被动 FTP 连接。
主动模式
客户端从随机临时源端口连接到FTP控制端口21.
您可以使用以下命令检查临时端口范围:
$ cat /proc/sys/net/ipv4/ip_local_port_range
当需要传输文件时,远程FTP服务器会打开20端口来连接FTP客户端。
主动模式连接通常会出现防火墙、TCP 问题端口 20 和 21应该在你的防火墙上打开。
由于主动模式防火墙存在这些问题,我们可以使用被动模式。
如果您使用 iptables 防火墙,我建议您查看Linux iptables 防火墙了解如何允许特定端口。
被动模式
被动模式下,客户端从随机端口发起到目的端口的控制连接 21在远程服务器上。
如果FTP客户端请求文件,它将发出PASV FTP命令。服务器将打开一个随机端口并将该端口号提供给客户端。
这就是为什么 FTP 是一个需要大量连接的协议,因为每次建立数据连接(例如传输文件)时,服务器都会执行上述过程,并且这是由连接到服务器的所有客户端完成的。
在被动模式下,控制和数据连接由FTP客户端启动。
vsftpd FTP服务器功能
有多种 FTP 服务器可供您使用,包括商业的和开源的。
Vsftpd 具有一些安全功能,使其位居榜首,例如:
- 可以以普通用户身份运行,并进行权限分离。
- 支持 SSL/TLS FTP 连接。
- 可以将用户囚禁到他们的主目录中。
FTP 服务器设置
一些 Linux 发行版附带了 vsftpd,无论如何,如果你想在基于 Red Hat 的系统上安装它,你可以使用以下命令:
$ sudo dnf -y vsftpd
在基于 Debian 的发行版(例如 Ubuntu)上,您可以像这样安装它:
$ sudo apt-get install vsftpd
安装该软件包后,您可以运行该服务并使其在启动时运行。
$ systemctl start vsftpd
$ systemctl enable vsftpd
vsftpd FTP服务器的配置文件是
/etc/vsftpd.conf
.
实际上,Linux 中的 FTP 服务器是您可以使用的最简单的服务器之一。
访问FTP服务器有两种方式:
-
匿名 FTP 访问:任何人都可以使用匿名用户名登录,无需密码。
-
本地用户登录:允许 /etc/passwd 上的所有有效用户访问 FTP 服务器。
您可以通过配置允许匿名访问 FTP 服务器,在/etc/vsftpd/vsftpd.conf通过启用匿名_启用=是如果未启用并重新加载您的服务。
现在您可以尝试使用任何 FTP 客户端连接到 FTP 服务器。我将使用简单的 FTP 命令。
如果您的系统上没有它,您可以安装它:
$ dnf -y install ftp
现在您可以像这样访问您的 FTP 服务器:
$ ftp localhost
然后输入匿名用户名,无需密码,只需按 Enter 键即可。
您将看到 FTP 提示。
ftp>
现在,您可以键入任何 FTP 命令来与 FTP 服务器交互。
以本地用户身份连接
由于设置中有一个允许本地用户访问FTP服务器的选项,本地启用=是,现在我们尝试使用本地用户访问FTP服务器:
$ ftp localhost
然后输入您的本地用户名和该用户的密码,您将看到登录成功消息。
将 FTP 服务器设置为仅匿名
如果您的文件无需任何密码或登录即可供用户使用,则这种 FTP 服务器非常有用。
您需要将 vsftpd 配置为仅允许匿名用户。
Open /etc/vsftpd/vsftpd.conf文件,并将以下选项更改为相应的值。
listen=NO
listen_ipv6=NO
anonymous_enable=YES
local_enable=NO
write_enable=NO
然后我们需要创建一个非特权系统帐户以使用它进行匿名 FTP 类型的访问。
$ useradd -c " FTP User" -d /var/ftp -r -s /sbin/nologin ftp
该用户在系统上没有任何权限,因此在访问 FTP 服务器时使用它会更安全。
修改配置文件后不要忘记重新启动 FTP 服务器。
您可以从浏览器访问 FTP 服务器,只需输入 ftp://youdomain/。
FTP服务器安全
我们可以将 vsftpd 配置为使用 TLS,这样通过网络传输的文件会更安全一些。
首先,我们使用 openssl 命令生成证书请求:
$ openssl genrsa -des3 -out FTP.key
然后我们生成一个证书请求:
$ openssl req -new -key FTP.key -out certificate.csr
现在我们从密钥文件中删除密码:
$ cp FTP.key FTP.key.orig
$ openssl rsa -in FTP.key.orig -out ftp.key
最后,我们生成我们的证书:
$ 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
现在,我们需要做的就是配置 vsftpd 以支持安全连接。
Open / 等/vsftpd/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
重新启动您的服务以反映这些更改。就是这样。
尝试从任何系统(如 Windows)上的任何客户端连接到 FTP 服务器,并选择安全连接或 FTPS,您将成功看到您的文件夹。
SFTP 与 FTPS
在上一个示例中,我们看到了 SSL 层上的 FTP (FTPS),并且我们已成功连接到 FTP 服务器。然而,由于 FTPS 使用多个端口号,因此在严格安全的防火墙下,很难管理这种连接。
在这种情况下,最好的解决方案是使用 SFTP(基于 SSH 的 FTP)。SFTP仅使用端口 22。
FTP 服务器将使用此端口进行 FTP 会话期间的所有连接。
如果您使用防火墙,则应选择 SFTP,因为它只需要一个端口。
监禁 FTP 用户
您可以通过将 FTP 用户监禁在其主目录中并仅允许特定用户访问该服务来保护 FTP 服务器的安全。
打开 /etc/vsftpd/vsftpd.conf 并取消注释以下选项:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
文件/etc/vsftpd.chroot_list包含每行一个被监禁用户的列表。
保存文件并重新启动您的服务。
$ systemctl restart vsftpd
Linux FTP 服务器命令
您可以使用任何 GUI 客户端上传和下载文件,但您还需要了解一些 FTP 服务器命令。
第一个命令是 pwd 命令,您可以使用它来打印当前工作目录:
ftp> pwd
您可以使用 ls 命令列出文件:
ftp> ls
此外,您还可以使用 cd 命令更改工作目录:
ftp> cd /
如果您想退出 FTP 会话,请使用 bye 命令:
ftp> bye
我们使用 lcd 命令显示本地文件夹,而不是 FTP 文件夹:
ftp> lcd
您可以使用 lcd 命令更改本地目录:
ftp> lcd /home
您可以使用 get 命令下载文件:
ftp> get myfile
此外,您还可以使用 mget 命令下载多个文件:
ftp> mget file1 file2
使用delete命令从服务器删除文件:
ftp> delete filename
使用 put 命令将文件上传到服务器:
ftp> put filename
要上传多个文件,请使用 mput 命令:
ftp> mput file1 file2
您可以使用 mkdir 命令创建目录:
ftp> mkdir dirName
或者您可以使用 rmdir 命令从服务器删除目录。
ftp> rmdir dirName
使用FTP服务器进行文件传输有两种模式:ASCII 模式, and 二进制模式,您可以像这样更改模式:
ftp> binary
ftp> ascii
FTP 服务器是 Linux 中最容易配置和使用的服务器之一。
我希望您觉得这篇文章有用且有趣。继续回来。
谢谢。