如何配置 vsftpd 在 CentOS VPS 上使用 SSL/TLS

2023-11-17

介绍


Warning: FTP 不安全!考虑使用 SFTP 代替 FTP.

FTP,即文件传输协议,是一种在本地和远程服务器之间传输文件的方式。尽管这种文件传输方法非常流行且无处不在,但由于其设计缺乏固有的安全性,它已经不再受欢迎。

如上所述,SFTP 是一个非常强大的替代方案。该协议通过 SSH 实现文件共享。如果你must使用 FTP,您至少应该使用 SSL/TLS 证书来保护连接。

在本指南中,我们将配置 vsftpd 以在 CentOS 6.4 VPS 上使用 TLS/SSL 证书。

安装vsftpd


vsftpd 服务器在 CentOS 的默认存储库中可用。我们可以通过输入以下内容来安装它:

sudo yum install vsftpd

vsftpd 服务器现已安装在我们的 VPS 上。我们可以在下一节中配置一些连接选项。

配置 vsftpd 的基本设置


CentOS 上 vsftpd 的主要配置文件保存在/etc/vsftpd/目录。它被称为vsftpd.conf.

使用 root 权限在编辑器中打开此文件:

sudo nano /etc/vsftpd/vsftpd.conf

我们需要调整此文件中的一些基本参数以提高安全性并建立我们的连接选项。

我们要做的第一件事是禁用匿名用户。虽然此选项对于面向公众的大型文件转储(如公共软件存储库)可能有意义,但对于个人 FTP 服务器来说,这几乎从来都不是一个好主意。

anonymous_enable=NO

由于我们禁用匿名用户,因此我们需要为系统提供一种对用户进行身份验证的方法。我们将允许本地用户,这意味着 vsftpd 将使用我们的 Linux 系统用户和身份验证来确定谁可以登录。

要启用此功能,请确保设置此选项:

local_enable=YES

我们还将允许他们写入访问权限,以便他们可以上传材料和修改内容:

write_enable=YES

我们还希望将用户限制在他们各自的主目录中。选项是:

chroot_local_user=YES

这对于基本(非 SSL)FTP 配置来说已经足够了。稍后我们将添加 SSL 功能。

保存并关闭文件。

创建FTP用户


我们选择使用本地用户并通过 chroot 环境将他们限制在其主目录中。

使用以下命令创建一个新用户:

sudo adduser ftpuser

通过键入以下内容为新用户分配密码:

sudo passwd ftpuser

CentOS 6.4 中的 vsftpd 版本较旧,因此这部分设置比某些较新版本更容易。

使用 vsftpd 配置 SSL


让 vsftpd 使用 SSL 运行的第一步是创建 SSL 证书。我们实际上将使用 TLS,它是 SSL 的后续协议,并且更安全。

我们将在 SSL 目录中创建一个子目录来存储我们的文件:

sudo mkdir /etc/ssl/private

要在单个文件中创建证书和密钥,我们可以使用以下命令:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

填写它提出的问题。最重要的是服务器的“通用名称”,它将是您用于连接的 IP 地址或域名。

将 SSL 详细信息添加到 vsftpd 配置文件中


现在,我们需要更改配置以指向新密钥并配置安全连接。

再次以 root 身份打开 vsftpd 配置文件:

sudo nano /etc/vsftpd/vsftpd.conf

滚动到文件底部。我们将在此处添加 SSL/TLS 信息。

我们需要指定证书和密钥文件的位置。我们实际上将两条信息合并到一个文件中,因此我们将这两个选项指向同一个文件:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

接下来,我们需要启用这些文件的使用并禁用匿名用户。我们还应该强制在数据传输和登录例程中使用 SSL。这将使安全成为强制性的:

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

接下来,我们将连接类型限制为 TLS,它比 SSL 更安全。我们将通过明确允许 TLS 并拒绝使用 SSL 来做到这一点:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

在完成之前我们将添加更多配置选项:

require_ssl_reuse=NO
ssl_ciphers=HIGH

保存并关闭文件。

我们需要重新启动 vsftpd 才能启用我们的更改:

sudo /etc/init.d/vsftpd restart

我们还将其配置为每次重新启动时自动启动:

sudo chkconfig vsftpd on

如何使用 FileZilla 连接到 vsftpd 服务器


大多数现代 FTP 客户端都可以使用 SSL 和 TLS 连接。我们将向您展示如何设置 FileZilla 以使用安全连接,因为它具有跨平台兼容性。我们假设您已经使用适用于您的计算机的任何适当的安装过程安装了客户端。

打开 FileZilla 程序。在界面中,您可以单击图标打开“站点管理器”。它应该看起来像图片最左边的图标:

FileZilla Open Site Manager

在弹出的新界面中,您应该单击左下角的“新建站点”按钮。为服务器连接命名,以便您以后可以轻松识别它

FileZilla New Site

在“主机”字段中填写 IP 地址,然后从协议下拉菜单中选择“FTP - 文件传输协议”。对于加密下拉列表,选择“需要基于 TLS 的显式 FTP”。

从“登录类型”菜单中选择“询问密码”。填写我们为“用户”字段创建的 FTP 用户:

FileZilla Server Configuration

现在,您可以单击面板底部的“连接”。系统将提示您输入 FTP 用户的密码:

FileZilla user password

下一步是我们使用 TLS 连接到远程服务器的第一个迹象。我们将被要求接受正在使用的证书。

FileZilla Server Certificate

您应该能够看到创建证书时填写的信息,以验证您实际上连接到了正确的位置。

接受证书以建立连接。

结论


虽然此配置是朝着正确方向迈出的一步,但在建立连接之前仍然存在安全问题。由于这些问题,在大多数向互联网开放的设置中应该避免使用它。如果您希望能够使用一些您熟悉的相同工具,但安全性值得信赖,那么 SFTP 是一个很好的选择。

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

如何配置 vsftpd 在 CentOS VPS 上使用 SSL/TLS 的相关文章

  • 用户如何登录定义了读者角色的 couchapp?

    我通过 Couchapp 部署了我的应用程序 这意味着整个应用程序是从数据库中提供服务的 我不希望 Couchdb 数据库中的数据公开可用 因此我指定了用户在向他提供数据之前必须具有的读者角色 然而 当我去申请时 我所能得到的是 error
  • 无法使用前导 ../ 在顶级目录之上退出

    我有一个 asp net 网站 我们有管理区域 其中的登录页面仅供管理员使用 并且所有网站都允许所有人使用 当我收到此错误时 我需要询问如何为其定义正确的安全配置 Cannot use a leading to exit above the
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 支持 API 28(Android Pie) 上的 Android StrongBox 的 Android 智能手机列表

    我需要 Android 9 中支持安全元件和 StrongBox 的 Android 手机列表 在哪里或如何找到该列表 我在 Samsung Galaxy S9 和 AVD Google Pixel XL API 28 上尝试了下面的代码
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private
  • php 中的简单授权/登录功能

    我希望第一次实现用户登录到我的网站 我很高兴构建自己的解决方案 或者实现一些开源的东西 但是到目前为止 在我的搜索中没有任何包是明显的选择 同样 我完全意识到 作为一名中级 php 程序员 如果我推出自己的解决方案 并真正敞开大门 我很可能
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • 对客户端 JavaScript 计算器使用 eval 安全吗?

    我正在制作一个计算器 作为用户浏览器的静态 HTML 页面 该页面并非旨在将任何信息提交回服务器 除了这个计算器之外 网页上不会出现任何其他内容 在这种情况下使用 eval 安全吗 或者换句话说 在这种情况下使用 eval 是否会导致额外的
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 数据加密

    存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分 不过 我想要的是卡号的最终安全性 我们可以设置一种加密和解密机制 但我们自己无法解密任何给定的号码 我所追求的是一种即使在数据库级别也能保护这些信息的方法 这样任何人都无法进
  • PHP Web 应用程序 (Magento) 遭到黑客攻击;这段黑客代码有什么作用?

    我刚刚安装的 Magento 1 3 2 4 被黑了 你能告诉我这段代码的目的是什么吗 另外 如何阻止这种情况以及如何发现漏洞 谢谢 function net match network ip ip arr explode network
  • Microsoft 帐户 JWT 身份验证令牌如何签名?

    在我的 Web 应用程序中 我需要验证从 Live SDK 5 6 获取的 JWT 身份验证令牌 不久前 这些令牌的签名是使用签名密钥的 Base64 编码标头 有效负载的 HMACSHA256 哈希 该签名密钥是应用程序秘密 来自 acc
  • Monkeyrunner/jython 中未找到 JDBC 驱动程序错误

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

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht

随机推荐

  • 如何在 Ubuntu 18.04 上安装 Flask

    Flask 是一个免费 开源的 Python 微型 Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 烧瓶是基于Werkzeug和用途Jinja2作为模板引擎 Unlike Django 默认情况下 Flask 不
  • Linux 中的 Whoami 命令

    在本文中 我们将介绍whoami命令 顾名思义 whoami命令打印有效用户 ID 的用户名 换句话说 它显示当前登录用户的名称 如何使用whoami命令 语法为whoami命令如下 whoami OPTION 要显示当前登录用户的名称 请
  • 如何在 CentOS 8 上安装和配置 Redmine

    Redmine 是一款免费的开源项目管理和问题跟踪应用程序 它是跨平台和跨数据库的 构建在 Ruby on Rails 框架之上 Redmine包括对多个项目 wiki 问题跟踪系统 论坛 日历 电子邮件通知等的支持 本教程介绍如何在 Ce
  • Linux 中的 Stat 命令

    stat是一个命令行实用程序 显示有关给定文件或文件系统的详细信息 本文介绍了如何使用stat命令 使用stat命令 语法为stat命令如下 stat OPTION FILE stat接受一个或多个输入FILE名称并包含许多控制命令行为和输
  • 如何在 CentOS 8 上安装 Python 3.8

    Python 是世界上使用最广泛的编程语言之一 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 是一种非常通用的编程语言 它可用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 CentOS
  • Linux 中的 Chgrp 命令(更改组)

    在 Linux 中 每个文件都与一个所有者和一个组相关联 并具有确定哪些用户可以读取 写入或执行该文件的权限 本文介绍了如何使用chgrp命令更改给定文件的组所有权 chgrp命令语法 The chgrp命令采用以下形式 chgrp OPT
  • 如何在 CentOS 7 上安装 Ruby

    Ruby 是当今最流行的语言之一 它具有优雅的语法 是 Ruby on Rails 框架背后的语言 本文展示了在 CentOS 上安装 Ruby 的几种不同方法 每种安装方法都有自己的优点 您可以选择最适合您的一种安装方法 先决条件 在开始
  • 如何每 5 分钟、10 分钟或 15 分钟运行一次 Cron 作业

    cron 作业是按指定时间间隔执行的任务 可以将任务安排为按分钟 小时 每月的某一天 每月 每周的某一天或这些的任意组合运行 Cron 作业通常用于自动化系统维护或管理 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况
  • Bash:追加到文件

    在 Bash 中 有多种方法可以将文本附加到文件中 本文解释了其中一些 要将文本附加到文件 您需要对其具有写入权限 否则 您将收到权限被拒绝的错误 使用重定向运算符附加到文件 gt gt 重定向允许您捕获命令的输出并将其作为输入发送到另一个
  • 在 C/C++ 中使用 INT_MAX 和 INT_MIN

    在本文中 我们将了解在 C C 中使用 INT MAX 和 INT MIN 这些实际上是有用的宏 它们表示最大和最小整数值 让我们用一些例子来看看它 使用 INT MAX 和 INT MIN INT MAX 是一个表示最大整数值的宏 同样
  • Google Guice 依赖注入示例教程

    谷歌指南是在应用程序中自动执行依赖项注入的框架 如果您直接遇到这里 我建议您查看一下依赖注入示例在这里我们了解了传统对象创建方法的问题以及依赖注入的实现优势 在上一篇教程中 我们学习了如何在应用程序中手动实现依赖注入 但是 当应用程序中的类
  • 如何在 CentOS 7 上安装 MySQL

    介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LEMP Linux Nginx MySQL MariaDB PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来管理其数据 CentOS 7
  • 如何配置 DNS 循环负载平衡以实现高可用性

    介绍 尽管这是一种更有争议的技术 但利用提供商的全球影响力在地理上分发应用程序的一个好方法是使用和管理 DNS 响应 即返回的 IP 地址列表 除非您愿意在硬件和基础设施成本上花费一点钱 否则使用 DNS 来实现高可用性可能是一个很好的方法
  • 如何在 CentOS 7 上使用 FreeIPA 设置集中式 Linux 身份验证

    介绍 FreeIPA是 Linux 的开源安全解决方案 提供帐户管理和集中身份验证 类似于 Microsoft 的 Active Directory FreeIPA 构建在多个开源项目之上 包括 389 Directory Server M
  • Spring Boot 教程

    欢迎来到 Spring Boot 教程 春季启动是 Pivotal Team The Spring Team 的一个全新项目 它是在现有 Spring 框架之上开发的框架 Spring Boot 教程 Spring Boot使用全新的开发模
  • 如何使用 Whisper 和 Spleeter AI 工具制作卡拉 OK 视频

    介绍 人工智能工具可用于处理图像 音频或视频以产生新颖的结果 直到最近 在不使用大量时间和计算能力的情况下 自动编辑图像或音频仍然具有挑战性 即使如此 通常也只能运行交钥匙滤波器来删除声音中的某些频率或更改图像的调色板 较新的方法使用人工智
  • JSF PrimeFaces 教程

    欢迎来到 JSF Primefaces 教程 JavaServer Faces是当今用于实现 Java Web 应用程序用户界面的领先框架之一 JSF 已经组件化了 Web 应用程序 特别是与界面相关的部分 因为 JSF 中的所有单一视图都
  • 如何在 Ubuntu 14.04 服务器上使用 Nginx 安装和保护 phpMyAdmin

    介绍 很大一部分网站和应用程序都需要 MySQL 等关系数据库管理系统 然而 并非所有用户都愿意从命令行管理数据 为了解决这个问题 创建了一个名为 phpMyAdmin 的项目 以提供基于 Web 的管理界面形式的替代方案 在本指南中 我们
  • 如何保护您的服务器免受 POODLE SSLv3 漏洞的影响

    介绍 2014年10月14日 SSL加密协议第3版中的漏洞被披露 该漏洞被称为 POODLE Padding Oracle On Downgraded Legacy Encryption 允许攻击者使用中间人攻击以纯文本形式读取使用此版本协
  • 如何配置 vsftpd 在 CentOS VPS 上使用 SSL/TLS

    介绍 Warning FTP 不安全 考虑使用 SFTP 代替 FTP FTP 即文件传输协议 是一种在本地和远程服务器之间传输文件的方式 尽管这种文件传输方法非常流行且无处不在 但由于其设计缺乏固有的安全性 它已经不再受欢迎 如上所述 S