1. 準備工作:安裝SELinux基礎工具與依賴
在Ubuntu上定制SELinux策略前,需先安裝核心工具包。運行以下命令安裝selinux-basics
(基礎SELinux配置)、selinux-policy-default
(默認策略)及管理工具:
sudo apt update
sudo apt install selinux-basics selinux-policy-default policycoreutils libselinux1 auditd
安裝完成后,啟用SELinux并設置為permissive
模式(允許記錄拒絕事件但不阻止操作):
sudo setenforce 0 # 臨時切換至permissive模式
sudo sed -i 's/SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config # 永久生效
重啟系統使設置生效:sudo reboot
。
2. 查看當前SELinux狀態
使用sestatus
命令確認SELinux運行狀態,需確保Current mode
為permissive
(測試階段)或enforcing
(正式生效):
sestatus
輸出示例:
SELinux status: enabled
Current mode: permissive
Mode from config file: permissive
Policy version: 35
Policy from config file: targeted
3. 定制個性化策略:編寫.te規則文件
SELinux策略的核心是類型強制(TE),需通過.te
文件定義進程(主體)與資源(客體)的訪問規則。以下是常見場景示例:
場景1:允許自定義應用myapp
訪問/opt/myapp/data
目錄
創建/etc/selinux/targeted/src/policy/myapp_policy.te
文件,內容如下:
module myapp_policy 1.0;
# 聲明類型:進程類型(myapp_process_t)與文件類型(myapp_data_t)
type myapp_process_t;
type myapp_data_t;
# 允許myapp_process_t讀寫myapp_data_t類型的目錄
allow myapp_process_t myapp_data_t:dir { read write search };
allow myapp_process_t myapp_data_t:file { read write open };
場景2:允許Apache(httpd_t)訪問自定義端口(8080)
若需讓Apache監聽非標準端口(如8080),需修改端口標簽并添加規則:
module apache_custom_port 1.0;
# 聲明端口類型(http_port_t為Apache默認端口類型)
type http_port_t;
# 允許httpd_t進程綁定8080端口
allow httpd_t port_t:tcp listen;
注:若端口未被標記為http_port_t
,需額外創建.fc
文件(見步驟4)。
4. (可選)定義文件上下文:.fc文件
若需為特定文件/目錄分配自定義SELinux標簽(如場景2中的8080端口),需創建.fc
文件。例如,在/etc/selinux/targeted/src/policy/apache_custom_port.fc
中添加:
# 將8080/tcp端口標記為http_port_t類型
portcon tcp 8080 system_u:object_r:http_port_t:s0
此文件用于關聯資源與SELinux類型,確保策略規則生效。
5. 編譯與加載自定義策略模塊
使用SELinux提供的工具鏈編譯.te
(及.fc
)文件為可加載模塊:
# 編譯.te文件為.mod中間文件
checkmodule -M -m -o myapp_policy.mod myapp_policy.te
# 打包.mod文件為.pp可加載模塊(含.fc文件則一并處理)
semodule_package -o myapp_policy.pp -m myapp_policy.mod
# 加載模塊至SELinux策略
sudo semodule -i myapp_policy.pp
加載后,可通過semodule -l | grep myapp_policy
驗證模塊是否安裝成功。
6. 調試與驗證策略
ausearch
命令獲取最近的SELinux拒絕事件:sudo ausearch -m avc -ts recent
audit2allow
工具根據日志生成修正規則(示例):sudo ausearch -m avc -ts recent | audit2allow -M myapp_fix
sudo semodule -i myapp_fix.pp # 加載修正模塊
enforcing
模式(sudo setenforce 1
),運行目標應用(如myapp
或Apache),確認是否按預期工作。7. 切換至Enforcing模式(正式生效)
測試無誤后,將SELinux切換至enforcing
模式(強制執行策略):
sudo setenforce 1
如需永久生效,確保/etc/selinux/config
中SELINUX=enforcing
。
注意事項
sudo cp -r /etc/selinux/targeted /etc/selinux/targeted.bak
。allow *:*:*
),遵循最小權限原則,僅授予必要權限。targeted
策略(針對特定服務),若需全局定制,可切換至mls
策略(多級安全),但需更高配置復雜度。