目標讀者
本文檔目標讀者為使用 Linux 工作站進行訪問和管理項目基礎設施團隊中的系統管理員。
如果你們團隊的系統管理員是一名遠程辦公人員,你可以使用本文檔幫助他們確保工作站達到最基本的安全要求,以降低他們受到攻擊的風險。
即使你們的系統管理員不是遠程辦公人員,但是他們也可能會在辦公環境下使用自己的筆記本電腦來完成很多的工作,亦或者他們可能會在下班時間或遇到突發狀況時,利用家中的設備來訪問工作環境。在這些情況下,你可以適當調整本套規范以適應你當前的環境。
局限
但請注意,這不是一份詳盡的“工作站加固”文檔,而是嘗試提出一組基本建議,以避免出現一些明顯的安全問題從而導致損失。當你讀到這份文檔時可能會覺得有些偏執,也可能會覺得太膚淺。但安全就像駕車行駛在高速公路上,你會認為任何速度比你慢的都是傻瓜,而比你快的都是瘋子。這份指南僅僅是一套基礎安全規范,既不詳盡,也不能代替經驗、警覺和常識。
文檔結構
文檔每一章節都分為兩個部分:
1.適用於你項目需求的清單
2.解釋為什麼要這麼做的原因
安全等級
每一個清單條目都會給出一個安全等級,我們希望這能幫助你做出決定:
1.高(ESSENTIAL) 該條目應該要被高度重視。如果存在問題,它會導致工作站處在一個高風險中。 2.中(NICE) 該條目有助於提升工作站整體的安全性,但可能會影響到你的工作習慣,需要你重新培養工作習慣。 3.低(PARANOID) 該條目為保留項,我們覺得其將大大提升工作站的安全性,但也需要進行大量的調整。
請牢記,這些僅僅只是參考。如果你覺得這個安全等級沒有影響到你項目的安全,你可以自己調整它們為合適值。
選擇正確的硬件
我們不要求我們的管理員使用指定的供應商或特定的模式,所以本章將主要討論選擇工作系統時的注意事項。
清單
1.系統支持SecureBoot功能(高) 2.系統沒有火線(firewire),雷電(thunderbolt)和ExpressCard 接口(中) 3.系統擁有TPM安全芯片(中)
原因
??SecureBoot 功能
??盡管其還存在一些爭議,但SecureBoot功能還是能夠抵御一些針對工作站的攻擊(如:Rootkits和“Evil Maid”等等)而不引入其他的麻煩。SecureBoot功能並不能阻止APT攻擊,但有總比沒有強吧。
另外,你也可以選擇額外部署Anti Evil Maid,其針對SecureBoot攻擊提供更加完善的防護措施,但這需要更多的投入和維護。
??火線(firewire),雷電(thunderbolt)和ExpressCard 接口
??Firewire是一種標准,允許任何連接的設備直接訪問系統內存(百度百科)。Thunderbolt 和 ExpressCard 也同樣存在類似的問題,雖然之後有限制 Thunderbolt 訪問內存的能力。如果你的系統上沒有這些接口那是最好的,不過即使有也沒關系,它們通常可以通過 UEFI 關閉或者內核中禁用。
??TPM 安全芯片
??TPM(Trusted Platform Module)安全芯片是主板上獨立於處理器的加密芯片,其可以提供系統額外的安全性(例如存儲全盤加密密鑰),但其基本不會用於工作站操作中。換句話說,TMP安全芯片也只是一個有則更好的東西,除非你有特殊的安全需求需要使用它來增強安全性。
安裝前的環境
下面是一組在為工作站安裝操作系統前的建議。
清單
1.使用 UEFI 引導模式(不使用傳統的 BIOS)(高) 2.設置進入 UEFI 配置的密碼(高) 3.啟用SecureBoot功能(高) 4.開機時需要輸入 UEFI 密碼(中)
原因
UEFI 和 SecureBoot
UEFI 盡管也存在一些缺點,但其提供一些 BIOS 所沒有的安全功能,例如:SecureBoot。目前大多數現代系統默認都是使用 UEFI 模式。
確保進入 UEFI 配置模式所需的是一個高強度的密碼。注意,由於許多廠商悄悄限制了可使用密碼的長度,所以你可能需要選擇使用短的密碼(password)或者長的密碼短語(passphrases)。
根據你所選擇的 Linux 發行版,你可能需要或不需要導入額外的安全密鑰,來啟動該發行版。現在很多的發行版已經與微軟進行合作,使用大多數廠商所公認的密鑰來對他們的內核進行簽名,從而為使用者減少麻煩。
作為一個額外的措施,讓那些想進入引導區嘗試做壞事的人在進入前必須輸入密碼。這個密碼應該不同於 UEFI 的管理密碼,以防止出現肩窺。如果你需要經常關閉和啟動系統,你可以無視這條,因為你已經需要輸入進入系統的密碼了,無需在輸入一些額外的其他密碼。
發行版的選擇
你可能會選擇一個廣泛使用的發行版,例如:Fedora,Ubuntu,Arch,Debian或者基於它們的其他發行版。無論你選擇哪一個發行版,選擇前你都應該考慮下面的事項:
清單
1.具有強大的 MAC/RBAC 功能(SELinux/AppArmor/GrSecurity)(高) 2.發布安全公告(高) 3.及時推送安全補丁(高) 4.提供軟件包加密驗證(高) 5.完全支持 UEFI 和 SecureBoot功能(高) 6.提供強大的本地全盤加密支持(高)
原因
SELinux, AppArmor 和 GrSecurity/PaX
強制訪問控制(MAC)和基於角色的訪問控制(RBAC)是老式 POSIX 系統中一種對基本用戶\用戶組安全機制的擴展。當前不少數的發行版都已經內建了MAC/RBAC 功能(Fedora,Ubuntu)或者將 MAC/RBAC 作為安裝後可選的附加項提供給用戶(Gentoo,Arch,Debian)。很顯然,我們強烈建議你選擇一個已內建 MAC/RBAC 功能的發行版,不過如果你對使用其他的發行版有強烈的意願,那麼也請在安裝好系統後在安裝 MAC/RBAC 功能。
應該堅決避免使用不提供 MAC/RBAC 功能的發行版,在今日像傳統 POSIX 基於用戶和用戶組的安全措施已被證明不在是可靠的了。如果你想建立一個 MAC/RBAC 工作站,AppArmor 和 GrSecurity/PaX 通常被認為要比 SELinux 更加簡單。此外,在工作站中,很少甚至沒有對監聽程序的守護進程,GrSecurity/PaX 在應對來自用戶運行程序的高風險上的安全措施也要強於 SELinux。
發布安全公告
大多數廣泛使用的發行版都有向用戶發布安全公告的機制,但是如果你喜歡鑽研,你可以檢查開發人員是否有基於文檔提示用戶關於安全漏洞和補丁的機制。如果一個發行版缺乏相應安全公告機制是一個非常危險的信號,說明這個發行版還不夠成熟不具有擔當主服務器的能力。
及時推送安全補丁
大多數廣泛使用的發行版都具備及時推送安全補丁的能力,但是還是應該經常檢查更新以確保及時安裝推送的安全補丁。應當避免使用“衍生版”和“社區重建版”,因為他們需要等待原生版發布相應的安全補丁才能進行推送,這就會延誤補丁到達用戶的速度。
現在已經很難在看到一個不使用加密簽名的軟件包,不更新元數據,或者包含兩者的發行版。這就是說,常見的發行版早已經都知道推出這些基本的安全措施(Arch,說你呢),所以這是一件值得檢查的事情。
完全支持 UEFI 和 SecureBoot功能
查看發行版是否支持 UEFI 和 SecureBoot功能。找出看是否需要額外輸入一個密鑰或者是否需要啟動一個使用大多數廠商認可的密鑰簽名的內核(例如同微軟合作的發行版)。一些發行版不支持 UEFI/SecureBoot 但是卻會提供其他安全措施以不防止啟動環境被篡改或破壞(Qubes-OS 使用Anti Evil Maid,前面有提過)。如果一個發行版既不支持 SecureBoot 也沒有其他預防 Boot 級別攻擊的措施,那還是看看別的發行版吧。
全盤加密
全盤加密是對數據進行安全防護的一個要求,現在大部分的發行版都支持全盤加密。作為替代品,安裝在帶有自加密功能的硬盤上的系統也是可以使用的(一般通過使用 TPM 安全芯片實現),其提供更高層次的安全和更快的運行速度,但是也要求更高的成本。
發行版安裝指南
所有發行版的安裝都是不一樣的,這裡給出的只是一般的准則:
清單
1.使用一個復雜的密碼進行全盤加密(LUKS)(高) 2.確保對 swap 交換分區也進行加密(高) 3.確保編輯啟動程序也需要密碼(可以跟LUKS使用相同的密碼)(高) 4.設置一個復雜的 root 密碼(可以跟LUKS使用相同的密碼)(高) 5.使用普通用戶作為管理員組中的一部分(高) 6.要求用戶密碼必須為復雜密碼且不能同於 root 密碼(高)
原因
全盤加密
除非你使用具有自加密功能的硬盤,不然你很有必要設置全盤加密,這樣將可以極大的保護提升用戶數據和系統文件的完整性。簡單的自動掛載 cryptfs 文件是不夠的(老版 Ubuntu,說你呢),因為這樣沒有提供對系統二進制文件和交換分區的保護,而這其中可能會包含大量的敏感數據。推薦的加密措施是加密 LVM 設備,這樣在啟動過程中只需要一個密碼。
/boot 分區通常會保持未加密狀態,因為引導程序需要在加載解密程序前先啟動系統內核。部分發行版也會支持對 /boot 分區進行加密(如 Arch),但這可能會增加系統更新的復雜度。是否對 /boot 分區進行加密不是我們選取發行版的關鍵,因為通常內核鏡像不會洩露隱私數據,而且 SecureBoot 也會檢查加密簽名以防止篡改數據。
選擇一個好密碼
現代操作系統基本對密碼長度沒有限制,所以唯一限制你密碼長度的是你的偏執和固執。如果你經常啟動系統,你可能會需要輸入兩個不同的密碼:一個用於解鎖 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 命令來提升權限。
換句話說,如果你是工作站唯一的用戶,你應當擁有兩個獨特的且復雜的密碼需要記住:
管理員級別應用於:
1.UEFI 管理 2.引導程序(GRUB) 3.硬盤加密(LUKS) 4.管理工作站(root 用戶)
用戶級別應用於:
1.用戶賬戶和 sudo 2.密碼管理器的主密碼
很明顯,以上這些應當使用不同的密碼。
安裝完後的加固
安裝完系統後的安全加固取決於你所使用的發行版,所以無法在這種通用文檔中具體來說。不過,下面這些步驟你應該要知道:
清單
1.全局禁用火線和雷電模塊(高) 2.檢測防火牆確保過濾所有傳入端口(高) 3.確保 root 郵件轉發到一個你經常查看的賬戶上(高) 4.設置系統自動更新任務或者更新提醒(高) 5.確認默認情況下 sshd 服務被禁用(中) 6.設置空閒時自動鎖屏(中) 7.設置 logwatch 監控日志(中) 8.安裝並使用 rkhunter 查殺後門(中) 9.安裝入侵檢測系統(IDS)(中)
原因
黑名單模塊
將火線和雷電模塊列入黑名單,將下面兩行加入文件 /etc/modprobe.d/blacklist-dma.conf:
blacklist firewire-core blacklist thunderbolt
重啟後這些模塊就會被禁用。即使你沒有這些模塊也可以這麼做。
Root 郵件
通常,Root 郵件都僅僅只是存儲在系統中而從未有人去讀取過。確保修改 /etc/aliases 文件轉發 Root 郵件到一個你真的會查看的郵箱中,否則你可能會錯過一些重要的系統通知和報告:
# Person who should get root's mail root: [email protected]
在編輯完後執行命令 newaliases 以測試確能轉發成功,因為一些郵件廠商會拒絕接收來自不存在或不可路由域名的郵件。
防火牆,sshd和監聽守護進程
防火牆的默認配置取決於你使用的發行版,但大部分都會允許來自 sshd 端口的傳入。除非你有什麼無可反駁的理由,不然你應該過濾並禁用 sshd 進程。
systemctl disable sshd.service systemctl stop sshd.service
如果你需要使用它隨時都可以啟用。通常來說,你的系統不應當監聽任何端口,除了回應 ping。這將會幫助降低來自 0day的攻擊威脅。
自動更新或通知
建議開啟自動更新,除非你有更好的理由不這麼做,例如你害怕自動更新會導致系統的崩潰(這並非杞人憂天,以前的確發生過)。但是至少你也應該開啟自動通知當前可用的更新。大部分的發行版默認都會開啟這些服務,所以你什麼都不用做。具體的你可以查看發行版的相關文檔。
你應當盡可能的關注所有明顯的勘誤(errata),即使有些沒有特別的標明是“安全更新”或者有相應的 CVE 編號。所有的 bug 都可能成為潛在的安全問題或者導致其他新的問題,未知的 bug 通常只比已知的要安全一些。
監視日志
你應當對你系統上發生的事情產生濃厚的興趣。所以,你應當安裝 logwatch 並配置它在每天晚上發送關於你系統上發生所有事情的報告。這並不能阻止一些有針對性的攻擊者,但這是一個不錯的安全習慣。
請注意,有些發行版系統不再自動安裝 logwatch 所需的 syslog 服務(因為systemd 會存在它們自己的日志中),所以你需要安裝並啟用 rsyslog,然後確保在使用 logwatch前你的/var/log 不是空的。
Rkhunter 和 IDS
安裝 Rkhunter 和 一個IDS(如:aide或tripwire)並沒有什麼太大的左右,除非你真的了解它們的工作原理並進行正確的配置(例如:分離數據庫在外部介質上,從可信的環境中運作檢測,在執行系統更新和修改配置後更新哈希數據庫,等等)。如果你不願意執行這些步驟並調整對你工作站的工作方式,那麼這些工具只會增加麻煩而起不到任何的安全作用。
我們建議你安裝 rkhunter 並每晚運行一次。它易學易用,雖然不能幫你阻止一個經驗豐富的攻擊者,但是卻能讓你發現自己的錯誤。
備份個人工作站
工作站的備份往往會被忽視或者很隨意進行備份,這都是很不安全的。
清單
1.對工作站備份進行加密並存儲在外部存儲上(高)
2.使用零知識備份工具進行異地或雲備份(中)
原因
全加密外部存儲上的備份
使用一個外部移動硬盤可以很方便的拷貝出所有的備份,而無需擔心帶寬和上行速度(目前,大部分的供應商仍然提供明顯不對稱的上行/下載速度)。無需多言,這個硬盤本身也是需要加密的(再說一次,使用 LUKS),或者你應該使用備份工具創建加密的備份,例如:duplicity或者其 GUI 版本 deja-dup。我建議使用後一種方式,並使用一個不錯的隨機密碼存放在一個安全離線的地方。你過你帶上筆記本外出旅游,那麼把硬盤放在家裡,這樣萬一丟失筆記本還可以恢復部分數據。
除了你的 home 目錄外,你還應當備份 /etc 和可用於取證的 /var/log 目錄。
最重要的是,避免將 home 目錄拷貝到一個沒有加密的存儲設備上,即使這是在兩個系統間最快的拷貝方式,一旦完成你肯定會忘記刪除它,這樣你就會暴露潛在的個人隱私和其他敏感的安全數據給監聽者。特別是當你把這個存儲設備跟筆記本放在同一個包內。
選擇零知識備份工具進行異地備份
進行異地備份也是相當重要的,你既可以通過要求老板提供異地存儲的空間,也可以尋找雲供應商提供相應的服務。你可以單獨設置一個 duplicity/deja-dup 僅僅只備份重要的文件,這樣可以避免由於備份大量不需要備份數據而在異地備份中產生的巨大流量(網絡緩存,音樂或者下載數據等等)。
或者,你可以使用零知識備份工具,例如:SpiderOak,它提供一個優秀的 Linux GUI 工具和很多實用的功能,包括可以在多系統和平台間進行數據同步。
最佳實踐
下面是一系列我認為你應該采用的最佳實踐的列表。並不是很詳細,但卻試圖提供實用的建議,來幫助在安全和易用之間找到一個平衡。
浏覽器
毫無疑問,Web 浏覽器是你系統上最為容易受到攻擊的軟件。它是一個專門下載和執行不可信代碼甚至是惡意代碼的工具。它們也試圖通過使用多種機制例如沙箱和代碼過濾來保護你免受這些危害,但是之前它們已經被擊敗過很多次了。你應當知道任何時候使用浏覽器都是最不安全的時刻。
下面幾種方法可以減少來自浏覽器的安全威脅,但是真正有效的方法還是改變你對工作站的使用方法。
1:使用兩種不同的浏覽器(高)
這是最容易做到的,但安全效果也很小。並不是所有的浏覽器都可以抵御攻擊者不受限制的浏覽你的系統,有時他們限制只能讀取本地浏覽器的存儲,從其他標簽中竊取活動的會話,捕獲浏覽器的輸入。同時使用兩個浏覽器,一個用於在訪問工作和高安全站點,另一個則用於其他方面,這樣可以防止攻擊者竊取到所有的 Cookies。但是同時使用兩個浏覽器會消耗大量的內存。
火狐用於訪問工作和高安全站點
使用火狐登錄工作相關的站點,應當格外注意像 Cookies ,會話,登錄信息和按鍵記錄等等數據千萬不能落入攻擊者的手裡。你不應當使用這個浏覽器訪問其他任何網站,除了少數幾個例外。
你也應該安裝以下火狐浏覽器的插件:
NoScript (高)
NoScript 阻止加載除白名單外所有活動內容。如果作為默認浏覽器這會非常的麻煩(但是提供了很好的安全性),所以我們建議只在訪問工作和高安全站點的浏覽器上使用它。
Privacy Badger (高)
用來攔截廣告商和其他第三方跟蹤商的擴展,保護用戶在浏覽網頁時免受密碼跟蹤(廣告站點和跟蹤的擴展經常成為受攻擊的目標,因為通過它們可以快速的感染全球成千上萬的系統)。
HTTPS Everywhere (高)
這個插件會確保通過安全連接訪問大部分的網站,即使你輸入的是 http 鏈接(可以避免很多的攻擊,例如SSL-strip)。
Certificate Patrol (中)
這個工具會在你訪問的站點最近更換 TLS 證書時發出警告,特別是當原證書沒有接近過期時間或者新證書來自不同的認證機構。這個警報有助於你防范中間人攻擊,但是也會出現很多的誤報。
你不應該使用火狐作為你默認的浏覽器打開連接,因為 NoScript 會阻止加載或執行大多數的活動。
Chrome/Chromium 用於其他
Chromium 的開發者在增加更好的安全性方面走在火狐的前面(至少 Linux 上是這樣),例如:seccomp 沙箱,內核中用戶命名空間等等,這就為你訪問的網站和你的系統之間增加了一個隔離層。Chromium 是上游的開源項目,而 Chrome 是谷歌構建的專有的二進制包(插入一個偏執的提醒,不要使用它來做任何你不想讓谷歌知道的事)。
另外推薦你在 Chrome 上安裝 Privacy Badger 和 HTTPS Everywhere 插件,然後使用一個區別於火狐的主題,以此來表明這是你“不受信任”的浏覽器。
使用兩個不同的浏覽器,一個在專用虛擬機中 (中)
這個跟上面推薦的做法很相似,除了你需要將運行一切其他事情的浏覽器放入一個專用的虛擬機中,然後通過一個快速的協議來共享剪切板和轉發聲音事件(例如:Spice 或 RDP)。這將會在不受信任的浏覽器和你的工作環境之間增加一個隔離層,使得攻擊者在攻破浏覽器後必須在設法在攻破 VM 隔離層才能危害到你的系統。
這是一個不錯的可行方案,但是卻需要大量的內存和快速的處理器來處理增加的負載,同時也需要管理員去改變他們的工作習慣。
使用虛擬化技術隔離工作和游戲環境 (低)
參見Qubes-OS project,其致力於通過將應用劃分到完全隔離的虛擬機中,以此來提供高安全的工作環境。
密碼管理工具
清單
1.使用一個密碼管理工具(高) 2.在不相關的網站上使用不同的密碼(高) 3.使用一款支持群組共享的密碼管理工具(中) 4.給非網站的賬戶使用一個單獨的密碼管理工具(中)
原因
使用好的、唯一的密碼應當成為團隊內每一個成員都遵守的重要規則。竊取憑證是每時每刻都在發生的事情,無論是通過攻破計算機,竊取網站數據庫,站點遠程利用或其他各種方法。憑證絕對不能跨站重復使用,特別是在關鍵應用上。
浏覽器內的密碼管理工具
每個浏覽器內都有一個相當安全的保存密碼的機制,而且可以通過加密的數據傳輸跟雲存儲保持數據的同步。然而,這一機制有些嚴重的缺陷:
1.不能跨浏覽器工作
2.不提供任何群組共享憑證的方法
當然也有一些免費或廉價的具有良好支持性的密碼管理工具可以跨浏覽器、跨平台使用,而且支持群組共享功能(這通常屬於付費服務)。具體方案可以很容易的通過搜素引擎找到。
獨立的密碼管理工具
任何浏覽器內的密碼管理工具都有一個很大的缺點,即作為浏覽器的一部分它們很容易遭受入侵者的攻擊。如果這寧你很不舒服,那麼你應該選擇同時使用兩個不同的密碼管理工具,一個為集成到浏覽器內的,另一個則作為獨立的應用程序。其中,後者主要用於存儲高風險憑證,例如: root 密碼,數據庫密碼和其他 shell 賬戶憑證等等。
這樣的工具在團隊內與其他成員共享超級用戶憑證會非常有用(服務器 root 密碼,ILO 密碼數據庫管理員密碼,引導程序密碼等等)。
下面幾款工具可以幫助到你:
1.KeePassX,在第二版中改進了群組共享功能 2.Pass,使用文本和 PGP 文件,並集成了 git 3.Django-Pstore,使用 GPG 在管理員之間共享憑證 4.Hiera-Eyaml,如果你已經在你的設備上使用 Puppet,通過存儲加密 Hiera 數據可以很方便的跟蹤你服務器/服務的憑證
加固 SSH 和 PGP 私鑰安全
個人加密密鑰包括 SSH 和 PGP 私鑰是你工作站上最重要的東西,同時也是攻擊者最感興趣的東西,因為這使他們可以進一步攻擊你的設備或者在其他管理員面前冒充你。你應該采取額外的措施來確保這些密鑰的安全不被他人所竊取。
清單
1.使用強口令保護私鑰(高) 2.使用移動存儲設備保存 PGP 主密鑰(中) 3.將用於認證、簽名和加密的密鑰存儲到智能卡設備上(中) 4.配置 SSH 使用 PGP 認證密鑰作為私鑰(中)
原因
最好保護私鑰不被竊取的方法就是使用智能卡存儲加密使用的私鑰並且堅決不在工作站上留有備份。下面是幾家提供支持 OpenPGP 設備的廠商:
1.Kernel Concepts:如果你需要一個,這裡可以采購到支持 OpenPGP 的智能卡和 USB 讀卡器。
2.Yubikey NEO:它們不僅提供 OpenPGP 智能卡還提供很多不錯的功能(U2F,PIV,HOTP等等)。
確保 PGP 主密鑰沒有存儲在主工作站上並且只是使用子密鑰同樣非常重要。主密鑰只有在簽名其他密鑰和創建子密鑰時才被使用,而這些操作並不會經常出現。你可以參考Debian的子密鑰指南,來學習如何將主密鑰移動到移動存儲設備上以及如何創建子密鑰。
然後,你應當配置 gnupg 代理作為 ssh 代理,並使用基於智能卡的 PGP 認證密鑰作為你 ssh 的私鑰。這裡我們發布過一個詳細指南介紹如何使用智能卡讀卡器或Yubikey NEO 來完成這些。
如果你不願意做這些,那麼至少給你的 PGP 私鑰和 ssh 私鑰配置一個強大的密碼,這樣可以增加攻擊者竊取並使用它們的難度。
休眠或關機,不要掛起
當系統掛起時,內存中的內容依舊保存在存儲芯片上面並且可以被攻擊者讀取到,通過使用一種稱為冷啟動攻擊(Cold boot attack)的攻擊手段。如果你需要離開系統一段時間,比如離開一天時間,你最好關機或者休眠而不是掛起它。
工作站使用 SELinux
如果你正在使用捆綁有 SELinux 的發行版(如 Fedora),下面這些建議可以幫助你最大限度的提高安全性。
清單
1.確保你的工作站上強制啟用了 SELinux(高) 2.經常檢查,永遠不要盲目的執行 audit2allow -M(高) 3.永遠不要執行 setenforce 0(中) 4.將你的賬戶切換至 SELinux 用戶 staff_u(中)
原因
SELinux 是一種為擴展核心 POSIX 權限設計的強制訪問控制(MAC)。它非常成熟、強大,而且自推出後已經走過了很長的路。不過,現在還有不少的系統管理員依舊重復著過時的口頭禅“關閉它就行了”。
也就是說,SELinux 對工作站安全的貢獻微乎其微,因為大部分你運行的應用程序在運行時都不會受到限制。但它能提供網絡更高的安全性,因為它能有效的阻止攻擊者通過利用存在漏洞的服務進行提權操作,從而以 root 權限繼續訪問。
這裡我們的建議是強制開啟使用 SELinux。
永遠不要執行 setenforce 0
使用 setenforce 0 命令可以臨時使 SELinux 進入許可模式,盡管這操作很誘人但你永遠不應該使用它。這樣做實際上是關閉了整個系統的 SELinux,而你的目的也僅僅只是為了定位一個應用程序或者進程的錯誤。
替代 setenforce 0 的命令你可以使用 semanage permissive -a [somedomain_t],這樣只會將需要的進程假如到許可模式中。首先,通過執行命令 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
這將允許你使用程序並收集余下的 AVCs 數據,然後你可以配合 audit2allow 自己配置本地策略。一旦完成後你發現沒有新的 AVC 的拒絕信息,你就可以執行下列命令將其移除許可:
semanage permissive -d gpg_pinentry_t
以 SELinux 角色 staff_r 使用工作站
SELinux 原生支持配置角色(roles),用戶賬戶基於角色被禁止或賦予相應的權限。作為管理員你應當使用 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 安全就是一個無底洞,如果你想繼續深入挖掘或者了解更多關於特定發行版的安全特性,你可以參閱以下鏈接:
Fedora 安全指南
CESG Ubuntu 安全指南
Debian 安全手冊
Arch Linux 安全維基
Mac OSX 安全
??
許可證??
本文檔遵循以相同方式共享的知識共享許可協議 4.0 國際許可證。