一直以來,Red Hat 系的許多教程,都會建議你關閉 SELinux。確實,啓用 SELinux 可能會造成許多莫名其妙的錯誤。但在實際生產環境,甚至是用戶工作站,Red Hat 都建議將 SELinux 設爲 enforcing 模式,因爲它在關鍵時候可以成爲你係統安全的最後一道防線。
程序是不可信的
技術的發展日新月異,我們的系統安全卻不容樂觀。wooyun.org 時不時爆出的各種漏洞,都在提醒我們 程序總是存在缺陷的。
傳統的操作系統採用 DAC 機制,它針對用戶進行訪問控制,系統會信任用戶執行的所有程序,但往往用戶無法判斷程序是否存在安全問題。
後來,出現了 MAC 機制,它以進程爲訪問控制的首要目標,通過規則嚴格限制程序運行時可以執行的系統調用。
另外,在保密級別較高的地方,根據資源的機密程度結合 MAC 又衍生出了 MLS 多級安全策略。
我們的主角 SELinux 是 MAC+MLS 的實現方案之一,它最初由 NSA 基於 flask 框架開發,目前主要由 Tresys 和 Red Hat 進行維護。
用戶與隱私
自 1987 年 9 月 20 日,CANET 向世界發出第一封 E-mail 爲標誌,互聯網正式進入中國大陸。截至 2015 年 6 月,我國網民已達到 6.68 億人。隨着網絡的發展,隱私與安全一直是大受關注的話題。現在,隨便什麼應用/網站都需要註冊,各種客戶端都提供網絡連接功能。在不知不覺中,你的聯繫人,朋友圈都展示在了網上。可以負責任的說,在互聯網面前,我們每個人都沒有隱私。
保護個人隱私是一個系統工程。它需要可信的硬件/固件,可信的操作系統,可信的應用程序,可信的網絡環境,可信的用戶。
- 硬件方面:X86、Arm 體系就是事實的工業標準,但目前沒有可信的第三方機構進行評估。
- 系統方面:儘量使用開源操作系統,Open Source 可以確保系統沒有惡意行爲。
- 早在 1985 年,美國國防部公佈了 可信計算機系統評估標準,該標準將計算機系統分爲 A(A1), B(B3 B2 B1), C(C2 C1), D(D1) 四個等級,共7個級別。沒有 SELinux 的 Linux 和 Windows 一樣都處於 C2 級別。
- 應用程序:儘量使用開源軟件,閉源軟件或多或少都會侵犯用戶隱私。
- 網絡方面:儘量不訪問/註冊來歷不明的網站,儘量不使用公共 Wifi。事實上,個人無法控制運營商的行爲。
- 用戶方面:用戶對於隱私保護有最重要的作用。俗話說得好,“機器是死的,人是活的“。只有用戶養成了良好的習慣,才能保護好隱私。切勿抱有”我的信息並沒有什麼卵用“的僥倖心理。
SELinux 與隱私保護
SELinux 爲系統提供了額外的一層保護,能夠在一定程度上防止隱私泄露。這裏提一下基本概念, SELinux 是基於標籤的強制訪問控制系統。所有系統資源都包含標籤上下文,只有進程標籤符合訪問對象(文件/socket/dbus…)的標籤,才允許進程訪問該資源。而標籤又關聯了一系列角色(role),角色又關聯了一系列 SELinux user。通過將 SELinux user 與 Linux user 關聯,該用戶就具有了這些標籤。此時,用戶執行的程序就都處於這些標籤規則的限制範圍了。
在 Fedora 中,默認用戶關聯 unconfined_t 標籤,該標籤是無限制的,相當於未啓用 SELinux。這主要爲了兼容性考慮,targeted 規則僅限制網絡相關應用。Red Hat 建議用戶關聯非 unconfined_t 標籤來提高安全性。
1.配置賬戶映射 SELinux user
$ sudo semanage login -a -s staff_u -r s0:c0.c1023 Jone
2.配置 sudo,指定需要轉換的 ROLE/TYPE
$ sudo echo "Jone ALL=(ALL) TYPE=unconfined_t ROLE=unconfined_r ALL" >> /etc/sudoers.d/Jone
3.對 home 目錄重新進行標記,並重啓
$ restorecon -R -v /home/Jone
4.現在你的登陸 shell 就是以 staff_u 用戶運行
$ id -Z
staff_u:staff_r:staff_t:s0-s0:c0.c1023
5.如果你需要執行系統管理操作,可使用 sudo 進行提權,這和原來一模一樣
$ sudo id -Z
staff_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
廣告
最後,插播廣告。Fedora 社區源正在使用 SELinux 加固軟件,目前已完成了 sogoupinyin。
安裝 sogoupinyin SELinux 模塊,禁止 sogou 訪問網絡:
$ sudo dnf install sogoupinyin sogoupinyin-selinux
$ sudo setsebool -P sogou_access_network=0
參考
1.TCSEC, Trusted Computer System Evaluation Criteria
2.SELinux Project
3.原文: Fedora 安裝後需要做的第一件事
– EOF –