《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國際許可證許可下。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive