溫馨提示×

selinux如何自定義ubuntu規則

小樊
50
2025-09-27 10:20:35
欄目: 智能運維

1. 安裝SELinux管理工具
在Ubuntu上自定義SELinux規則前,需先安裝必要的工具包。執行以下命令安裝selinux-basics(基礎SELinux管理工具)、selinux-policy-default(默認策略)及auditd(審計工具,用于收集拒絕日志):

sudo apt update
sudo apt install selinux-basics selinux-policy-default auditd

2. 啟用SELinux并設置為Permissive模式
Ubuntu默認可能未啟用SELinux,需通過修改配置文件開啟。編輯/etc/selinux/config文件,取消SELINUXSELINUXTYPE的注釋,并設置為以下值:

SELINUX=permissive  # 先設為permissive模式(僅記錄拒絕事件,不阻止操作)
SELINUXTYPE=targeted  # 使用targeted策略(針對特定進程,不影響系統整體)

保存后重啟系統使配置生效:

sudo reboot

:Permissive模式是自定義規則的必要步驟,避免因規則錯誤導致系統無法正常運行。

3. 創建自定義SELinux策略模塊
自定義規則需通過.te(類型啟用)文件定義。以下以“允許my_script進程訪問/var/www/html目錄”為例,步驟如下:

  • 創建策略文件目錄
    mkdir -p ~/selinux-custom-policy
    cd ~/selinux-custom-policy
    
  • 編寫.te文件
    創建my_custom_policy.te文件,內容如下(關鍵部分說明見注釋):
    policy_module(my_custom_policy, 1.0)  # 定義模塊名稱(my_custom_policy)和版本(1.0)
    
    # 聲明類型(若未定義,需手動添加)
    type my_script_t;        # 進程類型(對應my_script的可執行文件)
    type my_script_exec_t;   # 可執行文件類型
    type httpd_sys_rw_content_t;  # 目標目錄類型(Apache默認可讀寫目錄)
    
    # 定義進程域(將進程與可執行文件關聯)
    init_daemon_domain(my_script_t, my_script_exec_t)
    
    # 允許規則(允許my_script_t進程對httpd_sys_rw_content_t類型的目錄進行讀寫)
    allow my_script_t httpd_sys_rw_content_t:dir { read write };
    
    保存文件后,可通過audit2allow工具從系統拒絕日志快速生成規則(適用于已知拒絕事件的場景):
    grep avc /var/log/audit/audit.log | audit2allow -M my_custom_policy
    
    此命令會生成my_custom_policy.te(類型定義)和my_custom_policy.pp(編譯后的策略模塊)文件。

4. 編譯并加載自定義策略模塊
使用checkmodule(編譯類型定義)和semodule_package(打包策略模塊)工具編譯.te文件:

checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te
semodule_package -o my_custom_policy.pp -m my_custom_policy.mod

編譯完成后,使用semodule命令加載模塊:

sudo semodule -i my_custom_policy.pp

加載后,模塊會永久保存到SELinux策略中(無需重啟系統)。

5. 應用文件上下文并驗證規則

  • 設置文件/目錄的安全上下文
    使用semanage fcontext命令為自定義目錄添加上下文(關聯到httpd_sys_rw_content_t類型),確保進程能識別:
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
    
    -a表示添加規則,-t指定類型,(/.*)?表示匹配/var/www/html及其子目錄。
  • 應用上下文到文件系統
    使用restorecon命令恢復目錄的實際上下文:
    sudo restorecon -Rv /var/www/html
    
    -R表示遞歸處理,-v顯示詳細過程。
  • 驗證規則是否生效
    查看SELinux拒絕日志,確認無與新規則沖突的拒絕事件:
    sudo ausearch -m avc -ts recent | audit2why
    
    若輸出顯示“avc: denied”事件消失,則說明規則生效。

注意事項

  • 自定義規則需謹慎編寫,錯誤的規則可能導致系統安全性降低或功能受限(如允許進程訪問敏感文件)。
  • 建議在測試環境中驗證規則,確認無誤后再應用到生產環境。
  • Ubuntu對SELinux的支持不如CentOS/RHEL完善,部分高級功能可能無法使用,若需更全面的SELinux支持,建議選擇后者。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女