本心、输入输出、结果
文章目录
- 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第八部分:Linux、安全
- 前言
- Linux 文件系统解释
- 应该知道的 18 个最常用的 Linux 命令
- HTTPS如何工作?
- 数据是如何加密和解密的?
- 为什么HTTPS在数据传输过程中会切换到对称加密?主要有两个原因:
- 用简单的术语解释 Oauth 2.0
- OAuth 代币可以做什么?
- 身份验证机制的 4 种使用最多的形式
- 会话、cookie、JWT、令牌、SSO 和 OAuth 2.0 - 它们是什么?
- 如何将密码安全地存储在数据库中以及如何验证密码?
- 不安全的操作
- 什么是盐 (Salt)?
- 如何存储密码和盐?
- 如何验证密码?
- 让 10 岁的孩子也可以看明白 JSON Web 令牌 (JWT)
- Google 身份验证器(或其他类型的双因素身份验证器)如何工作?
- 第 1 阶段
- 第 2 阶段
- 此身份验证机制是否安全?
- 弘扬爱国精神
系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第八部分:Linux、安全
编辑:简简单单 Online zuozuo
地址:https://blog.csdn.net/qq_15071263
如果觉得本文对你有帮助,欢迎点赞、收藏、评论
前言
我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节
我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节
Linux 文件系统解释
Linux 文件系统过去类似于一个无组织的城镇,人们随心所欲地建造房屋。但是,在 1994 年,引入了文件系统层次结构标准 (FHS) 来为 Linux 文件系统带来秩序。
通过实施像FHS这样的标准,软件可以确保在各种Linux发行版上保持一致的布局。尽管如此,并非所有 Linux 发行版都严格遵守此标准。它们通常包含自己独特的元素或满足特定要求。 要精通此标准,您可以从探索开始。使用诸如“cd”之类的命令进行导航,使用“ls”之类的命令列出目录内容。将文件系统想象成一棵树,从根 (/) 开始。
应该知道的 18 个最常用的 Linux 命令
Linux 命令是用于与操作系统交互的说明。它们帮助管理文件、目录、系统进程和系统的许多其他方面。您需要熟悉这些命令,以便有效地导航和维护基于 Linux 的系统
- ls - 列出文件和目录
- cd - 更改当前目录
- mkdir - 创建一个新目录
- rm - 删除文件或目录
- cp - 复制文件或目录
- mv - 移动或重命名文件或目录
- chmod - 更改文件或目录权限
- grep - 在文件中搜索模式
- 查找 - 搜索文件和目录
- tar - 操作压缩包存档文件
- vi - 使用文本编辑器编辑文件
- cat - 显示文件内容
- top - 显示进程和资源使用情况
- ps - 显示进程信息
- kill - 通过发送信号终止进程
- du - 估计文件空间使用情况
- ifconfig - 配置网络接口
- ping - 测试主机之间的网络连接
HTTPS如何工作?
超文本传输协议安全 (HTTPS) 是超文本传输协议 (HTTP) 的扩展。HTTPS 使用传输层安全性 (TLS) 传输加密数据。如果数据在网上被劫持,劫持者得到的只是二进制代码。
数据是如何加密和解密的?
- 步骤 1 - 客户端(浏览器)和服务器建立 TCP 连接。
- 步骤 2 - 客户端向服务器发送“客户端问候”。该消息包含一组必要的加密算法(密码套件)及其可以支持的最新 TLS 版本。服务器以“服务器问候”响应,以便浏览器知道它是否可以支持算法和TLS版本。
- 然后,服务器将 SSL 证书发送到客户端。证书包含公钥、主机名、到期日期等。客户端验证证书。
- 步骤 3 - 验证 SSL 证书后,客户端生成会话密钥并使用公钥对其进行加密。服务器接收加密的会话密钥并使用私钥对其进行解密。
- 步骤 4 - 现在客户端和服务器都持有相同的会话密钥(对称加密),加密的数据在安全的双向通道中传输。
为什么HTTPS在数据传输过程中会切换到对称加密?主要有两个原因:
- 安全性:非对称加密只有一种方式。这意味着,如果服务器尝试将加密数据发送回客户端,任何人都可以使用公钥解密数据。
- 服务器资源:非对称加密增加了相当多的数学开销。它不适合长时间会话中的数据传输
用简单的术语解释 Oauth 2.0
OAuth 2.0 是一个功能强大且安全的框架,允许不同的应用程序代表用户安全地相互交互,而无需共享敏感凭据
OAuth 中涉及的实体是用户、服务器和身份提供程序 (IDP)。
OAuth 代币可以做什么?
- 使用 OAuth 时,您将获得一个表示您的标识和权限的 OAuth 令牌。此令牌可以执行一些重要操作:
- 单点登录 (SSO):使用 OAuth 令牌,您只需一次登录即可登录多个服务或应用程序,让生活更轻松、更安全。
- 跨系统授权:OAuth 令牌允许您在各种系统之间共享您的授权或访问权限,因此您不必在任何地方单独登录。
- 访问用户配置文件:具有 OAuth 令牌的应用可以访问您允许的用户配置文件的某些部分,但它们不会看到所有内容。
- 请记住,OAuth 2.0 旨在确保您和您的数据安全,同时使您的在线体验在不同的应用程序和服务之间无缝无忧
身份验证机制的 4 种使用最多的形式
- SSH Keys: 加密密钥用于安全地访问远程系统和服务器
- OAuth Tokens:: 提供对第三方应用程序上的用户数据的有限访问权限的令牌
- SSL Certificates:: 数字证书可确保服务器和客户端之间的安全和加密通信
- Credentials: 用户身份验证信息用于验证和授予对各种系统和服务的访问权限
会话、cookie、JWT、令牌、SSO 和 OAuth 2.0 - 它们是什么?
这些术语都与用户身份管理有关。当您登录网站时,您声明了您是谁(身份识别)。您的身份已验证(身份验证),并被授予必要的权限(授权)。过去已经提出了许多解决方案,并且还在不断增长
排序从简单到复杂
- WWW-身份验证是最基本的方法。浏览器要求您输入用户名和密码。由于无法控制登录生命周期,因此今天很少使用它。
- 对登录生命周期的更精细控制是会话cookie。服务器维护会话存储,浏览器保留会话的 ID。Cookie 通常仅适用于浏览器,对移动应用程序不友好。
- 若要解决兼容性问题,可以使用令牌。客户端将令牌发送到服务器,服务器验证令牌。缺点是令牌需要加密和解密,这可能很耗时。
- JWT 是表示令牌的标准方式。此信息可以验证和信任,因为它是经过数字签名的。由于 JWT 包含签名,因此无需在服务器端保存会话信息。
- 通过使用 SSO(单点登录),您只能登录一次并登录到多个网站。它使用 CAS(中央身份验证服务)来维护跨站点信息
- 通过使用OAuth 2.0,您可以授权一个网站访问另一个网站上的信息
如何将密码安全地存储在数据库中以及如何验证密码?
不安全的操作
- 以纯文本形式存储密码不是一个好主意,因为任何具有内部访问权限的人都可以看到它们。
- 直接存储密码哈希是不够的,因为它被修剪为预计算攻击,例如彩虹表。
- 为了减轻预计算攻击,我们会对密码进行加盐处理。
什么是盐 (Salt)?
根据OWASP指南,“盐是一个唯一的,随机生成的字符串,作为哈希过程的一部分添加到每个密码中”。
如何存储密码和盐?
哈希结果对于每个密码都是唯一的。
密码可以使用以下格式存储在数据库中:hash(password + salt)。
如何验证密码?
要验证密码,可以执行以下过程:
- 客户端输入密码。
- 系统从数据库中获取相应的盐。
- 系统会将盐附加到密码并对其进行哈希处理。我们将哈希值称为 H1。
- 系统比较 H1 和 H2,其中 H2 是存储在数据库中的哈希。如果它们相同,则密码有效。
让 10 岁的孩子也可以看明白 JSON Web 令牌 (JWT)
想象一下,您有一个称为 JWT 的特殊框。在此框中,有三个部分:标头、有效负载和签名。
标题就像盒子外面的标签。它告诉我们它是什么类型的盒子以及如何保护它。它通常以称为 JSON 的格式编写,这只是一种使用大括号 { } 和冒号来组织信息的方法: 。
有效负载类似于您要发送的实际消息或信息。它可以是您的姓名、年龄或您要共享的任何其他数据。它也以 JSON 格式编写,因此易于理解和使用。 现在,签名是使 JWT 安全的原因。这就像一个特殊的印章,只有发送者知道如何创建。签名是使用密码创建的,有点像密码。此签名可确保没有人可以在发件人不知情的情况下篡改 JWT 的内容。
当您要将 JWT 发送到服务器时,请将标头、有效负载和签名放在框中。然后将其发送到服务器。服务器可以轻松读取标头和有效负载,以了解您是谁以及您想要做什么。
Google 身份验证器(或其他类型的双因素身份验证器)如何工作?
启用两因素身份验证时,Google身份验证器通常用于登录我们的帐户。它如何保证安全?
Google 身份验证器是一种基于软件的身份验证器,可实现两步验证服务。下图提供了详细信息。
涉及两个阶段:
- 第 1 阶段 - 用户启用 Google 两步验证
- 第 2 阶段 - 用户使用身份验证器登录等。
第 1 阶段
- 步骤 1 和 2:Bob 打开网页以启用两步验证。前端请求密钥。身份验证服务为 Bob 生成密钥并将其存储在数据库中。
- 步骤 3:身份验证服务向前端返回 URI。URI 由密钥颁发者、用户名和密钥组成。URI 以二维码的形式显示在网页上。
- 步骤 4: 鲍勃然后使用谷歌身份验证器扫描生成的二维码。密钥存储在身份验证器中。
第 2 阶段
- 步骤 1 和 2:Bob 想要使用 Google 两步验证登录网站。为此,他需要密码。每 30 秒,Google 身份验证器就会使用 TOTP(基于时间的一次性密码)算法生成一个 6 位密码。鲍勃使用密码进入网站。
- 步骤 3 和 4:前端将 Bob 输入的密码发送到后端进行身份验证。身份验证服务从数据库中读取密钥,并使用与客户端相同的 TOTP 算法生成 6 位密码。
- 步骤 5:认证服务对比客户端和服务器端生成的两个密码,并将比较结果返回给前端。仅当两个密码匹配时,Bob 才能继续登录过程。
此身份验证机制是否安全?
- 秘密密钥可以被其他人获得吗?
- 我们需要确保密钥是使用 HTTPS 传输的。身份验证器客户端和数据库存储密钥,我们需要确保密钥是加密的。
- 黑客可以猜到6位数的密码吗?
- 不。密码有 6 位数字,因此生成的密码有 100 万个潜在的组合。另外,密码每 30 秒更改一次。如果黑客在30秒内猜出密码,他们需要每秒输入30,000个组合。