如何在 CentOS 7 上使用 VSFTPD 设置 FTP 服务器

2023-10-24

FTP(文件传输协议)是一种标准的客户端-服务器网络协议,允许用户在远程网络之间传输文件。

有多种可用于 Linux 的开源 FTP 服务器。最流行和最广泛使用的是PureFTPd , ProFTPD , and vsftpd .

在本教程中,我们将在 CentOS 7 上安装 vsftpd(非常安全的 Ftp 守护进程)。它是一个稳定、安全且快速的 FTP 服务器。我们还将向您展示如何配置 vsftpd 以限制用户只能访问其主目录并使用 SSL/TLS 加密整个传输。

为了更安全、更快速的数据传输,请使用SCP or SFTP .

先决条件#

在继续本教程之前,请确保您以以下身份登录具有 sudo 权限的用户 .

在 CentOS 7 上安装 vsftpd#

vsftpd 软件包可在默认 CentOS 存储库中找到。要安装它,请发出以下命令:

sudo yum install vsftpd

安装软件包后,启动 vsftpd 守护进程并使其在引导时自动启动:

sudo systemctl start vsftpdsudo systemctl enable vsftpd

您可以通过打印其状态来验证 vsftpd 服务是否正在运行:

sudo systemctl status vsftpd

输出如下所示,显示 vsftpd 服务处于活动状态并正在运行:

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
 Main PID: 29612 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

配置 vsftpd#

配置 vsftpd 服务涉及编辑/etc/vsftpd/vsftpd.conf配置文件。大多数设置都在配置文件中详细记录。对于所有可用选项,请访问官方vsftpd page.

在以下部分中,我们将介绍配置安全 vsftpd 安装所需的一些重要设置。

首先打开 vsftpd 配置文件:

sudo nano /etc/vsftpd/vsftpd.conf

1.FTP访问#

我们将只允许本地用户访问 FTP 服务器,找到anonymous_enable and local_enable指令并验证您的配置是否与以下行匹配:

/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES

2. 启用上传#

取消注释write_enable设置以允许更改文件系统,例如上传和删除文件。

/etc/vsftpd/vsftpd.conf
write_enable=YES

3.Chroot监狱#

通过取消注释来防止 FTP 用户访问其主目录之外的任何文件chroot指示。

/etc/vsftpd/vsftpd.conf
chroot_local_user=YES

默认情况下,启用 chroot 后,如果用户锁定的目录可写,vsftpd 将拒绝上传文件。这是为了防止安全漏洞。

使用以下方法之一允许在启用 chroot 时上传。

  • 方法一。- 允许上传的推荐方法是保持 chroot 启用并配置 FTP 目录。在本教程中,我们将创建一个ftp用户主目录中的目录将用作 chroot 和可写目录uploads上传文件的目录。

    /etc/vsftpd/vsftpd.conf
    user_sub_token=$USER
    local_root=/home/$USER/ftp
  • 方法2.- 另一种选择是在 vsftpd 配置文件中添加以下指令。如果您必须授予用户对其主目录的可写访问权限,请使用此选项。

    /etc/vsftpd/vsftpd.conf
    allow_writeable_chroot=YES

4. 被动 FTP 连接#

vsftpd 可以使用任何端口进行被动 FTP 连接。我们将指定端口的最小和最大范围,然后在防火墙中打开该范围。

将以下行添加到配置文件中:

/etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000

5. 限制用户登录#

要仅允许某些用户登录 FTP 服务器,请在userlist_enable=YES line:

/etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

启用此选项后,您需要通过将用户名添加到/etc/vsftpd/user_list文件(每行一个用户)。

6. 使用 SSL/TLS 保护传输#

为了使用 SSL/TLS 加密 FTP 传输,您需要拥有 SSL 证书并配置 FTP 服务器以使用它。

您可以使用由受信任的证书颁发机构签名的现有 SSL 证书或创建自签名证书。

如果您有一个指向 FTP 服务器 IP 地址的域或子域,您可以轻松生成免费的让我们加密SSL 证书。

在本教程中,我们将生成一个自签名 SSL 证书使用openssl命令。

以下命令将创建一个 2048 位私钥和有效期为 10 年的自签名证书。私钥和证书将保存在同一个文件中:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

创建 SSL 证书后,打开 vsftpd 配置文件:

sudo nano /etc/vsftpd/vsftpd.conf

找出rsa_cert_file and rsa_private_key_file指令,将其值更改为pam文件路径并设置ssl_enable指示YES:

/etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

如果没有另外指定,FTP 服务器将仅使用 TLS 来建立安全连接。

重新启动 vsftpd 服务#

完成编辑后,vsftpd 配置文件(不包括注释)应如下所示:

/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

保存文件并重新启动 vsftpd 服务以使更改生效:

sudo systemctl restart vsftpd

打开防火墙#

如果您正在运行firewall您需要允许 FTP 流量。

打开端口21(FTP命令端口)、端口20(FTP 数据端口)和30000-31000(被动端口范围),发出以下命令:

sudo firewall-cmd --permanent --add-port=20-21/tcpsudo firewall-cmd --permanent --add-port=30000-31000/tcp

通过键入以下内容重新加载防火墙规则:

firewall-cmd --reload

创建FTP用户#

为了测试我们的 FTP 服务器,我们将创建一个新用户。

  • 如果您已经有一个想要授予 FTP 访问权限的用户,请跳过第一步。
  • 如果你设置allow_writeable_chroot=YES在您的配置文件中跳过第三步。
  1. 创建一个名为newftpuser:

    sudo adduser newftpuser

    接下来,您需要设置用户密码 :

    sudo passwd newftpuser
  2. 将用户添加到允许的 FTP 用户列表中:

    echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
  3. 创建FTP目录树并设置正确的权限 :

    sudo mkdir -p /home/newftpuser/ftp/uploadsudo chmod 550 /home/newftpuser/ftpsudo chmod 750 /home/newftpuser/ftp/uploadsudo chown -R newftpuser: /home/newftpuser/ftp

    正如上一节所讨论的,用户将能够将其文件上传到ftp/upload目录。

此时,您的 FTP 服务器已完全正常工作,您应该能够使用任何可配置为使用 TLS 加密的 FTP 客户端连接到您的服务器,例如文件齐拉 .

禁用 Shell 访问#

默认情况下,创建用户时,如果未明确指定,该用户将具有对服务器的 SSH 访问权限。

为了禁用 shell 访问,我们将创建一个新的 shell,它将简单地打印一条消息,告诉用户他们的帐户仅限于 FTP 访问。

运行以下命令来创建/bin/ftponlyshell 并使其可执行:

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponlysudo chmod a+x /bin/ftponly

将新 shell 添加到有效 shell 列表中/etc/shells file:

echo "/bin/ftponly" | sudo tee -a /etc/shells

将用户 shell 更改为/bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

使用相同的命令为您只想授予 FTP 访问权限的其他用户更改 shell。

结论#

在本教程中,您学习了如何在 CentOS 7 系统上安装和配置安全快速的 FTP 服务器。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 CentOS 7 上使用 VSFTPD 设置 FTP 服务器 的相关文章

  • CentOS 的 init.d celery 脚本?

    我正在编写一个使用 celery 的 Django 应用程序 到目前为止 我一直在 Ubuntu 上运行 但我正在尝试部署到 CentOS Celery 为基于 Debian 的发行版提供了一个很好的 init d 脚本 但它不适用于基于
  • 如何通过FTP将多个多级(不同层次)文件从本地版本覆盖到在线版本

    我只是在本地更改了几个不同目录中的许多文件 然后将更改推送到 Subversion 但这不会更改实时版本 只会更改存储库 现在我必须通过 FTP 更新这些文件 但它们都是不同的层次结构级别 我怎么做 我知道的唯一方法是采用我的整个本地版本并
  • 使用 PHP 生成 Windows .lnk 文件

    我正在开发一个项目 其中涉及运行 ProFTPd 的 FTP 服务器和为用户创建帐户的 PHP MySQL 后端 创建帐户后 系统会向用户发送电子邮件 其中包含其帐户详细信息以及下载 FileZilla 或 Cyber Duck 的说明 具
  • Powershell 以块的形式读取文件

    我有一个用 Powershell 编写的脚本 它通过 FTP 传输文件 使用以下命令可以正常工作 content System IO File ReadAllBytes backup app data 但是 一旦文件大小达到 2Gb 此方法
  • C# FileSystemWatcher 和 FTP

    我通过文件系统观察器监视在 ftp 上删除的文件 然后移动到另一个目录 现在我触发文件系统观察程序的创建事件的复制 但显然在 ftp 的情况下 创建只是一个存根文件 数据会进入并在上传时填充文件直至完成 任何人对此都有一个优雅的解决方案 或
  • 使用PHP通过FTP递归扫描目录和子目录

    我正在尝试创建目录中所有文件 及其大小 的列表 包括子目录中的所有内容 这些文件位于远程服务器上 所以我的脚本通过 FTP 连接 然后使用以下命令运行递归函数ftp chdir浏览每个目录 如果有其他方法可以做到这一点 我愿意接受建议 fl
  • 如何从 Visual Studio Online 在 FTP 上部署工件?

    我已经在 Visual Studio Online 上设置了自动构建 并且能够在构建下获取工件 现在我想在 FTP 上部署工件 由于我的网站托管在 GoDaddy 上 并且他们为我提供了 FTP 帐户 任何人都可以帮我设置此帐户吗 这可以通
  • php ftp 检查文件夹是否存在总是返回创建文件夹错误

    有人可以告诉我这段代码中做错了什么吗 if id if is dir public html tem pasta path pics id echo pasta j existia destination file public html
  • 仅在 Azure Web 应用程序中从 FTP 下载文件失败

    我有一个非常基本的代码 可以从 FTP 服务器下载文本文件列表 foreach var fileUri in files try var ftpRequest FtpWebRequest FtpWebRequest Create fileU
  • PCRE 库版本太旧

    Bug Genie 3 需要 PCRE 库 8 0 或更高版本 你有 版本 7 8 2008 09 05 将您的系统更新到最新版本 你常用的来源 在我查看问题并尝试通过以下步骤更新我的 PCRE 库后 wget the latest sou
  • EC2 增加大小后无法调整卷大小

    我已按照调整 EC2 卷大小的步骤进行操作 停止实例 拍摄当前卷的快照 在同一区域中从上一个快照创建了一个更大大小的新卷 从实例中分离旧卷 将新卷附加到同一安装点的实例 旧卷是 5GB 我创建的卷是 100GB 现在 当我重新启动实例并运行
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • 通过 FTP over TLS/SSL 连接到未经认证的主机

    我从中获取文件的供应商正在从 FTP 更改为基于 SSL 的 FTP 我正在尝试更新我的代码net ftp to net ftptls 我需要连接的新主机未经认证 我的脚本报告此错误 主机名与服务器证书不匹配 供应商不会修复此问题 看着 u
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • PHP + FTP删除文件夹中的文件

    我刚刚编写了一个 PHP 脚本 它应该连接到 FTP 并删除特殊文件夹中的所有文件 它看起来像这样 但我不知道需要什么命令来删除文件夹日志中的所有文件 任何想法
  • proc_open() 失败并显示“权限被拒绝”

    我正在尝试使用proc open 执行程序并打印结果 但是 我不断收到 许可被拒绝 的消息 已将脚本和可执行文件的 chmod 设置为 0777 但无济于事 ini get safe mode 是假的 可能出什么问题了 我正在使用 Cent
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • 套接字错误 10054

    我有一个C S程序 客户端使用socket向服务器发送文件 发送后大约超过700k数据 客户端 在win7上 将收到套接字10054错误 这意味着连接被对等方重置 服务器运行在CentOS 5 4上 客户端是在virtual box中运行的
  • Monkeyrunner/jython 中未找到 JDBC 驱动程序错误

    我需要在中插入一些东西DB 我在用着JDBC as a connector jython the script mysql数据库和脚本正在运行CentOS 我的代码看起来像这样 from com android monkeyrunner i

随机推荐

  • 如何在 PHP 中读取 XML 文件 (SimpleXML)

    SimpleXML 是 PHP 5 中引入的 PHP 扩展 它允许用户在 PHP 中轻松处理 XML 数据 SimpleXML 将任何 XML 数据转换为可以使用普通属性选择器和数组迭代器轻松处理的对象 您必须已安装php simplexm
  • 如何在 Ubuntu 22.04 上安装 MariaDB

    MariaDB是一个流行的开源关系数据库系统 由MySQL服务器的原始开发人员开发 它最初是从 MySQL 服务器分叉出来的 并进行了多项增强 本教程将指导您在 Ubuntu 22 04 Linux 系统上安装 MariaDB 服务器 1
  • 如何使用 JavaScript 替换字符串中的所有点 (.)

    JavaScript 提供了多种操作字符串的方法 当涉及到替换字符串中的字符时 String prototype replace 立即想到方法 但是 当使用替换方法并以简单字符串作为搜索值时 它只会替换第一个出现的位置 替换所有出现的字符
  • 如何在 Debian 11/10 上安装和使用 Cordova

    阿帕奇科尔多瓦是一个开源移动开发框架 它允许您使用 HTML5 CSS3 和 JavaScript 等标准 Web 技术进行跨平台开发 避免使用每个移动平台的本机开发语言 Apache Cordova 命令行需要 Node js 才能运行
  • 如何在 Ubuntu 16.04 LTS 上安装 Swift

    Swift 是一种安全 快速 富有表现力的通用编程语言 专为软件设计模式而构建 它最适合系统编程 移动和桌面应用程序 Swift 提供了大量功能 使编程变得更加容易 同时为开发人员提供了真正的系统编程语言所需的控制能力 本教程将帮助您在 U
  • 如何在 Fedora Linux 上安装 Git

    Git 是一个分布式版本控制系统 广泛应用于软件开发和其他协作项目 在本指南中 我们将介绍在 Fedora Linux 上安装 Git 的两种方法 使用官方存储库和从最新源代码编译 先决条件 确保您有一个运行 Fedora Linux 的系
  • 如何在 Python 中计算两个日期之间的天数

    在 Python 中处理日期和时间时 计算两个日期之间的天数是一项常见任务 无论您是构建预订系统 日程安排工具还是任何其他涉及日期和时间的应用程序 计算两个日期之间的天数都是一个关键功能 在本文中 我们将讨论如何在 Python 中计算两个
  • 什么是中间人 (MITM) 攻击?

    A 中间人 MITM 攻击是一种常见的网络安全威胁 如果处理不当 可能会造成严重后果 在这种类型的攻击中 恶意行为者会拦截 中继并可能改变认为彼此直接通信的两方之间的通信 本文将深入探讨 MITM 攻击带来的威胁 攻击者使用的技术以及个人和
  • 如何利用技术进步实现完美的远程办公

    远程工作并不是一个新趋势 作家 记者和艺术家总是有机会在舒适的家中工作 尽管如此 远程办公始终与技术密切相关 在过去 远程工作人员依赖邮件服务和交通 随着这两个领域变得越来越好 越来越多的人能够在家执行工作任务 然而 直到互联网的出现 这种
  • 如何在 Debian 9 上设置 Apache 虚拟主机

    在本教程中 我们将引导您了解如何在 Debian 9 上设置 Apache 虚拟主机 Apache 虚拟主机允许您在一台计算机上托管多个域 使用虚拟主机时 您可以为每个域或子域指定不同的文档根 包含网站文件的目录 创建单独的安全策略 使用不
  • 如何在 CentOS 8 上安装 R

    R 是一种开源编程语言和免费环境 专门从事统计计算和图形表示 它由 R 统计计算基金会支持 主要供统计学家和数据挖掘人员用于开发统计软件和执行数据分析 本文介绍如何在 CentOS 8 上安装 R 先决条件 在继续本教程之前 请确保您已满足
  • 如何更改 SFTP 端口

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密连接在两台主机之间传输文件 它还允许您对远程文件执行各种文件操作并恢复文件传输 SFTP 可用作旧版 FTP 协议的替代品 它具有 FTP 的所有功能 但连接更安全 本文介绍如
  • 如何在 Ubuntu 18.04 上设置或更改时区

    在 Ubuntu 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 使用正确的时区对于许多与系统相关的任务和流程都很重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于相同的时区 本教程演示如
  • 如何在 Debian 9 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 在本教程中 我们将指导您如何安装Yarn在 Debian 9 系统上
  • 如何在 Ubuntu 18.04 上安装 Django

    Django 是一个免费开源的高级 Python Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 有不同的方法来安装 Django 具体取决于您的需要 它可以在系统范围内安装 也可以使用 pip 安装在 Pyth
  • 如何在 Linux 中添加目录到 PATH

    当您在命令行上键入命令时 您基本上是在告诉 shell 运行具有给定名称的可执行文件 在Linux中 这些可执行程序就像ls find file和其他文件 通常位于系统上的几个不同目录中 存储在这些目录中的任何具有可执行权限的文件都可以从任
  • 如何在 CentOS 8 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程至关重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 在 CentOS 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 本文介绍
  • Python range() 函数

    蟒蛇rangetype 通过定义范围的起点和终点来生成整数序列 它通常与for循环迭代数字序列 range 在 Python 2 和 3 中的工作方式有所不同 在Python 2中 有两个函数可以让你生成整数序列 range and xra
  • Linux 中的正常运行时间命令

    在本教程中 我们将介绍uptime命令 顾名思义 uptime命令显示系统已经运行了多长时间 它还显示当前时间 登录用户数以及过去 1 5 和 15 分钟的系统负载平均值 如何使用正常运行时间命令 uptime 命令的语法如下 uptime
  • 如何在 CentOS 7 上使用 VSFTPD 设置 FTP 服务器

    FTP 文件传输协议 是一种标准的客户端 服务器网络协议 允许用户在远程网络之间传输文件 有多种可用于 Linux 的开源 FTP 服务器 最流行和最广泛使用的是PureFTPd ProFTPD and vsftpd 在本教程中 我们将在