增加 SELinux Policy
.K.T. | 2008 年 05 月 05 日 | 上午 10:11之前在設定 RSyslog 的時候
曾經遇到 SELinux(註:1) 的問題
現在來說一下我是怎麼解決的好了
我遇到的問題是
SELinux 不准 RSyslog 將 Log 寫入 MySQL
所以
我利用 audit2allow 來增加 Policy(註:2)
做法十分簡單
首先
利用 audit2allow 將 /var/log/audit/audit.log 中
被 SELinux 擋住的記錄讀出來
並且輸出成 Local Module 成 newpolicy.te
audit2allow -m local -l -i /var/log/audit/audit.log > newpolicy.te
所產生的 newpolicy.te 可能長得像這樣
require {
type syslogd_t;
type mysqld_var_run_t;
class sock_file write;
}
#============= syslogd_t ==============
allow syslogd_t mysqld_var_run_t:sock_file write;
在這裡
必須將 require {} 括號內的內容及最後一行記下來
接著
修改之前所產生的 local.te
將剛剛所記下的 require {} 括號內的內容及最後一行
填進 local.te 中
並且依需要
修改第 1 行的版本號碼
在這邊說明一下
如果之前曾經使用過 audit2allow 產生 Local Module
也就是下過下面這個指令
audit2allow -m local -l -i /var/log/audit/audit.log > local.te
audit2allow 會產生一個叫 local.te 的檔案
在這個步驟中
就必須修改之前所產生的 local.te
如果是第一次使用 audit2allow
這一步就可以跳過
再來
利用 checkmodule 指令
Compile 剛剛修改好的 local.te
checkmodule -M -m -o local.mod local.te
再利用 semodule_package 指令
建立 SELinux Policy Module Package
semodule_package -o local.pp -m local.mod
最後
使用 semodule 指令
安裝剛剛所做出來的 SELinux Policy Module Package
semodule -i local.pp
安裝完成後
可以使用
semodule -l |grep "local"
查看是否有安裝成功
到這邊就已經完成了
以後再遇到同樣的問題
只要重複上面的動作就 OK 了
註:
- SELinux:Security-Enhanced Linux,中文翻做「安全增強的 Linux」是一種強制存取控制(mandatory access control)的實現。它的作法是以最小權限原則(principle of least privilege)為基礎,在Linux核心中使用Linux安全模組(Linux Security Modules)。 [↩]
- Policy:如果翻成中文,應該是叫「政策」,不過跟政治一點關係也沒有,這個詞在資訊相關領域還滿常出現的,個人習慣直接說英文(因為覺得叫「政策」怪怪的)。 [↩]







剛剛在「酷學園」看到一份關於 SELinux 的簡報
看了對 SELinux 的觀念會更清楚喔!