主頁 > 知識庫 > 在Linux上如何管理加密密鑰?管理加密密鑰的最佳體驗(yàn)

在Linux上如何管理加密密鑰?管理加密密鑰的最佳體驗(yàn)

熱門標(biāo)簽:服務(wù)器配置 電話機(jī)器人搭建 硅谷的囚徒呼叫中心 外呼系統(tǒng) 解決方案 百度競價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 家政服務(wù)網(wǎng)絡(luò) 美團(tuán)

存儲 SSH 的加密秘鑰和記住密碼一直是一個(gè)讓人頭疼的問題。但是不幸的是,在當(dāng)前這個(gè)充滿了惡意黑客和攻擊的世界中,基本的安全預(yù)防是必不可少的。對于許多普通用戶來說,大多數(shù)人只能是記住密碼,也可能尋找到一個(gè)好程序去存儲密碼,正如我們提醒這些用戶不要在每個(gè)網(wǎng)站采用相同的密碼。

但是對于在各個(gè) IT 領(lǐng)域的人們,我們需要將這個(gè)事情提高一個(gè)層面。我們需要使用像 SSH 密鑰這樣的加密秘鑰,而不只是密碼。
設(shè)想一個(gè)場景:我有一個(gè)運(yùn)行在云上的服務(wù)器,用作我的主 git 庫。我有很多臺工作電腦,所有這些電腦都需要登錄到這個(gè)中央服務(wù)器去做 push 與 pull 操作。這里我設(shè)置 git 使用 SSH。當(dāng) git 使用 SSH 時(shí),git 實(shí)際上是以 SSH 的方式登錄到服務(wù)器,就好像你通過 SSH 命令打開一個(gè)服務(wù)器的命令行一樣。為了把這些配置好,我在我的 .ssh 目錄下創(chuàng)建一個(gè)配置文件,其中包含一個(gè)有服務(wù)器名字、主機(jī)名、登錄用戶、密鑰文件路徑等信息的主機(jī)項(xiàng)。之后我可以通過輸入如下命令來測試這個(gè)配置是否正確。

ssh gitserver

很快我就可以訪問到服務(wù)器的 bash shell?,F(xiàn)在我可以配置 git 使用相同配置項(xiàng)以及存儲的密鑰來登錄服務(wù)器。這很簡單,只是有一個(gè)問題:對于每一個(gè)我要用它登錄服務(wù)器的電腦,我都需要有一個(gè)密鑰文件,那意味著需要密鑰文件會放在很多地方。我會在當(dāng)前這臺電腦上存儲這些密鑰文件,我的其他電腦也都需要存儲這些。就像那些有特別多的密碼的用戶一樣,我們這些 IT 人員也被這些特別多的密鑰文件淹沒。怎么辦呢?

清理

在我們開始幫助你管理密鑰之前,你需要有一些密鑰應(yīng)該怎么使用的基礎(chǔ)知識,以及明白我們下面的提問的意義所在。同時(shí),有個(gè)前提,也是最重要的,你應(yīng)該知道你的公鑰和私鑰該放在哪里。然后假設(shè)你應(yīng)該知道:

1.和私鑰之間的差異;
2.么你不可以從公鑰生成私鑰,但是反之則可以?
3.horized_keys文件的目的以及里面包含什么內(nèi)容;
4.使用私鑰去登錄一個(gè)你的對應(yīng)公鑰存儲在其上的 authorized_keys文件中的服務(wù)器。

這里有一個(gè)例子。當(dāng)你在亞馬遜的網(wǎng)絡(luò)服務(wù)上創(chuàng)建一個(gè)云服務(wù)器,你必須提供一個(gè)用于連接你的服務(wù)器的 SSH 密鑰。每個(gè)密鑰都有一個(gè)公開的部分(公鑰)和私密的部分(私鑰)。你要想讓你的服務(wù)器安全,乍看之下你可能應(yīng)該將你的私鑰放到服務(wù)器上,同時(shí)你自己帶著公鑰。畢竟,你不想你的服務(wù)器被公開訪問,對嗎?但是實(shí)際上的做法正好是相反的。

你應(yīng)該把自己的公鑰放到 AWS 服務(wù)器,同時(shí)你持有用于登錄服務(wù)器的私鑰。你需要保護(hù)好私鑰,并讓它處于你的控制之中,而不是放在一些遠(yuǎn)程服務(wù)器上,正如上圖中所示。

原因如下:如果公鑰被其他人知道了,它們不能用于登錄服務(wù)器,因?yàn)樗麄儧]有私鑰。進(jìn)一步說,如果有人成功攻入你的服務(wù)器,他們所能找到的只是公鑰,他們不可以從公鑰生成私鑰。同時(shí),如果你在其他的服務(wù)器上使用了相同的公鑰,他們不可以使用它去登錄別的電腦。

這就是為什么你要把你自己的公鑰放到你的服務(wù)器上以便通過 SSH 登錄這些服務(wù)器。你持有這些私鑰,不要讓這些私鑰脫離你的控制。

但是還有一點(diǎn)麻煩。試想一下我 git 服務(wù)器的例子。我需要做一些抉擇。有時(shí)我登錄架設(shè)在別的地方的開發(fā)服務(wù)器,而在開發(fā)服務(wù)器上,我需要連接我的 git 服務(wù)器。如何使我的開發(fā)服務(wù)器連接 git 服務(wù)器?顯然是通過使用私鑰,但這樣就會有問題。在該場景中,需要我把私鑰放置到一個(gè)架設(shè)在別的地方的服務(wù)器上,這相當(dāng)危險(xiǎn)。

一個(gè)進(jìn)一步的場景:如果我要使用一個(gè)密鑰去登錄許多的服務(wù)器,怎么辦?如果一個(gè)入侵者得到這個(gè)私鑰,這個(gè)人就能用這個(gè)私鑰得到整個(gè)服務(wù)器網(wǎng)絡(luò)的權(quán)限,這可能帶來一些嚴(yán)重的破壞,這非常糟糕。

同時(shí),這也帶來了另外一個(gè)問題,我真的應(yīng)該在這些其他服務(wù)器上使用相同的密鑰嗎?因?yàn)槲覄偛琶枋龅?,那會非常危險(xiǎn)的。

最后,這聽起來有些混亂,但是確實(shí)有一些簡單的解決方案。讓我們有條理地組織一下。

(注意,除了登錄服務(wù)器,還有很多地方需要私鑰密鑰,但是我提出的這個(gè)場景可以向你展示當(dāng)你使用密鑰時(shí)你所面對的問題。)

常規(guī)口令

當(dāng)你創(chuàng)建你的密鑰時(shí),你可以選擇是否包含一個(gè)密鑰使用時(shí)的口令。有了這個(gè)口令,私鑰文件本身就會被口令所加密。例如,如果你有一個(gè)公鑰存儲在服務(wù)器上,同時(shí)你使用私鑰去登錄服務(wù)器的時(shí)候,你會被提示輸入該口令。沒有口令,這個(gè)密鑰是無法使用的?;蛘吣阋部梢耘渲媚愕拿荑€不需要口令,然后只需要密鑰文件就可以登錄服務(wù)器了。

一般來說,不使用口令對于用戶來說是更方便的,但是在很多情況下我強(qiáng)烈建議使用口令,原因是,如果私鑰文件被偷了,偷密鑰的人仍然不可以使用它,除非他或者她可以找到口令。在理論上,這個(gè)將節(jié)省你很多時(shí)間,因?yàn)槟憧梢栽诠粽甙l(fā)現(xiàn)口令之前,從服務(wù)器上刪除公鑰文件,從而保護(hù)你的系統(tǒng)。當(dāng)然還有一些使用口令的其它原因,但是在很多場合這個(gè)原因?qū)ξ襾碚f更有價(jià)值。(舉一個(gè)例子,我的 Android 平板上有 VNC 軟件。平板上有我的密鑰。如果我的平板被偷了之后,我會馬上從服務(wù)器上刪除公鑰,使得它的私鑰沒有作用,無論有沒有口令。)但是在一些情況下我不使用口令,是因?yàn)槲艺诘卿浀姆?wù)器上沒有什么有價(jià)值的數(shù)據(jù),這取決于情境。

服務(wù)器基礎(chǔ)設(shè)施

你如何設(shè)計(jì)自己服務(wù)器的基礎(chǔ)設(shè)施將會影響到你如何管理你的密鑰。例如,如果你有很多用戶登錄,你將需要決定每個(gè)用戶是否需要一個(gè)單獨(dú)的密鑰。(一般來說,應(yīng)該如此;你不會想在用戶之間共享私鑰。那樣當(dāng)一個(gè)用戶離開組織或者失去信任時(shí),你可以刪除那個(gè)用戶的公鑰,而不需要必須給其他人生成新的密鑰。相似地,通過共享密鑰,他們能以其他人的身份登錄,這就更糟糕了。)但是另外一個(gè)問題是你如何配置你的服務(wù)器。舉例來說,你是否使用像 Puppet 這樣工具配置大量的服務(wù)器?你是否基于你自己的鏡像創(chuàng)建大量的服務(wù)器?當(dāng)你復(fù)制你的服務(wù)器,是否每一個(gè)的密鑰都一樣?不同的云服務(wù)器軟件允許你配置如何選擇;你可以讓這些服務(wù)器使用相同的密鑰,也可以給每一個(gè)服務(wù)器生成一個(gè)新的密鑰。

如果你在操作這些復(fù)制的服務(wù)器,如果用戶需要使用不同的密鑰登錄兩個(gè)不同但是大部分都一樣的系統(tǒng),它可能導(dǎo)致混淆。但是另一方面,服務(wù)器共享相同的密鑰會有安全風(fēng)險(xiǎn)。或者,第三,如果你的密鑰有除了登錄之外的需要(比如掛載加密的驅(qū)動),那么你會在很多地方需要相同的密鑰。正如你所看到的,你是否需要在不同的服務(wù)器上使用相同的密鑰不是我能為你做的決定;這其中有權(quán)衡,你需要自己去決定什么是最好的。

最終,你可能會有:
1.登錄的多個(gè)服務(wù)器
2.用戶登錄到不同的服務(wù)器,每個(gè)都有自己的密鑰
3.用戶使用多個(gè)密鑰登錄到不同的服務(wù)器

(如果你正在別的情況下使用密鑰,這個(gè)同樣的普適理論也能應(yīng)用于如何使用密鑰,需要多少密鑰,它們是否共享,你如何處理公私鑰等方面。)

安全方法

了解你的基礎(chǔ)設(shè)施和特有的情況,你需要組合一個(gè)密鑰管理方案,它會指導(dǎo)你如何去分發(fā)和存儲你的密鑰。比如,正如我之前提到的,如果我的平板被偷了,我會從我服務(wù)器上刪除公鑰,我希望這在平板在用于訪問服務(wù)器之前完成。同樣的,我會在我的整體計(jì)劃中考慮以下內(nèi)容:
1.可以放在移動設(shè)備上,但是必須包含口令;
2.有一個(gè)可以快速地從服務(wù)器上刪除公鑰的方法。

在你的情況中,你可能決定你不想在自己經(jīng)常登錄的系統(tǒng)上使用口令;比如,這個(gè)系統(tǒng)可能是一個(gè)開發(fā)者一天登錄多次的測試機(jī)器。這沒有問題,但是你需要調(diào)整一點(diǎn)你的規(guī)則。你可以添加一條規(guī)則:不可以通過移動設(shè)備登錄該機(jī)器。換句話說,你需要根據(jù)自己的狀況構(gòu)建你的準(zhǔn)則,不要假設(shè)某個(gè)方案放之四海而皆準(zhǔn)。

軟件

至于軟件,令人吃驚的是,現(xiàn)實(shí)世界中并沒有很多好的、可靠的存儲和管理私鑰的軟件解決方案。但是應(yīng)該有嗎?考慮下這個(gè),如果你有一個(gè)程序存儲你所有服務(wù)器的全部密鑰,并且這個(gè)程序被一個(gè)快捷的密鑰鎖住,那么你的密鑰就真的安全了嗎?或者類似的,如果你的密鑰被放置在你的硬盤上,用于 SSH 程序快速訪問,密鑰管理軟件是否真正提供了任何保護(hù)嗎?

但是對于整體基礎(chǔ)設(shè)施和創(chuàng)建/管理公鑰來說,有許多的解決方案。我已經(jīng)提到了 Puppet,在 Puppet 的世界中,你可以創(chuàng)建模塊以不同的方式管理你的服務(wù)器。這個(gè)想法是服務(wù)器是動態(tài)的,而且不需要精確地復(fù)制彼此。這里有一個(gè)聰明的方法,在不同的服務(wù)器上使用相同的密鑰,但是對于每一個(gè)用戶使用不同的 Puppet 模塊。這個(gè)方案可能適合你,也可能不適合你。

或者,另一個(gè)選擇就是完全換個(gè)不同的檔位。在 Docker 的世界中,你可以采取一個(gè)不同的方式,正如關(guān)于 SSH 和 Docker 博客所描述的那樣。

但是怎么樣管理私鑰?如果你搜索過的話,你無法找到很多可以選擇的軟件,原因我之前提到過;私鑰存放在你的硬盤上,一個(gè)管理軟件可能無法提到更多額外的安全。但是我使用這種方法來管理我的密鑰:

首先,我的 .ssh/config 文件中有很多的主機(jī)項(xiàng)。我要登錄的都有一個(gè)主機(jī)項(xiàng),但是有時(shí)我對于一個(gè)單獨(dú)的主機(jī)有不止一項(xiàng)。如果我有很多登錄方式,就會出現(xiàn)這種情況。對于放置我的 git 庫的服務(wù)器來說,我有兩個(gè)不同的登錄項(xiàng);一個(gè)限制于 git,另一個(gè)用于一般用途的 bash 訪問。這個(gè)為 git 設(shè)置的登錄選項(xiàng)在機(jī)器上有極大的限制。還記得我之前說的我存儲在遠(yuǎn)程開發(fā)機(jī)器上的 git 密鑰嗎?好了。雖然這些密鑰可以登錄到我其中一個(gè)服務(wù)器,但是使用的賬號是被嚴(yán)格限制的。

其次,大部分的私鑰都包含口令。(對于需要多次輸入口令的情況,考慮使用 ssh-agent。)

再次,我有一些我想要更加小心地保護(hù)的服務(wù)器,我不會把這些主機(jī)項(xiàng)放在我的 host 文件中。這更加接近于社會工程方面,密鑰文件還在,但是可能需要攻擊者花費(fèi)更長的時(shí)間去找到這個(gè)密鑰文件,分析出來它們對應(yīng)的機(jī)器。在這種情況下,我就需要手動打出來一條長長的 SSH 命令。(沒那么可怕。)

同時(shí)你可以看出來我沒有使用任何特別的軟件去管理這些私鑰。

我們偶爾會在 linux.com 收到一些問題,詢問管理密鑰的好軟件的建議。但是退一步看,這個(gè)問題事實(shí)上需要重新思考,因?yàn)闆]有一個(gè)普適的解決方案。你問的問題應(yīng)該基于你自己的情景。你是否簡單地嘗試找到一個(gè)位置去存儲你的密鑰文件?你是否尋找一個(gè)方法去管理多用戶問題,其中每個(gè)人都需要將他們自己的公鑰插入到 authorized_keys文件中?

通過這篇文章,我已經(jīng)囊括了這方面的基礎(chǔ)知識,希望到此你明白如何管理你的密鑰,并且,只有當(dāng)你問出了正確的問題,無論你尋找任何軟件(甚至你需要另外的軟件),它都會出現(xiàn)。希望可以幫助到大家!

標(biāo)簽:撫州 北海 臨沂 南昌 防城港 韶關(guān) 邢臺 烏蘭察布

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在Linux上如何管理加密密鑰?管理加密密鑰的最佳體驗(yàn)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266