请选择 进入手机版 | 继续访问电脑版

[LINUX] 在Linux上怎样 管理加密密钥?管理加密密钥的最佳体验

[复制链接]
查看69 | 回复12 | 2021-9-5 01:29:47 | 显示全部楼层 |阅读模式

存储 SSH 的加密秘钥和记住暗码 不停 是一个让人头疼的题目 。但是不幸的是,在当前这个充满了恶意黑客和攻击的天下 中,基本的安全防备 是必不可少的。对于很多 平常 用户来说,大多数人只能是记住暗码 ,也大概 探求 到一个好程序去存储暗码 ,正如我们提示 这些用户不要在每个网站采用雷同 的暗码 。

在 Linux 上管理加密密钥的最佳体验在 Linux 上管理加密密钥的最佳体验

但是对于在各个 IT 范畴 的人们,我们必要 将这个变乱 进步 一个层面。我们必要 利用 像 SSH 密钥如许 的加密秘钥,而不只是暗码 。
假想 一个场景:我有一个运行在云上的服务器,用作我的主 git 库。我有很多台工作电脑,全部 这些电脑都必要 登录到这个中心 服务器去做 push 与 pull 操作。这里我设置 git 利用 SSH。当 git 利用 SSH 时,git 现实 上是以 SSH 的方式登录到服务器,就好像你通过 SSH 下令 打开一个服务器的下令 行一样。为了把这些设置 好,我在我的 .ssh 目次 下创建一个设置 文件,此中 包含一个有服务器名字、主机名、登任命 户、密钥文件路径等信息的主机项。之后我可以通过输入如下下令 来测试这个设置 是否准确 。

  1. ssh gitserver
复制代码

很快我就可以访问到服务器的 bash shell。如今 我可以设置 git 利用 雷同 设置 项以及存储的密钥来登录服务器。这很简单,只是有一个题目 :对于每一个我要用它登录服务器的电脑,我都必要 有一个密钥文件,那意味着必要 密钥文件会放在很多地方。我会在当前这台电脑上存储这些密钥文件,我的其他电脑也都必要 存储这些。就像那些有特别 多的暗码 的用户一样,我们这些 IT 职员 也被这些特别 多的密钥文件沉没 。怎么办呢?

清算

在我们开始帮助你管理密钥之前,你必要 有一些密钥应该怎么利用 的基础知识,以及明白 我们下面的提问的意义地点 。同时,有个条件 ,也是最告急 的,你应该知道你的公钥和私钥该放在那里 。然后假设你应该知道:

1.和私钥之间的差异;
2.么你不可以从公钥天生 私钥,但是反之则可以?
3.horized_keys文件的目的 以及内里 包含什么内容;
4.利用 私钥去登录一个你的对应公钥存储在其上的 authorized_keys文件中的服务器。

这里有一个例子。当你在亚马逊的网络服务上创建一个云服务器,你必须提供一个用于毗连 你的服务器的 SSH 密钥。每个密钥都有一个公开的部分(公钥)和私密的部分(私钥)。你要想让你的服务器安全,乍看之下你大概 应该将你的私钥放到服务器上,同时你本身 带着公钥。毕竟,你不想你的服务器被公开访问,对吗?但是现实 上的做法恰好 是相反的。

在 Linux 上管理加密密钥的最佳体验在 Linux 上管理加密密钥的最佳体验

你应该把本身 的公钥放到 AWS 服务器,同时你持有效 于登录服务器的私钥。你必要 保护好私钥,并让它处于你的控制之中,而不是放在一些长途 服务器上,正如上图中所示。

缘故原由 如下:假如 公钥被其他人知道了,它们不能用于登录服务器,由于 他们没有私钥。进一步说,假如 有人成功攻入你的服务器,他们所能找到的只是公钥,他们不可以从公钥天生 私钥。同时,假如 你在其他的服务器上利用 了雷同 的公钥,他们不可以利用 它去登录别的电脑。

这就是为什么你要把你本身 的公钥放到你的服务器上以便通过 SSH 登录这些服务器。你持有这些私钥,不要让这些私钥离开 你的控制。

但是还有一点贫困 。试想一下我 git 服务器的例子。我必要 做一些决议 。偶尔 我登录架设在别的地方的开发 服务器,而在开发 服务器上,我必要 毗连 我的 git 服务器。怎样 使我的开发 服务器毗连 git 服务器?显然是通过利用 私钥,但如许 就会有题目 。在该场景中,必要 我把私钥放置到一个架设在别的地方的服务器上,这相称 伤害 。

一个进一步的场景:假如 我要利用 一个密钥去登录很多 的服务器,怎么办?假如 一个入侵者得到这个私钥,这个人就能用这个私钥得到整个服务器网络的权限,这大概 带来一些严肃 的粉碎 ,这非常糟糕。

同时,这也带来了别的 一个题目 ,我真的应该在这些其他服务器上利用 雷同 的密钥吗?由于 我刚才形貌 的,那会非常伤害 的。

末了 ,这听起来有些混乱,但是确实有一些简单的办理 方案。让我们有条理地构造 一下。

(留意 ,除了登录服务器,还有很多地方必要 私钥密钥,但是我提出的这个场景可以向你展示当你利用 密钥时你所面临 的题目 。)

常规口令

当你创建你的密钥时,你可以选择是否包含一个密钥利用 时的口令。有了这个口令,私钥文件本身就会被口令所加密。比方 ,假如 你有一个公钥存储在服务器上,同时你利用 私钥去登录服务器的时间 ,你会被提示输入该口令。没有口令,这个密钥是无法利用 的。或者你也可以设置 你的密钥不必要 口令,然后只必要 密钥文件就可以登录服务器了。

在 Linux 上管理加密密钥的最佳体验在 Linux 上管理加密密钥的最佳体验

一样平常 来说,不利用 口令对于用户来说是更方便的,但是在很多环境 下我猛烈 建议利用 口令,缘故原由 是,假如 私钥文件被偷了,偷密钥的人仍然 不可以利用 它,除非他或者她可以找到口令。在理论上,这个将节流 你很多时间,由于 你可以在攻击者发现口令之前,从服务器上删除公钥文件,从而保护你的体系 。当然还有一些利用 口令的别的 缘故原由 ,但是在很多场合这个缘故原由 对我来说更有价值。(举一个例子,我的 Android 平板上有 VNC 软件。平板上有我的密钥。假如 我的平板被偷了之后,我会立即 从服务器上删除公钥,使得它的私钥没有作用,无论有没有口令。)但是在一些环境 下我不利用 口令,是由于 我正在登录的服务器上没有什么有价值的数据,这取决于情境。

服务器基础办法

你怎样 计划 本身 服务器的基础办法 将会影响到你怎样 管理你的密钥。比方 ,假如 你有很多用户登录,你将必要 决定每个用户是否必要 一个单独的密钥。(一样平常 来说,应该云云 ;你不会想在用户之间共享私钥。那样当一个用户离开 构造 或者失去信托 时,你可以删除谁人 用户的公钥,而不必要 必须给其他人天生 新的密钥。相似地,通过共享密钥,他们能以其他人的身份登录,这就更糟糕了。)但是别的 一个题目 是你怎样 设置 你的服务器。举例来说,你是否利用 像 Puppet 如许 工具设置 大量的服务器?你是否基于你本身 的镜像创建大量的服务器?当你复制你的服务器,是否每一个的密钥都一样?不同的云服务器软件答应 你设置 怎样 选择;你可以让这些服务器利用 雷同 的密钥,也可以给每一个服务器天生 一个新的密钥。

假如 你在操作这些复制的服务器,假如 用户必要 利用 不同的密钥登录两个不同但是大部分都一样的体系 ,它大概 导致混淆。但是另一方面,服务器共享雷同 的密钥会有安全风险。或者,第三,假如 你的密钥有除了登录之外的必要 (比如挂载加密的驱动),那么你会在很多地方必要 雷同 的密钥。正如你所看到的,你是否必要 在不同的服务器上利用 雷同 的密钥不是我能为你做的决定;这此中 有衡量 ,你必要 本身 去决定什么是最好的。

终极 ,你大概 会有:
1.登录的多个服务器
2.用户登录到不同的服务器,每个都有本身 的密钥
3.用户利用 多个密钥登录到不同的服务器

(假如 你正在别的环境 下利用 密钥,这个同样的普适理论也能应用于怎样 利用 密钥,必要 多少密钥,它们是否共享,你怎样 处理公私钥等方面。)

安全方法

相识 你的基础办法 和特有的环境 ,你必要 组合一个密钥管理方案,它会引导 你怎样 去分发和存储你的密钥。比如,正如我之条件 到的,假如 我的平板被偷了,我会从我服务器上删除公钥,我盼望 这在平板在用于访问服务器之前完成。同样的,我会在我的团体 计划中思量 以下内容:
1.可以放在移动装备 上,但是必须包含口令;
2.有一个可以快速地从服务器上删除公钥的方法。

在你的环境 中,你大概 决定你不想在本身 常常 登录的体系 上利用 口令;比如,这个体系 大概 是一个开发 者一天登录多次的测试机器。这没有题目 ,但是你必要 调整一点你的规则。你可以添加一条规则:不可以通过移动装备 登录该机器。换句话说,你必要 根据本身 的状态 构建你的准则,不要假设某个方案放之四海而皆准。

软件

至于软件,令人吃惊的是,现实 天下 中并没有很多好的、可靠的存储和管理私钥的软件办理 方案。但是应该有吗?思量 下这个,假如 你有一个程序存储你全部 服务器的全部密钥,并且这个程序被一个快捷的密钥锁住,那么你的密钥就真的安全了吗?或者类似 的,假如 你的密钥被放置在你的硬盘上,用于 SSH 程序快速访问,密钥管理软件是否真正提供了任何保护吗?

但是对于团体 基础办法 和创建/管理公钥来说,有很多 的办理 方案。我已经提到了 Puppet,在 Puppet 的天下 中,你可以创建模块以不同的方式管理你的服务器。这个想法是服务器是动态的,而且不必要 准确 地复制彼此。这里有一个聪明的方法,在不同的服务器上利用 雷同 的密钥,但是对于每一个用户利用 不同的 Puppet 模块。这个方案大概 得当 你,也大概 不得当 你。

或者,另一个选择就是完全换个不同的档位。在 Docker 的天下 中,你可以采取一个不同的方式,正如关于 SSH 和 Docker 博客所形貌 的那样。

在 Linux 上管理加密密钥的最佳体验在 Linux 上管理加密密钥的最佳体验

但是怎么样管理私钥?假如 你搜索 过的话,你无法找到很多可以选择的软件,缘故原由 我之条件 到过;私钥存放在你的硬盘上,一个管理软件大概 无法提到更多额外的安全。但是我利用 这种方法来管理我的密钥:

起首 ,我的 .ssh/config 文件中有很多的主机项。我要登录的都有一个主机项,但是偶尔 我对于一个单独的主机有不止一项。假如 我有很多登录方式,就会出现这种环境 。对于放置我的 git 库的服务器来说,我有两个不同的登录项;一个限定 于 git,另一个用于一样平常 用途的 bash 访问。这个为 git 设置的登录选项在机器上有极大的限定 。还记得我之前说的我存储在长途 开发 机器上的 git 密钥吗?好了。固然 这些密钥可以登录到我此中 一个服务器,但是利用 的账号是被严酷 限定 的。

其次,大部分的私钥都包含口令。(对于必要 多次输入口令的环境 ,思量 利用 ssh-agent。)

再次,我有一些我想要更加鉴戒 地保护的服务器,我不会把这些主机项放在我的 host 文件中。这更加靠近 于社会工程方面,密钥文件还在,但是大概 必要 攻击者花费更长的时间去找到这个密钥文件,分析出来它们对应的机器。在这种环境 下,我就必要 手动打出来一条长长的 SSH 下令 。(没那么可骇 。)

同时你可以看出来我没有利用 任何特别 的软件去管理这些私钥。

我们偶尔 会在 linux.com 收到一些题目 ,扣问 管理密钥的好软件的建议。但是退一步看,这个题目 毕竟 上必要 重新思考 ,由于 没有一个普适的办理 方案。你问的题目 应该基于你本身 的情况 。你是否简单地尝试找到一个位置去存储你的密钥文件?你是否探求 一个方法去管理多用户题目 ,此中 每个人都必要 将他们本身 的公钥插入到 authorized_keys文件中?

通过这篇文章,我已经席卷 了这方面的基础知识,盼望 到此你明白 怎样 管理你的密钥,并且,只有当你问出了准确 的题目 ,无论你探求 任何软件(乃至 你必要 别的 的软件),它都会出现。盼望 可以帮助到大家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 胖胖龙龙灯 | 2021-9-5 23:26:48 | 显示全部楼层
顶顶更健康!
回复

使用道具 举报

avatar ssg888 | 2021-9-9 03:43:36 | 显示全部楼层
收藏了,以后可能会用到!
回复

使用道具 举报

avatar 123457092 | 2021-9-12 23:18:43 | 显示全部楼层
帖子好乱!
回复

使用道具 举报

avatar wxf2017 | 2021-9-26 00:24:34 | 显示全部楼层
在哪里跌倒,就在那里多爬一会儿!
回复

使用道具 举报

avatar 波罗密心经 | 2021-9-26 20:03:58 | 显示全部楼层
大神就是大神,这么经典!
回复

使用道具 举报

avatar 幂倾城淮 | 2021-9-29 21:11:32 | 显示全部楼层
admin楼主很有艺术范!
回复

使用道具 举报

avatar yslzaity | 2021-10-2 01:02:36 | 显示全部楼层
每次看到admin楼主的帖子都有惊吓!
回复

使用道具 举报

avatar 素身素 | 2021-10-2 01:02:38 | 显示全部楼层
感觉不错!
回复

使用道具 举报

avatar 123457736 | 2021-10-15 21:44:08 | 显示全部楼层
楼上的真不讲道理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则