《Linux 工作站安全檢查清單》 - 來自 Linux 基金會內部
目標受眾
這是一套 Linux 基金會為其系統管理員提供的推薦規范。
這個文檔用于幫助那些使用 Linux 工作站來訪問和管理項目的 IT 設施的系統管理員團隊。
如果你的系統管理員是遠程員工,你也許可以使用這套指導方針確保系統管理員的系統可以通過核心安全需求,降低你的IT 平臺成為攻擊目標的風險。
即使你的系統管理員不是遠程員工,很多人也會在工作環境中通過便攜筆記本完成工作,或者在家中設置系統以便在業余時間或緊急時刻訪問工作平臺。不論發生何種情況,你都能調整這個推薦規范來適應你的環境。
限制
但是,這并不是一個詳細的“工作站加固”文檔,可以說這是一個努力避免大多數明顯安全錯誤而不會導致太多不便的一組推薦 基線 。你也許閱讀這個文檔后會認為它的方法太偏執,而另一些人也許會認為這僅僅是一些膚淺的研究。安全就像在高速公路上開車 -- 任何比你開的慢的都是一個傻瓜,然而任何比你開的快的人都是瘋子。這個指南僅僅是一些列核心安全規則,既不詳細又不能替代經驗、警惕和常識。
我們分享這篇文檔是為了 將開源協作的優勢帶到 IT 策略文獻資料中 。如果你發現它有用,我們希望你可以將它用到你自己團體中,并分享你的改進,對它的完善做出你的貢獻。
結構
每一節都分為兩個部分:
- 核對適合你項目的需求
- 形式不定的提示內容,解釋了為什么這么做
嚴重級別
在清單的每一個項目都包括嚴重級別,我們希望這些能幫助指導你的決定:
- 關鍵(ESSENTIAL) 該項應該在考慮列表上被明確的重視。如果不采取措施,將會導致你的平臺安全出現高風險。
- 中等(NICE) 該項將改善你的安全形勢,但是會影響到你的工作環境的流程,可能會要求養成新的習慣,改掉舊的習慣。
- 低等(PARANOID) 留作感覺會明顯完善我們平臺安全、但是可能會需要大量調整與操作系統交互的方式的項目。
記住,這些只是參考。如果你覺得這些嚴重級別不能反映你的工程對安全的承諾,你應該調整它們為你所合適的。
選擇正確的硬件
我們并不會要求管理員使用一個特殊供應商或者一個特殊的型號,所以這一節提供的是選擇工作系統時的核心注意事項。
檢查清單
- [ ] 系統支持 安全啟動 (關鍵)
- [ ] 系統沒有 火線 , 雷電 或者 擴展卡 接口 (中等)
- [ ] 系統有 TPM 芯片 (中等)
注意事項
安全啟動
盡管它還有爭議,但是安全引導能夠預防很多針對工作站的攻擊(Rootkits、“Evil Maid”,等等),而沒有太多額外的麻煩。它并不能阻止真正專門的攻擊者,加上在很大程度上,國家安全機構有辦法應對它(可能是通過設計),但是有安全引導總比什么都沒有強。
作為選擇,你也許可以部署 Anti Evil Maid 提供更多健全的保護,以對抗安全引導所需要阻止的攻擊類型,但是它需要更多部署和維護的工作。
系統沒有 火線 , 雷電 或者 擴展卡 接口
火線是一個標準,其設計上允許任何連接的設備能夠完全地直接訪問你的系統內存(參見 維基百科 )。雷電接口和擴展卡同樣有問題,雖然一些后來部署的雷電接口試圖限制內存訪問的范圍。如果你沒有這些系統端口,那是最好的,但是它并不嚴重,它們通常可以通過 UEFI 關閉或內核本身禁用。
TPM 芯片
可信平臺模塊 是主板上的一個與核心處理器單獨分開的加密芯片,它可以用來增加平臺的安全性(比如存儲全盤加密的密鑰),不過通常不會用于日常的平臺操作。充其量,這個是一個有則更好的東西,除非你有特殊需求,需要使用 TPM 增加你的工作站安全性。
預引導環境
這是你開始安裝操作系統前的一系列推薦規范。
檢查清單
- [ ] 使用 UEFI 引導模式(不是傳統 BIOS) (關鍵)
- [ ] 進入 UEFI 配置需要使用密碼 (關鍵)
- [ ] 使用安全引導 (關鍵)
- [ ] 啟動系統需要 UEFI 級別密碼 (中等)
注意事項
UEFI 和安全引導
UEFI 盡管有缺點,還是提供了很多傳統 BIOS 沒有的好功能,比如安全引導。大多數現代的系統都默認使用 UEFI 模式。
確保進入 UEFI 配置模式要使用高強度密碼。注意,很多廠商默默地限制了你使用密碼長度,所以相比長口令你也許應該選擇高熵值的短密碼(關于密碼短語請參考下面內容)。
基于你選擇的 Linux 發行版,你也許需要、也許不需要按照 UEFI 的要求,來導入你的發行版的安全引導密鑰,從而允許你啟動該發行版。很多發行版已經與微軟合作,用大多數廠商所支持的密鑰給它們已發布的內核簽名,因此避免了你必須處理密鑰導入的麻煩。
作為一個額外的措施,在允許某人訪問引導分區然后嘗試做一些不好的事之前,讓他們輸入密碼。為了防止 肩窺 ,這個密碼應該跟你的 UEFI 管理密碼不同。如果你經常關閉和啟動,你也許不想這么麻煩,因為你已經必須輸入 LUKS 密碼了(LUKS 參見下面內容),這樣會讓你您減少一些額外的鍵盤輸入。
發行版選擇注意事項
很有可能你會堅持一個廣泛使用的發行版如 Fedora,Ubuntu,Arch,Debian,或它們的一個類似發行版。無論如何,以下是你選擇使用發行版應該考慮的。
檢查清單
- [ ] 擁有一個強健的 MAC/RBAC 系統(SELinux/AppArmor/Grsecurity) (關鍵)
- [ ] 發布安全公告 (關鍵)
- [ ] 提供及時的安全補丁 (關鍵)
- [ ] 提供軟件包的加密驗證 (關鍵)
- [ ] 完全支持 UEFI 和安全引導 (關鍵)
- [ ] 擁有健壯的原生全磁盤加密支持 (關鍵)
注意事項
SELinux,AppArmor,和 GrSecurity/PaX
強制訪問控制 或者 基于角色的訪問控制 是一個用在老式 POSIX 系統的基于用戶或組的安全機制擴展。現在大多數發行版已經捆綁了 MAC/RBAC 系統(Fedora,Ubuntu),或通過提供一種機制一個可選的安裝后步驟來添加它(Gentoo,Arch,Debian)。顯然,強烈建議您選擇 一個預裝 MAC/RBAC 系統的發行版,但是如果你對某個沒有默認啟用它的發行版情有獨鐘,裝完系統后應計劃配置安裝它。
應該堅決避免使用不帶任何 MAC/RBAC 機制的發行版,像傳統的 POSIX 基于用戶和組的安全在當今時代應該算是考慮不足。如果你想建立一個 MAC/RBAC 工作站,通常認為 AppArmor 和 PaX 比 SELinux 更容易掌握。此外,在工作站上,很少有或者根本沒有對外監聽的守護進程,而針對用戶運行的應用造成的最高風險,GrSecurity/PaX 可能 會比SELinux 提供更多的安全便利。
發行版安全公告
大多數廣泛使用的發行版都有一個給它們的用戶發送安全公告的機制,但是如果你對一些機密感興趣,去看看開發人員是否有見于文檔的提醒用戶安全漏洞和補丁的機制。缺乏這樣的機制是一個重要的警告信號,說明這個發行版不夠成熟,不能被用作主要管理員的工作站。
及時和可靠的安全更新
多數常用的發行版提供定期安全更新,但應該經常檢查以確保及時提供關鍵包更新。因此應避免使用 附屬發行版 和“社區重構”,因為它們必須等待上游發行版先發布,它們經常延遲發布安全更新。
現在,很難找到一個不使用加密簽名、更新元數據或二者都不使用的發行版。如此說來,常用的發行版在引入這個基本安全機制就已經知道這些很多年了(Arch,說你呢),所以這也是值得檢查的。
發行版支持 UEFI 和安全引導
檢查發行版是否支持 UEFI 和安全引導。查明它是否需要導入額外的密鑰或是否要求啟動內核有一個已經被系統廠商信任的密鑰簽名(例如跟微軟達成合作)。一些發行版不支持 UEFI 或安全啟動,但是提供了替代品來確保 防篡改 或 防破壞 引導環境( Qubes-OS 使用 Anti Evil Maid,前面提到的)。如果一個發行版不支持安全引導,也沒有防止引導級別攻擊的機制,還是看看別的吧。
全磁盤加密
全磁盤加密是保護靜止數據的要求,大多數發行版都支持。作為一個選擇方案,帶有自加密硬盤的系統也可以用(通常通過主板 TPM 芯片實現),并提供了類似安全級別而且操作更快,但是花費也更高。
發行版安裝指南
所有發行版都是不同的,但是也有一些一般原則:
檢查清單
- [ ] 使用健壯的密碼全磁盤加密(LUKS) (關鍵)
- [ ] 確保交換分區也加密了 (關鍵)
- [ ] 確保引導程序設置了密碼(可以和LUKS一樣) (關鍵)
- [ ] 設置健壯的 root 密碼(可以和LUKS一樣) (關鍵)
- [ ] 使用無特權賬戶登錄,作為管理員組的一部分 (關鍵)
- [ ] 設置健壯的用戶登錄密碼,不同于 root 密碼 (關鍵)
注意事項
全磁盤加密
除非你正在使用自加密硬盤,配置你的安裝程序完整地加密所有存儲你的數據與系統文件的磁盤很重要。簡單地通過自動掛載的 cryptfs 環 文件加密用戶目錄還不夠(說你呢,舊版 Ubuntu),這并沒有給系統二進制文件或交換分區提供保護,它可能包含大量的敏感數據。推薦的加密策略是加密 LVM 設備,以便在啟動過程中只需要一個密碼。
/boot
分區將一直保持非加密,因為引導程序需要在調用 LUKS/dm-crypt 前能引導內核自身。一些發行版支持加密的 /boot
分區,比如 Arch ,可能別的發行版也支持,但是似乎這樣增加了系統更新的復雜度。如果你的發行版并沒有原生支持加密 /boot
也不用太在意,內核鏡像本身并沒有什么隱私數據,它會通過安全引導的加密簽名檢查來防止被篡改。
選擇一個好密碼
現代的 Linux 系統沒有限制密碼口令長度,所以唯一的限制是你的偏執和倔強。如果你要啟動你的系統,你將大概至少要輸入兩個不同的密碼:一個解鎖 LUKS ,另一個登錄,所以長密碼將會使你老的更快。最好從豐富或混合的詞匯中選擇2-3個單詞長度,容易輸入的密碼。
優秀密碼例子(是的,你可以使用空格):
- nature abhors roombas
- 12 in-flight Jebediahs
- perdon, tengo flatulence
如果你喜歡輸入可以在公開場合和你生活中能見到的句子,比如:
- Mary had a little lamb
- you're a wizard, Harry
- to infinity and beyond
如果你愿意的話,你也應該帶上最少要 10-12個字符長度的非詞匯的密碼。
除非你擔心物理安全,你可以寫下你的密碼,并保存在一個遠離你辦公桌的安全的地方。
Root,用戶密碼和管理組
我們建議,你的 root 密碼和你的 LUKS 加密使用同樣的密碼(除非你共享你的筆記本給信任的人,讓他應該能解鎖設備,但是不應該能成為 root 用戶)。如果你是筆記本電腦的唯一用戶,那么你的 root 密碼與你的 LUKS 密碼不同是沒有安全優勢上的意義的。通常,你可以使用同樣的密碼在你的 UEFI 管理,磁盤加密,和 root 登錄中 -- 知道這些任意一個都會讓攻擊者完全控制您的系統,在單用戶工作站上使這些密碼不同,沒有任何安全益處。
你應該有一個不同的,但同樣強健的常規用戶帳戶密碼用來日常工作。這個用戶應該是管理組用戶(例如 wheel
或者類似,根據發行版不同),允許你執行 sudo
來提升權限。
換句話說,如果在你的工作站只有你一個用戶,你應該有兩個獨特的、 強健 而 強壯 的密碼需要記住:
管理級別,用在以下方面:
- UEFI 管理
- 引導程序(GRUB)
- 磁盤加密(LUKS)
- 工作站管理(root 用戶)
用戶級別,用在以下:
- 用戶登錄和 sudo
- 密碼管理器的主密碼
很明顯,如果有一個令人信服的理由的話,它們全都可以不同。
安裝后的加固
安裝后的安全加固在很大程度上取決于你選擇的發行版,所以在一個像這樣的通用文檔中提供詳細說明是徒勞的。然而,這里有一些你應該采取的步驟:
檢查清單
- [ ] 在全局范圍內禁用火線和雷電模塊 (關鍵)
- [ ] 檢查你的防火墻,確保過濾所有傳入端口 (關鍵)
- [ ] 確保 root 郵件轉發到一個你可以收到的賬戶 (關鍵)
- [ ] 建立一個系統自動更新任務,或更新提醒 (中等)
- [ ] 檢查以確保 sshd 服務默認情況下是禁用的 (中等)
- [ ] 配置屏幕保護程序在一段時間的不活動后自動鎖定 (中等)
- [ ] 設置 logwatch (中等)
- [ ] 安裝使用 rkhunter (中等)
- [ ] 安裝一個 入侵檢測系統 (中等)
注意事項
將模塊列入黑名單
將火線和雷電模塊列入黑名單,增加一行到 /etc/modprobe.d/blacklist-dma.conf
文件:
blacklist firewire-core
blacklist thunderbolt
重啟后的這些模塊將被列入黑名單。這樣做是無害的,即使你沒有這些端口(但也不做任何事)。
Root 郵件
默認的 root 郵件只是存儲在系統基本上沒人讀過。確保你設置了你的 /etc/aliases
來轉發 root 郵件到你確實能讀取的郵箱,否則你也許錯過了重要的系統通知和報告:
# Person who should get root's mail root: bob@example.com
編輯后這些后運行 newaliases
,然后測試它確保能投遞到,像一些郵件供應商將拒絕來自不存在的域名或者不可達的域名的郵件。如果是這個原因,你需要配置郵件轉發直到確實可用。
防火墻,sshd,和監聽進程
默認的防火墻設置將取決于您的發行版,但是大多數都允許 sshd
端口連入。除非你有一個令人信服的合理理由允許連入 ssh,你應該過濾掉它,并禁用 sshd 守護進程。
systemctl disable sshd.service
systemctl stop sshd.service
如果你需要使用它,你也可以臨時啟動它。
通常,你的系統不應該有任何偵聽端口,除了響應 ping 之外。這將有助于你對抗網絡級的零日漏洞利用。
自動更新或通知
建議打開自動更新,除非你有一個非常好的理由不這么做,如果擔心自動更新將使您的系統無法使用(以前發生過,所以這種擔心并非杞人憂天)。至少,你應該啟用自動通知可用的更新。大多數發行版已經有這個服務自動運行,所以你不需要做任何事。查閱你的發行版文檔了解更多。
你應該盡快應用所有明顯的勘誤,即使這些不是特別貼上“安全更新”或有關聯的 CVE 編號。所有的問題都有潛在的安全漏洞和新的錯誤,比起停留在舊的、已知的問題上,未知問題通常是更安全的策略。
監控日志
你應該會對你的系統上發生了什么很感興趣。出于這個原因,你應該安裝 logwatch
然后配置它每夜發送在你的系統上發生的任何事情的活動報告。這不會預防一個專業的攻擊者,但是一個不錯的安全網絡功能。
注意,許多 systemd 發行版將不再自動安裝一個“logwatch”所需的 syslog 服務(因為 systemd 會放到它自己的日志中),所以你需要安裝和啟用“rsyslog”來確保在使用 logwatch 之前你的 /var/log 不是空的。
Rkhunter 和 IDS
安裝 rkhunter
和一個類似 aide
或者 tripwire
入侵檢測系統(IDS)并不是那么有用,除非你確實理解它們如何工作,并采取必要的步驟來設置正確(例如,保證數據庫在外部介質,從可信的環境運行檢測, 記住執行系統更新和配置更改后要刷新散列數據庫,等等)。如果你不愿在你的工作站執行這些步驟,并調整你如何工作的方式,這些工具只能帶來麻煩而沒有任何 實在的安全益處。
我們建議你安裝 rkhunter
并每晚運行它。它相當易于學習和使用,雖然它不會阻止一個復雜的攻擊者,它也能幫助你捕獲你自己的錯誤。
個人工作站備份
工作站備份往往被忽視,或偶爾才做一次,這常常是不安全的方式。
檢查清單
- [ ] 設置加密備份工作站到外部存儲 (關鍵)
- [ ] 使用 零認知 備份工具備份到站外或云上 (中等)
注意事項
全加密的備份存到外部存儲
把全部備份放到一個移動磁盤中比較方便,不用擔心帶寬和上行網速(在這個時代,大多數供應商仍然提供顯著的不對稱的上傳/下載速度)。不用說,這個移動硬盤本身需要加密(再說一次,通過 LUKS),或者你應該使用一個備份工具建立加密備份,例如 duplicity
或者它的 GUI 版本 deja-dup
。我建議使用后者并使用隨機生成的密碼,保存到離線的安全地方。如果你帶上筆記本去旅行,把這個磁盤留在家,以防你的筆記本丟失或被竊時可以找回備份。
除了你的家目錄外,你還應該備份 /etc
目錄和出于取證目的的 /var/log
目錄。
尤其重要的是,避免拷貝你的家目錄到任何非加密存儲上,即使是需要快速的在兩個系統上移動文件時,一旦完成你肯定會忘了清除它,從而暴露個人隱私或者安全信息到監聽者手中 -- 尤其是把這個存儲介質跟你的筆記本放到同一個包里。
有選擇的零認知站外備份
站外備份 也是相當重要的,是否可以做到要么需要你的老板提供空間,要么找一家云服務商。你可以建一個單獨的 duplicity/deja-dup 配置,只包括重要的文件,以免傳輸大量你不想備份的數據(網絡緩存、音樂、下載等等)。
作為選擇,你可以使用 零認知 備份工具,例如 SpiderOak ,它提供一個卓越的 Linux GUI工具還有更多的實用特性,例如在多個系統或平臺間同步內容。
最佳實踐
下面是我們認為你應該采用的最佳實踐列表。它當然不是非常詳細的,而是試圖提供實用的建議,來做到可行的整體安全性和可用性之間的平衡。
瀏覽
毫無疑問, web 瀏覽器將是你的系統上最大、最容易暴露的面臨攻擊的軟件。它是專門下載和執行不可信、甚至是惡意代碼的一個工具。它試圖采用沙箱和 代碼清潔 等多種機制保護你免受這種危險,但是在之前它們都被擊敗了多次。你應該知道,在任何時候瀏覽網站都是你做的最不安全的活動。
有幾種方法可以減少瀏覽器的影響,但這些真實有效的方法需要你明顯改變操作您的工作站的方式。
1: 使用兩個不同的瀏覽器 (關鍵)
這很容易做到,但是只有很少的安全效益。并不是所有瀏覽器都可以讓攻擊者完全自由訪問您的系統 -- 有時它們只能允許某人讀取本地瀏覽器存儲,竊取其它標簽的活動會話,捕獲瀏覽器的輸入等。使用兩個不同的瀏覽器,一個用在工作/高安全站點,另一個用在其 它方面,有助于防止攻擊者請求整個 cookie 存儲的小問題。主要的不便是兩個不同的瀏覽器會消耗大量內存。
我們建議:
火狐用來訪問工作和高安全站點
使用火狐登錄工作有關的站點,應該額外關心的是確保數據如 cookies,會話,登錄信息,擊鍵等等,明顯不應該落入攻擊者手中。除了少數的幾個網站,你不應該用這個瀏覽器訪問其它網站。
你應該安裝下面的火狐擴展:
-
[ ] NoScript (關鍵)
- NoScript 阻止活動內容加載,除非是在用戶白名單里的域名。如果用于默認瀏覽器它會很麻煩(可是提供了真正好的安全效益),所以我們建議只在訪問與工作相關的網站的瀏覽器上開啟它。
-
[ ] Privacy Badger (關鍵)
- EFF 的 Privacy Badger 將在頁面加載時阻止大多數外部追蹤器和廣告平臺,有助于在這些追蹤站點影響你的瀏覽器時避免跪了(追蹤器和廣告站點通常會成為攻擊者的目標,因為它們能會迅速影響世界各地成千上萬的系統)。
-
[ ] HTTPS Everywhere (關鍵)
- 這個 EFF 開發的擴展將確保你訪問的大多數站點都使用安全連接,甚至你點擊的連接使用的是 http://(可以有效的避免大多數的攻擊,例如 SSL-strip )。
-
[ ] Certificate Patrol (中等)
- 如果你正在訪問的站點最近改變了它們的 TLS 證書,這個工具將會警告你 -- 特別是如果不是接近失效期或者現在使用不同的證書頒發機構。它有助于警告你是否有人正嘗試中間人攻擊你的連接,不過它會產生很多誤報。
你應該讓火狐成為你打開連接時的默認瀏覽器,因為 NoScript 將在加載或者執行時阻止大多數活動內容。
其它一切都用 Chrome/Chromium
Chromium 開發者在增加很多很好的安全特性方面走在了火狐前面(至少 在 Linux 上 ),例如 seccomp 沙箱,內核用戶空間等等,這會成為一個你訪問的網站與你其它系統之間的額外隔離層。Chromium 是上游開源項目,Chrome 是 Google 基于它構建的專有二進制包(加一句偏執的提醒,如果你有任何不想讓谷歌知道的事情都不要使用它)。
推薦你在 Chrome 上也安裝 Privacy Badger 和 HTTPS Everywhere 擴展,然后給它一個與火狐不同的主題,以讓它告訴你這是你的“不可信站點”瀏覽器。
2: 使用兩個不同瀏覽器,一個在專用的虛擬機里 (中等)
這有點像上面建議的做法,除了您將添加一個通過快速訪問協議運行在專用虛擬機內部 Chrome 的額外步驟,它允許你共享剪貼板和轉發聲音事件(如,Spice 或 RDP)。這將在不可信瀏覽器和你其它的工作環境之間添加一個優秀的隔離層,確保攻擊者完全危害你的瀏覽器將必須另外打破 VM 隔離層,才能達到系統的其余部分。
這是一個鮮為人知的可行方式,但是需要大量的 RAM 和高速的處理器來處理多增加的負載。這要求作為管理員的你需要相應地調整自己的工作實踐而付出辛苦。
3: 通過虛擬化完全隔離你的工作和娛樂環境 (低等)
了解下 Qubes-OS 項目 ,它致力于通過劃分你的應用到完全隔離的 VM 中來提供高度安全的工作環境。
密碼管理器
檢查清單
- [ ] 使用密碼管理器 (關鍵)
- [ ] 不相關的站點使用不同的密碼 (關鍵)
- [ ] 使用支持團隊共享的密碼管理器 (中等)
- [ ] 給非網站類賬戶使用一個單獨的密碼管理器 (低等)
注意事項
使用好的、唯一的密碼對你的團隊成員來說應該是非常關鍵的需求。 憑證 盜取一直在發生 — 通過被攻破的計算機、盜取數據庫備份、遠程站點利用、以及任何其它的方式。憑證絕不應該跨站點重用,尤其是關鍵的應用。
瀏覽器中的密碼管理器
每個瀏覽器有一個比較安全的保存密碼機制,可以同步到供應商維護的,并使用用戶的密碼保證數據加密。然而,這個機制有嚴重的劣勢:
- 不能跨瀏覽器工作
- 不提供任何與團隊成員共享憑證的方法
也有一些支持良好、免費或便宜的密碼管理器,可以很好的融合到多個瀏覽器,跨平臺工作,提供小組共享(通常是付費服務)。可以很容易地通過搜索引擎找到解決方案。
獨立的密碼管理器
任何與瀏覽器結合的密碼管理器都有一個主要的缺點,它實際上是應用的一部分,這樣最有可能被入侵者攻擊。如果這讓你不放心(應該這樣),你應該選 擇兩個不同的密碼管理器 -- 一個集成在瀏覽器中用來保存網站密碼,一個作為獨立運行的應用。后者可用于存儲高風險憑證如 root 密碼、數據庫密碼、其它 shell 賬戶憑證等。
這樣的工具在團隊成員間共享超級用戶的憑據方面特別有用(服務器 root 密碼、ILO密碼、數據庫管理密碼、引導程序密碼等等)。
這幾個工具可以幫助你:
- KeePassX ,在第2版中改進了團隊共享
- Pass ,它使用了文本文件和 PGP,并與 git 結合
- Django-Pstore ,它使用 GPG 在管理員之間共享憑據
- Hiera-Eyaml ,如果你已經在你的平臺中使用了 Puppet,在你的 Hiera 加密數據的一部分里面,可以便捷的追蹤你的服務器/服務憑證。
加固 SSH 與 PGP 的私鑰
個人加密密鑰,包括 SSH 和 PGP 私鑰,都是你工作站中最重要的物品 -- 這是攻擊者最想得到的東西,這可以讓他們進一步攻擊你的平臺或在其它管理員面前冒充你。你應該采取額外的步驟,確保你的私鑰免遭盜竊。
檢查清單
- [ ] 用來保護私鑰的強壯密碼 (關鍵)
- [ ] PGP 的主密碼保存在移動存儲中 (中等)
- [ ] 用于身份驗證、簽名和加密的子密碼存儲在智能卡設備 (中等)
- [ ] SSH 配置為以 PGP 認證密鑰作為 ssh 私鑰 (中等)
注意事項
防止私鑰被偷的最好方式是使用一個智能卡存儲你的加密私鑰,絕不要拷貝到工作站上。有幾個廠商提供支持 OpenPGP 的設備:
- Kernel Concepts ,在這里可以采購支持 OpenPGP 的智能卡和 USB 讀取器,你應該需要一個。
- Yubikey NEO ,這里提供 OpenPGP 功能的智能卡還提供很多很酷的特性(U2F、PIV、HOTP等等)。
確保 PGP 主密碼沒有存儲在工作站也很重要,僅使用子密碼。主密鑰只有在簽名其它的密鑰和創建新的子密鑰時使用 — 不經常發生這種操作。你可以照著 Debian 的子密鑰 向導來學習如何將你的主密鑰移動到移動存儲并創建子密鑰。
你應該配置你的 gnupg 代理作為 ssh 代理,然后使用基于智能卡 PGP 認證密鑰作為你的 ssh 私鑰。我們發布了一個 詳盡的指導 如何使用智能卡讀取器或 Yubikey NEO。
如果你不想那么麻煩,最少要確保你的 PGP 私鑰和你的 SSH 私鑰有個強健的密碼,這將讓攻擊者很難盜取使用它們。
休眠或關機,不要掛起
當系統掛起時,內存中的內容仍然保留在內存芯片中,可以會攻擊者讀取到(這叫做 冷啟動攻擊 )。如果你離開你的系統的時間較長,比如每天下班結束,最好關機或者休眠,而不是掛起它或者就那么開著。
工作站上的 SELinux
如果你使用捆綁了 SELinux 的發行版(如 Fedora),這有些如何使用它的建議,讓你的工作站達到最大限度的安全。
檢查清單
- [ ] 確保你的工作站 強制 使用 SELinux (關鍵)
- [ ] 不要盲目的執行
audit2allow -M
,應該經常檢查 (關鍵) - [ ] 絕不要
setenforce 0
(中等) - [ ] 切換你的用戶到 SELinux 用戶
staff_u
(中等)
注意事項
SELinux 是 強制訪問控制 ,是 POSIX許可核心功能的擴展。它是成熟、強健,自從它推出以來已經有很長的路了。不管怎樣,許多系統管理員現在仍舊重復過時的口頭禪“關掉它就行”。
話雖如此,在工作站上 SELinux 會帶來一些有限的安全效益,因為大多數你想運行的應用都是可以自由運行的。開啟它有益于給網絡提供足夠的保護,也有可能有助于防止攻擊者通過脆弱的后臺服務提升到 root 級別的權限用戶。
我們的建議是開啟它并 強制使用 。
絕不 setenforce 0
使用 setenforce 0
臨時把 SELinux 設置為 許可 模式很有誘惑力,但是你應該避免這樣做。當你想查找一個特定應用或者程序的問題時,實際上這樣做是把整個系統的 SELinux 給關閉了。
你應該使用 semanage permissive -a [somedomain_t]
替換 setenforce 0
,只把這個程序放入許可模式。首先運行 ausearch
查看哪個程序發生問題:
ausearch -ts recent -m avc
然后看下 scontext=
(源自 SELinux 的上下文)行,像這樣:
scontext=staff_u:staff_r:gpg_pinentry_t:s0-s0:c0.c1023
^^^^^^^^^^^^^^
這告訴你程序 gpg_pinentry_t
被拒絕了,所以你想排查應用的故障,應該增加它到許可域:
semange permissive -a gpg_pinentry_t
這將允許你使用應用然后收集 AVC 的其它數據,你可以結合 audit2allow
來寫一個本地策略。一旦完成你就不會看到新的 AVC 的拒絕消息,你就可以通過運行以下命令從許可中刪除程序:
semanage permissive -d gpg_pinentry_t
用 SELinux 的用戶 staff_r 使用你的工作站
SELinux 帶有 角色 的原生實現,基于用戶帳戶相關角色來禁止或授予某些特權。作為一個管理員,你應該使用 staff_r
角色,這可以限制訪問很多配置和其它安全敏感文件,除非你先執行 sudo
。
默認情況下,用戶以 unconfined_r
創建,你可以自由運行大多數應用,沒有任何(或只有一點)SELinux 約束。轉換你的用戶到 staff_r
角色,運行下面的命令:
usermod -Z staff_u [username]
你應該退出然后登錄新的角色,屆時如果你運行 id -Z
,你將會看到:
staff_u:staff_r:staff_t:s0-s0:c0.c1023
在執行 sudo
時,你應該記住增加一個額外標志告訴 SELinux 轉換到“sysadmin”角色。你需要用的命令是:
sudo -i -r sysadm_r
然后 id -Z
將會顯示:
staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
警告:在進行這個切換前你應該能很順暢的使用 ausearch
和 audit2allow
,當你以 staff_r
角色運行時你的應用有可能不再工作了。在寫作本文時,已知以下流行的應用在 staff_r
下沒有做策略調整就不會工作:
- Chrome/Chromium
- Skype
- VirtualBox
切換回 unconfined_r
,運行下面的命令:
usermod -Z unconfined_u [username]
然后注銷再重新回到舒適區。
延伸閱讀
IT 安全的世界是一個沒有底的兔子洞。如果你想深入,或者找到你的具體發行版更多的安全特性,請查看下面這些鏈接:
許可
這項工作在創作共用授權4.0國際許可證許可下。