2021-05-12 14:32:11
《Linux 工作站安全檢查清單》——來自 Linux 基金會內部
目標受眾
這是一套 Linux 基金會為其系統管理員提供的推薦規範。
這個文件用於幫助那些使用 Linux 工作站來存取和管理專案的 IT 設施的系統管理員團隊。
如果你的系統管理員是遠端員工,你也許可以使用這套指導方針確保系統管理員的系統可以通過核心安全需求,降低你的IT 平台成為攻擊目標的風險。
即使你的系統管理員不是遠端員工,很多人也會在工作環境中通過便攜筆電完成工作,或者在家中設定系統以便在業餘時間或緊急時刻存取工作平台。不論發生何種情況,你都能調整這個推薦規範來適應你的環境。
限制
但是,這並不是一個詳細的“工作站加固”文件,可以說這是一個努力避免大多數明顯安全錯誤而不會導致太多不便的一組推薦基線(baseline)。你也許閱讀這個文件後會認為它的方法太偏執,而另一些人也許會認為這僅僅是一些膚淺的研究。安全就像在高速公路上開車 -- 任何比你開的慢的都是一個傻瓜,然而任何比你開的快的人都是瘋子。這個指南僅僅是一些列核心安全規則,既不詳細又不能替代經驗、警惕和常識。
我們分享這篇文件是為了將開源共同作業的優勢帶到 IT 策略文獻資料中。如果你發現它有用,我們希望你可以將它用到你自己團體中,並分享你的改進,對它的完善做出你的貢獻。
結構
每一節都分為兩個部分:
- 核對適合你專案的需求
- 形式不定的提示內容,解釋了為什麼這麼做
嚴重級別
在清單的每一個專案都包括嚴重級別,我們希望這些能幫助指導你的決定:
- 關鍵(ESSENTIAL) 該項應該在考慮列表上被明確的重視。如果不採取措施,將會導致你的平台安全出現高風險。
- 中等(NICE) 該項將改善你的安全形勢,但是會影響到你的工作環境的流程,可能會要求養成新的習慣,改掉舊的習慣。
- 低等(PARANOID) 留作感覺會明顯完善我們平台安全、但是可能會需要大量調整與作業系統互動的方式的專案。
記住,這些只是參考。如果你覺得這些嚴重級別不能反映你的工程對安全的承諾,你應該調整它們為你所合適的。
選擇正確的硬體
我們並不會要求管理員使用一個特殊供應商或者一個特殊的型號,所以這一節提供的是選擇工作系統時的核心注意事項。
檢查清單
- [ ] 系統支援安全啟動(SecureBoot) (關鍵)
- [ ] 系統沒有火線(Firewire),雷電(thunderbolt)或者擴充套件卡(ExpressCard)介面 (中等)
- [ ] 系統有 TPM 晶片 (中等)
注意事項
安全啟動(SecureBoot)
儘管它還有爭議,但是安全引導能夠預防很多針對工作站的攻擊(Rootkits、“Evil Maid”,等等),而沒有太多額外的麻煩。它並不能阻止真正專門的攻擊者,加上在很大程度上,國家安全機構有辦法應對它(可能是通過設計),但是有安全引導總比什麼都沒有強。
作為選擇,你也許可以部署 Anti Evil Maid 提供更多健全的保護,以對抗安全引導所需要阻止的攻擊型別,但是它需要更多部署和維護的工作。
系統沒有火線(Firewire),雷電(thunderbolt)或者擴充套件卡(ExpressCard)介面
火線是一個標準,其設計上允許任何連線的裝置能夠完全地直接存取你的系統記憶體(參見維基百科)。雷電介面和擴充套件卡同樣有問題,雖然一些後來部署的雷電介面試圖限制記憶體存取的範圍。如果你沒有這些系統埠,那是最好的,但是它並不嚴重,它們通常可以通過 UEFI 關閉或核心本身禁用。
TPM 晶片
可信平台模組(Trusted Platform Module ,TPM)是主機板上的一個與核心處理器單獨分開的加密晶片,它可以用來增加平台的安全性(比如儲存全盤加密的金鑰),不過通常不會用於日常的平台操作。充其量,這個是一個有則更好的東西,除非你有特殊需求,需要使用 TPM 增加你的工作站安全性。
預引導環境
這是你開始安裝作業系統前的一系列推薦規範。
檢查清單
- [ ] 使用 UEFI 引導模式(不是傳統 BIOS)(關鍵)
- [ ] 進入 UEFI 設定需要使用密碼 (關鍵)
- [ ] 使用安全引導 (關鍵)
- [ ] 啟動系統需要 UEFI 級別密碼 (中等)
注意事項
UEFI 和安全引導
UEFI 儘管有缺點,還是提供了很多傳統 BIOS 沒有的好功能,比如安全引導。大多數現代的系統都預設使用 UEFI 模式。
確保進入 UEFI 設定模式要使用高強度密碼。注意,很多廠商默默地限制了你使用密碼長度,所以相比長口令你也許應該選擇高熵值的短密碼(關於密碼短語請參考下面內容)。
基於你選擇的 Linux 發行版,你也許需要、也許不需要按照 UEFI 的要求,來匯入你的發行版的安全引導金鑰,從而允許你啟動該發行版。很多發行版已經與微軟合作,用大多數廠商所支援的金鑰給它們已發布的核心簽名,因此避免了你必須處理金鑰匯入的麻煩。
作為一個額外的措施,在允許某人存取引導分割區然後嘗試做一些不好的事之前,讓他們輸入密碼。為了防止肩窺(shoulder-surfing),這個密碼應該跟你的 UEFI 管理密碼不同。如果你經常關閉和啟動,你也許不想這麼麻煩,因為你已經必須輸入 LUKS 密碼了(LUKS 參見下面內容),這樣會讓你您減少一些額外的鍵盤輸入。
發行版選擇注意事項
很有可能你會堅持一個廣泛使用的發行版如 Fedora,Ubuntu,Arch,Debian,或它們的一個類似發行版。無論如何,以下是你選擇使用發行版應該考慮的。
檢查清單
- [ ] 擁有一個強健的 MAC/RBAC 系統(SELinux/AppArmor/Grsecurity) (關鍵)
- [ ] 發布安全公告 (關鍵)
- [ ] 提供及時的安全修補程式 (關鍵)
- [ ] 提供軟體包的加密驗證 (關鍵)
- [ ] 完全支援 UEFI 和安全引導 (關鍵)
- [ ] 擁有健壯的原生全磁碟加密支援 (關鍵)
注意事項
SELinux,AppArmor,和 GrSecurity/PaX
強制存取控制(Mandatory Access Controls,MAC)或者基於角色的存取控制(Role-Based Access Controls,RBAC)是一個用在老式 POSIX 系統的基於使用者或組的安全機制擴充套件。現在大多數發行版已經綑綁了 MAC/RBAC 系統(Fedora,Ubuntu),或通過提供一種機制一個可選的安裝後步驟來新增它(Gentoo,Arch,Debian)。顯然,強烈建議您選擇一個預裝 MAC/RBAC 系統的發行版,但是如果你對某個沒有預設啟用它的發行版情有獨鍾,裝完系統後應計劃設定安裝它。
應該堅決避免使用不帶任何 MAC/RBAC 機制的發行版,像傳統的 POSIX 基於使用者和組的安全在當今時代應該算是考慮不足。如果你想建立一個 MAC/RBAC 工作站,通常認為 AppArmor 和 PaX 比 SELinux 更容易掌握。此外,在工作站上,很少有或者根本沒有對外監聽的守護行程,而針對使用者執行的應用造成的最高風險,GrSecurity/PaX 可能 會比SELinux 提供更多的安全便利。
發行版安全公告
大多數廣泛使用的發行版都有一個給它們的使用者傳送安全公告的機制,但是如果你對一些機密感興趣,去看看開發人員是否有見於文件的提醒使用者安全漏洞和修補程式的機制。缺乏這樣的機制是一個重要的警告信號,說明這個發行版不夠成熟,不能被用作主要管理員的工作站。
及時和可靠的安全更新
多數常用的發行版提供定期安全更新,但應該經常檢查以確保及時提供關鍵包更新。因此應避免使用附屬發行版(spin-off)和“社群重構”,因為它們必須等待上游發行版先發布,它們經常延遲發布安全更新。
現在,很難找到一個不使用加密簽名、更新後設資料或二者都不使用的發行版。如此說來,常用的發行版在引入這個基本安全機制就已經知道這些很多年了(Arch,說你呢),所以這也是值得檢查的。
發行版支援 UEFI 和安全引導
檢查發行版是否支援 UEFI 和安全引導。查明它是否需要匯入額外的金鑰或是否要求啟動核心有一個已經被系統廠商信任的金鑰簽名(例如跟微軟達成合作)。一些發行版不支援 UEFI 或安全啟動,但是提供了替代品來確保防篡改(tamper-proof)或防破壞(tamper-evident)引導環境(Qubes-OS 使用 Anti Evil Maid,前面提到的)。如果一個發行版不支援安全引導,也沒有防止引導級別攻擊的機制,還是看看別的吧。
全磁碟加密
全磁碟加密是保護靜止資料的要求,大多數發行版都支援。作為一個選擇方案,帶有自加密硬碟的系統也可以用(通常通過主機板 TPM 晶片實現),並提供了類似安全級別而且操作更快,但是花費也更高。
發行版安裝指南
所有發行版都是不同的,但是也有一些一般原則:
檢查清單
- [ ] 使用健壯的密碼全磁碟加密(LUKS) (關鍵)
- [ ] 確保交換分割區也加密了 (關鍵)
- [ ] 確保載入程式設定了密碼(可以和LUKS一樣) (關鍵)
- [ ] 設定健壯的 root 密碼(可以和LUKS一樣) (關鍵)
- [ ] 使用無特權賬戶登入,作為管理員組的一部分 (關鍵)
- [ ] 設定健壯的使用者登入密碼,不同於 root 密碼 (關鍵)
注意事項
全磁碟加密
除非你正在使用自加密硬碟,設定你的安裝程式完整地加密所有儲存你的資料與系統檔案的磁碟很重要。簡單地通過自動掛載的 cryptfs 環(loop)檔案加密使用者目錄還不夠(說你呢,舊版 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
來提升許可權。
換句話說,如果在你的工作站只有你一個使用者,你應該有兩個獨特的、強健(robust)而強壯(strong)的密碼需要記住:
管理級別,用在以下方面:
- UEFI 管理
- 載入程式(GRUB)
- 磁碟加密(LUKS)
- 工作站管理(root 使用者)
使用者級別,用在以下:
- 使用者登入和 sudo
- 密碼管理器的主密碼
很明顯,如果有一個令人信服的理由的話,它們全都可以不同。
安裝後的加固
安裝後的安全加固在很大程度上取決於你選擇的發行版,所以在一個像這樣的通用文件中提供詳細說明是徒勞的。然而,這裡有一些你應該採取的步驟:
檢查清單
- [ ] 在全域性範圍內禁用火線和雷電模組 (關鍵)
- [ ] 檢查你的防火牆,確保過濾所有傳入埠 (關鍵)
- [ ] 確保 root 郵件轉發到一個你可以收到的賬戶 (關鍵)
- [ ] 建立一個系統自動更新任務,或更新提醒 (中等)
- [ ] 檢查以確保 sshd 服務預設情況下是禁用的 (中等)
- [ ] 設定螢幕保護裝置在一段時間的不活動後自動鎖定 (中等)
- [ ] 設定 logwatch (中等)
- [ ] 安裝使用 rkhunter (中等)
- [ ] 安裝一個入侵檢測系統(Intrusion Detection System) (中等)
注意事項
將模組列入黑名單
將火線和雷電模組列入黑名單,增加一行到/etc/modprobe.d/blacklist-dma.conf
檔案:
blacklist firewire-core
blacklist thunderbolt
重新啟動後的這些模組將被列入黑名單。這樣做是無害的,即使你沒有這些埠(但也不做任何事)。
Root 郵件
預設的 root 郵件只是儲存在系統基本上沒人讀過。確保你設定了你的/etc/aliases
來轉發 root 郵件到你確實能讀取的郵箱,否則你也許錯過了重要的系統通知和報告:
#Personwho 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
並每晚執行它。它相當易於學習和使用,雖然它不會阻止一個複雜的攻擊者,它也能幫助你捕獲你自己的錯誤。
個人工作站備份
工作站備份往往被忽視,或偶爾才做一次,這常常是不安全的方式。
檢查清單
- [ ] 設定加密備份工作站到外部儲存 (關鍵)
- [ ] 使用零認知(zero-knowledge)備份工具備份到站外或雲上 (中等)
注意事項
全加密的備份存到外部儲存
把全部備份放到一個移動磁碟中比較方便,不用擔心頻寬和上行網速(在這個時代,大多數供應商仍然提供顯著的不對稱的上傳/下載速度)。不用說,這個行動硬碟本身需要加密(再說一次,通過 LUKS),或者你應該使用一個備份工具建立加密備份,例如duplicity
或者它的 GUI 版本 deja-dup
。我建議使用後者並使用隨機生成的密碼,儲存到離線的安全地方。如果你帶上筆電去旅行,把這個磁碟留在家,以防你的筆電丟失或被竊時可以找回備份。
除了你的家目錄外,你還應該備份/etc
目錄和出於取證目的的/var/log
目錄。
尤其重要的是,避免拷貝你的家目錄到任何非加密儲存上,即使是需要快速的在兩個系統上移動檔案時,一旦完成你肯定會忘了清除它,從而暴露個人隱私或者安全資訊到監聽者手中 -- 尤其是把這個儲存媒介跟你的筆電放到同一個包裡。
有選擇的零認知站外備份
站外備份(Off-site backup)也是相當重要的,是否可以做到要麼需要你的老闆提供空間,要麼找一家雲服務商。你可以建一個單獨的 duplicity/deja-dup 設定,只包括重要的檔案,以免傳輸大量你不想備份的資料(網路快取、音樂、下載等等)。
作為選擇,你可以使用零認知(zero-knowledge)備份工具,例如 SpiderOak,它提供一個卓越的 Linux GUI工具還有更多的實用特性,例如在多個系統或平台間同步內容。
最佳實踐
下面是我們認為你應該採用的最佳實踐列表。它當然不是非常詳細的,而是試圖提供實用的建議,來做到可行的整體安全性和可用性之間的平衡。
瀏覽
毫無疑問, web 瀏覽器將是你的系統上最大、最容易暴露的面臨攻擊的軟體。它是專門下載和執行不可信、甚至是惡意程式碼的一個工具。它試圖採用沙箱和程式碼清潔(code sanitization)等多種機制保護你免受這種危險,但是在之前它們都被擊敗了多次。你應該知道,在任何時候瀏覽網站都是你做的最不安全的活動。
有幾種方法可以減少瀏覽器的影響,但這些真實有效的方法需要你明顯改變操作您的工作站的方式。
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 中來提供高度安全的工作環境。
密碼管理器
檢查清單
- [ ] 使用密碼管理器 (關鍵)
- [ ] 不相關的站點使用不同的密碼 (關鍵)
- [ ] 使用支援團隊共用的密碼管理器 (中等)
- [ ] 給非網站類賬戶使用一個單獨的密碼管理器 (低等)
注意事項
使用好的、唯一的密碼對你的團隊成員來說應該是非常關鍵的需求。憑證(credential)盜取一直在發生 — 通過被攻破的計算機、盜取資料庫備份、遠端站點利用、以及任何其它的方式。憑證絕不應該跨站點重用,尤其是關鍵的應用。
瀏覽器中的密碼管理器
每個瀏覽器有一個比較安全的儲存密碼機制,可以同步到供應商維護的,並使用使用者的密碼保證資料加密。然而,這個機制有嚴重的劣勢:
- 不能跨瀏覽器工作
- 不提供任何與團隊成員共用憑證的方法
也有一些支援良好、免費或便宜的密碼管理器,可以很好的融合到多個瀏覽器,跨平台工作,提供小組共用(通常是付費服務)。可以很容易地通過搜尋引擎找到解決方案。
獨立的密碼管理器
任何與瀏覽器結合的密碼管理器都有一個主要的缺點,它實際上是應用的一部分,這樣最有可能被入侵者攻擊。如果這讓你不放心(應該這樣),你應該選擇兩個不同的密碼管理器 -- 一個整合在瀏覽器中用來儲存網站密碼,一個作為獨立執行的應用。後者可用於儲存高風險憑證如 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 私鑰有個強健的密碼,這將讓攻擊者很難盜取使用它們。
休眠或關機,不要掛起
當系統掛起時,記憶體中的內容仍然保留在記憶體晶片中,可以會攻擊者讀取到(這叫做冷啟動攻擊(Cold Boot Attack))。如果你離開你的系統的時間較長,比如每天下班結束,最好關機或者休眠,而不是掛起它或者就那麼開著。
工作站上的 SELinux
如果你使用捆綁了 SELinux 的發行版(如 Fedora),這有些如何使用它的建議,讓你的工作站達到最大限度的安全。
檢查清單
- [ ] 確保你的工作站強制(enforcing)使用 SELinux (關鍵)
- [ ] 不要盲目的執行
audit2allow -M
,應該經常檢查 (關鍵) - [ ] 絕不要
setenforce 0
(中等) - [ ] 切換你的使用者到 SELinux 使用者
staff_u
(中等)
注意事項
SELinux 是強制存取控制(Mandatory Access Controls,MAC),是 POSIX許可核心功能的擴充套件。它是成熟、強健,自從它推出以來已經有很長的路了。不管怎樣,許多系統管理員現在仍舊重複過時的口頭禪“關掉它就行”。
話雖如此,在工作站上 SELinux 會帶來一些有限的安全效益,因為大多數你想執行的應用都是可以自由執行的。開啟它有益於給網路提供足夠的保護,也有可能有助於防止攻擊者通過脆弱的後台服務提升到 root 級別的許可權使用者。
我們的建議是開啟它並強制使用(enforcing)。
絕不setenforce 0
使用setenforce 0
臨時把 SELinux 設定為許可(permissive)模式很有誘惑力,但是你應該避免這樣做。當你想查詢一個特定應用或者程式的問題時,實際上這樣做是把整個系統的 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 帶有角色(role)的原生實現,基於使用者帳戶相關角色來禁止或授予某些特權。作為一個管理員,你應該使用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國際許可證許可下。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-12/126393.htm
相關文章