作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。 介绍 SSH 默认使用密码进行身份验证,大多数 SSH 强化说明建议改用 SSH 密钥。然而,SSH 密钥仍然只是一个因素,虽然是一个更安全的因素。通道是您计算机上的终端,通过加密隧道将数据发送到远程机器。但是就像黑客可以猜出密码一样,他们可以窃取 SSH 密钥,然后在任何一种情况下,攻击者都可以使用该单条数据访问您的远程系统。 在本教程中,我们将设置多因素身份验证来解决这个问题。多因素身份验证(MFA) 或双因素身份验证(2FA) 需要不止一个因素来进行身份验证或登录。这意味着不良行为者必须妥协多项内容,例如您的计算机和手机,才能进入。那里身份验证中使用的几种类型的因素: 你知道的东西,比如密码或安全问题 您拥有的东西,例如身份验证器应用程序或安全令牌 你是什么,比如你的指纹或声音 一个常见因素是 OATH-TOTP 应用程序,例如 Google 身份验证器。OATH-TOTP(Open Authentication Time-Based One-Time Password)是一种开放式协议,可生成一次性使用密码,通常是每 30 秒循环一次的六位数字。 除了 SSH 密钥之外,本文还将介绍如何使用 OATH-TOTP 应用程序启用 SSH 身份验证。通过 SSH 登录您的服务器将需要跨两个通道的两个因素,从而使其比单独的密码或 SSH 密钥更安全。此外,我们还将介绍 MFA 的一些其他用例以及一些有用的提示和技巧。 如果您正在寻求有关保护 SSH 连接的进一步指导,请查看有关强化 OpenSSH和强化 OpenSSH 客户端的这些教程。 先决条件 要学习本教程,您需要: 一台带有 sudo 非 ..
Category : 教程系列
介绍 近年来,数据已成为技术的驱动力,因为现代应用程序和网站需要管理不断增加的数据量。传统上,数据库管理系统基于关系模型组织数据。然而,随着组织的数据需求发生变化,已经开发了许多新类型的数据库。 这些新型数据库通常不依赖于关系数据库提供的传统表结构,因此比关系数据库强加的刚性结构具有更大的灵活性。此外,它们通常不使用结构化查询语言(SQL),大多数关系数据库系统都采用这种语言来允许用户定义数据并与数据交互。这导致许多这些新的非关系型数据库通常被称为NoSQL数据库。 MongoDB(也称为Mongo)于 2009 年首次发布,是一种面向文档的 NoSQL 数据库,用于许多现代 Web 应用程序。这篇概念性文章对将 MongoDB 与其他数据库管理系统区分开来并使其成为跨许多不同用例的宝贵工具的功能进行了高级概述。 MongoDB 简要概述 正如介绍中提到的,MongoDB 被认为是一个 NoSQL 数据库,因为它不依赖于关系模型。每个数据库管理系统都是围绕某种类型的数据模型设计的,该模型定义了数据库中数据的组织方式。关系模型涉及将数据存储在由行和列组成的表中——更正式地称为关系。 另一方面,MongoDB 将其数据记录存储在称为文档的结构中。Mongo 允许您将多个文档分组到一个称为集合的结构中,该结构可以进一步分组到单独的数据库中。 文档是用 BSON 编写的,BSON 是JSON的二进制表示。与 JSON 中的对象一样,MongoDB 文档以大括号 ({和})开头和结尾,并包含许多通常采用. 字段的值可以是BSON 中使用的任何一种数据类型,甚至其他结构,如文档和数组。field: value 安全 MongoDB 安装了许多功能,可以帮助防止数据丢失以及未经授权的用户访问。其中一些功能可以在其他数据库管理系统上找到。例如,与许多现代 DBMS 一样,Mongo 允许您在数据通过网络时对其进行加密 — 有时称为传输中的数据。它通过要求使用传输层安全性(TLS)建立与数据库的连接来实现这一点,TLS 是一种加密协议,作为安全套接字层(SSL)的继承者。 与其他 DBMS 一样,Mongo也通过称为基于角色的访问控制的计算机安全概念来管理授权——为给定的用户或用户组设置规则以定义他们可以执行的操作以及他们可以访问的资源的做法,或者RBAC。每当您创建 MongoDB 用户时,您都可以选择为他们提供一个或多个角色。 角色定义了用户拥有哪些特权,包括他们可以对给定的数据库、集合、集合集或集群执行哪些操作。例如,您可以为用户分配readWrite任何数据库上的角色,这意味着您可以读取和修改系统上任何数据库中保存的数据,只要您授予用户对其的readWrite角色即可。MongoDB 的 RBAC 与其他数据库的 RBAC 的区别在于,除了其内置角色之外,Mongo 还允许您定义自定义角色,让您可以更好地控制用户可以访问系统上的资源。 自4.2版本发布以来,MongoDB 支持客户端字段级加密。这涉及在数据写入数据库之前加密文档中的某些字段。稍后尝试读取它的任何客户端或应用程序必须首先提供正确的加密密钥才能解密这些字段中的数据。 ..
作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。 介绍 Ansible是一种执行playbooks的配置管理工具,playbooks是在指定目标服务器上用 YAML 编写的可定制操作列表。它可以执行所有引导操作,例如安装和更新软件、创建和删除用户以及配置系统服务。因此,它适用于启动您使用 Terraform 部署的服务器,这些服务器默认创建为空白。 Ansible 和 Terraform 不是竞争解决方案,因为它们解决了基础设施和软件部署的不同阶段。Terraform 允许您定义和创建系统的基础设施,包括您的应用程序将在其上运行的硬件。相反,Ansible 通过在提供的服务器实例上执行其剧本来配置和部署软件。在 Terraform 创建后直接提供的资源上运行 Ansible 可以让您更快地使资源可用于您的用例。它还可以更轻松地进行维护和故障排除,因为所有部署的服务器都将应用相同的操作。 在本教程中,您将使用 Terraform 部署 Droplet,然后在它们创建后立即使用 Ansible 引导 Droplet。当资源部署时,您将直接从 Terraform 调用 Ansible。您还将避免在配置中使用 Terraform和配置器引入竞争条件,这将确保 Droplet 部署在进一步设置开始之前完全完成。remote-execlocal-exec 先决条件 DigitalOcean 个人访问令牌,您可以通过 DigitalOcean 控制面板创建。您可以使用如何生成个人访问令牌教程。 Terraform 安装在您的本地计算机上,并使用 DigitalOcean 提供商设置了一个项目。完成如何在 DigitalOcean 中使用 Terraform教程的第 1 步和第 2 步,并确保将项目文件夹命名为.terraform-ansibleloadbalance Ansible 安装在您的机器上。对于 Ubuntu 18.04,完成如何在 Ubuntu 18.04 上安装和配置 ..
干燥,这代表“ d on’t [R EPEAT Ÿ我们自己,”是软件开发的原则,旨在减少的模式和代码重复的重复主张抽象的,避免冗余。 由 The Pragmatic Programmer 一书推广的 DRY 原则指出,“系统中的每一条知识都必须有一个单一的、明确的、权威的表示。” 使用具有某些功能的原理、逻辑或算法在应用程序中只应出现一次。 要了解有关 DRY 开发的更多信息,请查看有关 DRY 开发成本和收益的文章,DRY 原则:收益和成本�..
对象是 JavaScript 的基本块。对象是属性的集合,属性是键(或名称)和值之间的关联。JavaScript 中的几乎所有对象都是Object位于原型链顶部的实例。 介绍 如您所知,赋值运算符不会创建对象的副本,它只会为其分配一个引用,让我们看一下以下代码: let obj = { a: 1, b: 2, }; let copy = obj; obj.a = 5; console.log(copy.a); // Result // a = 5; 该obj变量是初始化的新对象的容器。该copy变量指向同一个对象,并且是对该对象的引用。所以基本上这个{ a: 1, b: 2, }对象是在说:现在有两种方法可以访问我。您必须通过obj变量或copy变量以任何方式到达我,并且您通过这些方式(网关)对我做的任何事情都会影响我。 这些天来广泛谈论不变性,你必须听听这个电话!此方法消除了任何形式的不变性,如果原始对象被代码的另一部分使用,则可能会导致错误。 复制对象的天真方法 复制对象的最简单的方法是循环遍历原始对象并一个接一个地复制每个属性。我们来看看这段代码: function copy(mainObj) { let objCopy = {}; // objCopy will store a copy of the mainObj let ..
介绍 ParcelJS将自己描述为速度极快、零配置的 Web 应用程序打包器。 Parcel 的前提是使用 JavaScript 打包器构建应用程序可能更容易。Webpack 提供了更大的可配置性,但可能存在不需要这种程度的配置的用例。 这就是 Parcel 的用武之地。它自诩为一个零配置的快速捆绑工具——您只需将它指向应用程序的入口点即可。 Parcel 还提供以下功能: 快速捆绑时间 – Parcel 的时间比其他捆绑工具快得多。下面是GitHub 上 Parcel 页面的屏幕截图。 资产捆绑 – Parcel 对 JS、CSS、HTML、文件资产具有开箱即用的支持。 自动转换 – 您的所有代码都使用 Babel、PostCSS 和 PostHTML 自动转换。 代码拆分 – Parcel 允许您使用动态 import() 语法拆分输出包。 热模块替换 (HMR) – Parcel 会在您在开发过程中进行更改时自动更新浏览器中的模块,无需配置。 错误记录 – Parcel 在遇到错误时打印语法突出显示的代码帧,以帮助您查明问题。 关于 Parcel 的另一件事要注意的是,它允许开发人员使用index.html文件作为入口点,而不是 JS 模块。 在本教程中,您将使用 Parcel ..
作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。 介绍 在 Web 的早期,网站主要由HTML和CSS 组成。如果任何 JavaScript 加载到页面中,它通常是提供效果和交互性的小片段形式。因此,JavaScript 程序通常完全写在一个文件中并加载到script标签中。开发人员可以将 JavaScript 分解为多个文件,但所有变量和函数仍将添加到全局作用域中。 但是随着网站随着Angular、React和Vue等框架的出现以及公司创建高级 Web 应用程序而不是桌面应用程序而发展,JavaScript 现在在浏览器中扮演着重要角色。因此,更需要使用第三方代码来执行常见任务,将代码分解为模块化文件,并避免污染全局命名空间。 在ECMAScript的2015年规范引入模块JavaScript语言,它允许使用import和export声明。在本教程中,您将了解什么是 JavaScript 模块以及如何使用import和export组织您的代码。 模块化编程 在 JavaScript 中出现模块的概念之前,当开发人员想要将他们的代码组织成段时,他们会创建多个文件并作为单独的脚本链接到它们。为了演示这一点,创建一个示例index.html文件和两个 JavaScript 文件,functions.js以及script.js. 该index.html文件将显示两个数字的和、差、积和商,并在script标签中链接到两个 JavaScript 文件。index.html在文本编辑器中打开并添加以下代码: 索引.html <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”utf-8″ /> <meta name=”viewport” content=”width=device-width, initial-scale=1.0″ /> <title>JavaScript Modules</title> </head> <body> <h1>Answers</h1> <h2><strong id=”x”></strong> and <strong id=”y”></strong></h2> <h3>Addition</h3> ..
作者选择Creative Commons接受捐赠,作为Write for DOnations计划的一部分。 介绍 在React 中,状态是指一种结构,用于跟踪应用程序中数据随时间的变化情况。管理状态是 React 中的一项关键技能,因为它允许您制作交互式组件和动态 Web 应用程序。状态用于从跟踪表单输入到从 API 捕获动态数据的所有事情。在本教程中,您将通过一个在基于类的组件上管理状态的示例。 在撰写本教程时,React官方文档鼓励开发人员在编写新代码时采用React Hooks来管理具有功能组件的状态,而不是使用基于类的组件。尽管使用 React Hooks 被认为是一种更现代的实践,但了解如何管理基于类的组件的状态也很重要。学习状态管理背后的概念将帮助您在现有代码库中导航和解决基于类的状态管理,并帮助您确定何时更适合基于类的状态管理。还有一个基于类的方法componentDidCatch,它在 Hooks 中不可用,需要使用类方法设置状态。 本教程将首先向您展示如何使用静态值设置状态,这对于下一个状态不依赖于第一个状态的情况非常有用,例如从覆盖旧值的 API 设置数据。然后会贯穿如何将一个状态设置为当前状态,这在下一个状态依赖于当前状态时很有用,比如切换一个值。要探索设置状态的这些不同方式,您将创建一个产品页面组件,您将通过从选项列表中添加购买来更新该组件。 先决条件 你需要一个运行Node.js的开发环境;本教程在 Node.js 版本 10.20.1 和 npm 版本 6.14.4 上进行了测试。要在 macOS 或 Ubuntu 18.04 上安装它,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分中的步骤进行操作。 在本教程中,您将使用Create React App创建应用程序。您可以在如何使用 Create React App设置 ..
该系列的一部分: 如何编写 Ansible Playbooks Ansible 是一种现代配置管理工具,不需要在远程节点上使用代理软件,仅使用 SSH 和 Python 在托管服务器上进行通信和执行命令。本系列将带您了解可用于编写服务器自动化剧本的主要 Ansible 功能。最后,我们将看到一个实际示例,说明如何创建剧本以自动设置远程 Nginx Web 服务器并向其部署静态 HTML 网站。 就像您在终端上执行的常规命令一样,某些任务需要特殊权限才能让 Ansible 在您的远程节点上成功执行它们。 了解权限提升在 Ansible 中的工作原理很重要,这样您就可以使用适当的权限执行任务。默认情况下,任务将作为连接用户运行 – 这可能是root或任何对清单文件中的远程节点具有 SSH 访问权限的普通用户。 要运行具有扩展权限的命令,例如需要 的命令sudo,您需要在您的游戏中包含become设置为的指令yes。这既可以作为对该剧中所有任务有效的全局设置,也可以作为每个任务应用的单独指令来完成。根据您的sudo用户在远程节点中的设置方式,您可能还需要提供用户的sudo密码。以下示例更新apt缓存,这是一项需要root权限的任务。 playbook-07.yml在您的ansible-practice目录中创建一个名为的新文件: nano ~/ansible-practice/playbook-07.yml 然后将以下行添加到新的剧本文件中: ~/ansible-practice/playbook-07.yml — – hosts: all become: yes tasks: – name: Update apt cache apt: update_cache: yes 完成后保存并关闭文件。 要运行此剧本,您需要-K在ansible-playbook命令中包含该选项。这将使 Ansible 提示您sudo输入指定用户的密码。 ansible-playbook -i ..
介绍 Composer是一个流行的 PHP 依赖管理工具,创建主要是为了方便项目依赖的安装和更新。它将检查特定项目依赖哪些其他包并为您安装它们,根据项目要求使用适当的版本。Composer 还常用于引导基于流行的 PHP 框架(例如Symfony和Laravel )的新项目。 在本教程中,您将在 Ubuntu 20.04 系统上安装并开始使用 Composer。 先决条件 为了遵循本指南,您需要以非 rootsudo用户身份访问 Ubuntu 20.04 服务器,并在您的服务器上启用防火墙。要进行设置,您可以按照我们针对 Ubuntu 20.04 的初始服务器设置指南进行操作。 第 1 步 – 安装 PHP 和其他依赖项 除了应该已经包含在 Ubuntu 20.04 系统中的依赖项(例如git和 )之外curl,Composer 还需要php-cli在命令行中执行 PHP 脚本并unzip提取压缩档案。我们现在将安装这些依赖项。 首先,通过运行更新包管理器缓存: sudo apt update 接下来,运行以下命令来安装所需的包: sudo apt install php-cli unzip 系统将提示您输入Y,然后输入确认安装ENTER。 安装先决条件后,您可以继续安装 Composer。 步骤 2 — 下载和安装 Composer ..