vsftpd FTP服务器功能

有多种 FTP 服务器可供我们使用,包括商业和开源。

Vsftpd 具有一些安全功能,使其位于顶部,例如:

  • 可以作为具有权限分离的普通用户运行。
  • 支持 SSL/TLS FTP 连接。
  • 可以将用户监禁到他们的主目录中。

仅将 FTP 服务器设置为匿名

如果文件可供没有任何密码或者登录名的用户使用,这种 FTP 服务器非常有用。

我们需要将 vsftpd 配置为仅允许匿名用户。

打开 /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 附带的一些 Linux 发行版,无论如何,如果我们想将其安装在基于 Red Hat 的系统上,我们可以使用以下命令:

$ sudo dnf -y vsftpd

在像 Ubuntu 这样的基于 Debian 的发行版上,你可以像这样安装它:

$ sudo apt-get install vsftpd

安装包后,我们可以运行该服务并使其在启动时运行。

$ systemctl start vsftpd
$ systemctl enable vsftpd

vsftpd FTP服务器的配置文件是

/etc/vsftpd.conf

.

实际上,Linux 中的 FTP 服务器是我们可以使用的最简单的服务器之一。

有两种方式访问 FTP 服务器:

  • 匿名 FTP 访问:任何人都可以使用匿名用户名登录,无需密码。
  • 本地用户登录:允许 /etc/passwd 上的所有有效用户访问 FTP 服务器。

我们可以通过在 /etc/vsftpd/vsftpd.conf 中的配置允许匿名访问 FTP 服务器,如果它未启用并重新加载服务,请启用 anonymous_enable=YES。

现在我们可以尝试使用任何 FTP 客户端连接到 FTP 服务器。
我将使用简单的 FTP 命令。

如果它不在系统上,我们可以安装它:

$ dnf -y install ftp

现在我们可以像这样访问 FTP 服务器:

$ ftp localhost

然后输入用户名匿名且没有密码,只需按回车键。

我们将看到 FTP 提示。

ftp>

现在,我们可以键入任何 FTP 命令来与 FTP 服务器进行交互。

以本地用户身份连接

由于设置中有允许本地用户访问 FTP 服务器的选项是 local_enable=YES ,现在让我们尝试使用本地用户访问 FTP 服务器:

$ ftp localhost

然后键入本地用户名和该用户的密码,我们将看到登录成功消息。

在 Linux 中安装、配置和保护 FTP 服务器

FTP或者文件传输协议是计算机之间传输文件的常用协议;一个充当客户端,另一个充当服务器。

vsftpd 程序是当今许多服务器都使用的非常流行的 FTP 服务器。

SFTP 与 FTPS

在上一个示例中,我们看到了 SSL 层上的 FTP (FTPS),并且我们已成功连接到 FTP 服务器。
但是,由于 FTPS 使用多个端口号,因此使用严密保护的防火墙很难管理这种连接。

在这种情况下,最好的解决方案是使用 SFTP(基于 SSH 的 FTP)。
SFTP 仅使用端口 22.

FTP 服务器将在 FTP 会话期间将此端口用于所有连接。

如果我们使用防火墙,我们应该选择 SFTP,因为它只需要一个端口。

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模式和二进制模式,你可以像这样改变模式:

ftp> binary
ftp> ascii

监禁 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

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 以支持安全连接。

打开 /etc/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,我们将成功看到文件夹。

FTP 服务器是如何工作的?

FTP 服务器与客户端-服务器架构一起进行通信和传输文件。

FTP 是一种有状态协议,这意味着客户端和服务器之间的连接在 FTP 会话期间保持打开状态。

要从 FTP 服务器发送或者接收文件,可以使用 FTP 命令;这些命令是连续执行的。
它就像一个队列,一个一个。

我们可以发起两种类型的 FTP 连接:

  • 控制连接也称为命令连接。
  • 数据连接。

当我们建立 FTP 连接时,TCP 端口 21 将打开以发送登录凭据;这种连接称为控制连接。

传输文件时,数据连接开始。

有两种类型的数据连接:

  • 被动模式。
  • 主动模式。

主动连接由远程服务器发起,客户端等待服务器请求。

客户端发起到远程服务器的被动连接,服务器等待请求。

当 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 客户端启动。

日期:2020-07-15 11:16:49 来源:oir作者:oir