三分鐘學會 linux 的 selinux

一、簡介

安全增強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。

SELinux 主要由美國國家安全局開發。2.6 及以上版本的 Linux 內核都已經集成了 SELinux 模塊。

SELinux 的結構及配置非常複雜,而且有大量概念性的東西,要學精難度較大。很多 Linux 系統管理員嫌麻煩都把 SELinux 關閉了。

二、SELinux 基本概念

2.1 主體(Subject)

可以完全等同於進程。

注:爲了方便理解,如無特別說明,以下均把進程視爲主體。

2.2 對象(Object)

被主體訪問的資源。可以是文件、目錄、端口、設備等。

注:爲了方便理解,如無特別說明,以下均把文件或者目錄視爲對象。

2.3 政策和規則(Policy & Rule)

系統中通常有大量的文件和進程,爲了節省時間和開銷,通常我們只是選擇性地對某些進程進行管制。

而哪些進程需要管制、要怎麼管制是由政策決定的。

一套政策裏面有多個規則。部分規則可以按照需求啓用或禁用(以下把該類型的規則稱爲布爾型規則)。

規則是模塊化、可擴展的。在安裝新的應用程序時,應用程序可通過添加新的模塊來添加規則。用戶也可以手動地增減規則。

在 CentOS 7 系統中,有三套政策,分別是:

  1. targeted:對大部分網絡服務進程進行管制。這是系統默認使用的政策(下文均使用此政策)。

  2. minimum:以 targeted 爲基礎,僅對選定的網絡服務進程進行管制。一般不用。

  3. mls:多級安全保護。對所有的進程進行管制。這是最嚴格的政策,配置難度非常大。一般不用,除非對安全性有極高的要求。

政策可以在 /etc/selinux/config 中設定。

2.4 安全上下文(Security Context)

安全上下文是 SELinux 的核心。

安全上下文我自己把它分爲「進程安全上下文」和「文件安全上下文」。

一個「進程安全上下文」一般對應多個「文件安全上下文」。

只有兩者的安全上下文對應上了,進程才能訪問文件。它們的對應關係由政策中的規則決定。

文件安全上下文由文件創建的位置和創建文件的進程所決定。而且系統有一套默認值,用戶也可以對默認值進行設定。

需要注意的是,單純的移動文件操作並不會改變文件的安全上下文。

安全上下文的結構及含義

安全上下文有四個字段,分別用冒號隔開。形如:system_u:object_r:admin_home_t:s0。

三、SELinux 基本操作

3.1 查詢文件或目錄的安全上下文

命令基本用法

ls -Z

用法舉例

查詢 /etc/hosts 的安全上下文。

ls -Z /etc/hosts

執行結果

-rw-r–r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

3.2 查詢進程的安全上下文

命令基本用法

ps auxZ | grep -v grep | grep

用法舉例

查詢 Nginx 相關進程的安全上下文。

ps auxZ | grep -v grep | grep nginx

執行結果

system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx

system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process

3.3 手動修改文件或目錄的安全上下文

命令基本用法

chcon […]

選項功能-u 修改安全上下文的用戶字段-r 修改安全上下文的角色字段-t 修改安全上下文的類型字段-l 修改安全上下文的級別字段–reference 修改與指定文件或目錄相一致的安全上下文-R遞歸操作-h修改軟鏈接的安全上下文(不加此選項則修改軟鏈接對應文件)

用法舉例

修改 test 的安全上下文爲 aaa_u:bbb_r:ccc_t:s0。

chcon -u aaa_u -r bbb_r -t ccc_t test

3.4 把文件或目錄的安全上下文恢復到默認值

命令基本用法

restorecon [選項] […]

選項功能-v打印操作過程-R遞歸操作

用法舉例

添加一些網頁文件到 Nginx 服務器的目錄之後,爲這些新文件設置正確的安全上下文。

restorecon -R /usr/share/nginx/html/

3.5 查詢系統中的布爾型規則及其狀態

命令基本用法

getsebool -a

由於該命令要麼查詢所有規則,要麼只查詢一個規則,所以一般都是先查詢所有規則然後用 grep 篩選。

用法舉例

查詢與 httpd 有關的布爾型規則。

getsebool -a | grep httpd

執行結果

httpd_anon_write --> off

httpd_builtin_scripting --> on

httpd_can_check_spam --> off

httpd_can_connect_ftp --> off

#以下省略

3.6 開關一個布爾型規則

命令基本用法

setsebool [選項]

選項功能-P重啓依然生效

用法舉例

開啓 httpd_anon_write 規則。

setsebool -P httpd_anon_write on

3.7 添加目錄的默認安全上下文

命令基本用法

semanage fcontext -a -t “(/.*)?”

注:目錄或文件的默認安全上下文可以通過 semanage fcontext -l 命令配合 grep過濾查看。

用法舉例

爲 Nginx 新增一個網站目錄 /usr/share/nginx/html2 之後,需要爲其設置與原目錄相同的默認安全上下文。

semanage fcontext -a -t httpd_sys_content_t “/usr/share/nginx/html2(/.*)?”

3.8 添加某類進程允許訪問的端口

命令基本用法

semanage port -a -t -p

注:各種服務類型所允許的端口號可以通過 semanage port -l 命令配合 grep 過濾查看。

用法舉例

爲 Nginx 需要使用 10080 的端口用於 HTTP 服務。

semanage port -a -t http_port_t -p tcp 10080

四、SELinux 錯誤分析和解決

4.1 認識 SELinux 日誌

當開啓了 SELinux 之後,很多服務的一些正常行爲都會被視爲違規行爲(標題及下文中的錯誤均指違規行爲)。

這時候我們就需要藉助 SELinux 違規日誌來分析解決。

SELinux 違規日誌保存在 /var/log/audit/audit.log 中。

/var/log/audit/audit.log 的內容大概是這樣的。

type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1

type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg=‘op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=“root” exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success’

該文件的內容很多,而且混有很多與 SELinux 錯誤無關的系統審計日誌。我們要藉助 sealert 這個實用工具來幫忙分析(如果提示找不到命令的話請安裝 setroubleshoot 軟件包)。

4.2 使用sealert分析錯誤

命令基本用法

sealert -a /var/log/audit/audit.log

執行完命令之後,系統需要花一段時間去分析日誌中的違規行爲並給出分析報告。

五、selinux 開關

selinux策略模式

targeted:針對網路服務限制較多,針對本機限制較少,默認爲這個策略。

strict:完整的SELinux 限制,限制方面較爲嚴格。

selinux三種模式

enforcing:強制模式,代表SELinux運作中,且已經正確的開始限制domain/type了。

permissive:寬容模式,代表SELinux運作中,不過僅會有警告訊息並不會實際限制domain/type的存取.這種模式可以運來作爲SELinux的debug之用(看下什麼原因導致無法訪問)。

disabled:關閉模式

查詢當前selinux模式

getenforce

臨時關閉

setenforce 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章