如何正確配置SELinux使程序正常運行(targeted模式)

一、背景介紹

       近期在安裝配置MongoDB的時候,用自己配置的數據目錄始終無法正常運行,報錯爲ERROR: child process failed, exited with error Number 100,啓動日誌記錄“Attempt to create a lock file on a read-only directory: /mnt/disk1/mongo, terminating”,檢查目錄歸屬都爲mongod用戶,目錄權限爲755,按理來說權限是沒問題的。網上找了半天原因,都說只要刪除數據目錄中的mongod.lock,顯然都是不適合我的解決辦法。

        糾結了半天,終於想起可以看看是不是SELinux的原因。因爲SELinux用的少,所以一開始沒意識到這點。最終稍微學習了一下SELinux並配置完成,MongoDB成功啓動。

        這篇文章主要記錄一下如何進行SELinux的相關配置(targeted模式)以確保程序主體(進程)擁有對象資源(目錄、文件、設備等)的正確權限,主要爲配置的步驟,不多介紹相關的知識。

二、SELinux相關命令

        我用的系統是CentOS 7 1804,以下爲SELinux相關命令、文件和工具:

  1. ls -Z    # 查看文件或目錄的安全上下文(security context)
  2. ps -efZ    # 查看主體(進程)的安全上下文
  3. sestatus    # 查看當前SELinux的狀態
  4. getenforce    # 查看當前SELinux工作模式
  5. setenforce 0|1    # 設置SELinux工作模式
  6. /etc/selinux/config    # SELinux配置文件,修改重啓後生效
  7. seinfo    # SELinux相關信息查詢,可查詢用戶、角色、類型、bool規則等,具體可用-h查看help
  8. sesearch    # SELinux詳細規則查詢,具體可用-h查看help
  9. chcon    # 修改對象的安全上下文,具體可用-h查看help
  10. getsebool    # 查詢某個bool規則的開關狀態
  11. setsebool    # 開關某個bool規則
  12. restorecon    # 恢復默認的安全上下文
  13. semanage    # 豐富的管理功能呢
  14. 其他相關工具:setroubleshoot、auditd

標黑的爲本次所用主要命令。

三、配置過程

        SELinux最常用的模式爲targeted,在targeted模式下最主要的就是確保主體(subject,一般爲進程)的安全上下文和對象(object)的安全上下文滿足已生效的策略即可,targeted模式下主要關注源(進程)類型和目標(對象)類型的匹配。

3.0 確認當前SELinux工作狀態

sestatus

3.1 查看進程的類型

我這裏的進程爲mongod,進程的類型一般稱爲域(domain)。

語法:ps -efZ | grep -v grep | grep 進程名稱

system_u:system_r:mongod_t,分別爲用戶身份(indentify)、角色(role)、類型(type),targeted模式下主要關注類型(type)。

可以看到mongod的type爲mongod_t

3.2 查看指定源類型的相關規則

語法:sesearch -s 源類型 -t 目標類型    # 這裏不知道目標類型,所以使用grep匹配

sesearch -A -s mongod_t | grep 'mongod_t.* \\(file\\|dir\\) .*write.*create'     # (注意裏面的雙反斜槓實際爲單反斜槓)'-A'爲查看allow的規則,' (file|dir) '爲匹配文件和目錄資源,還有兩個需要的關鍵權限:'write'要有寫權限,'create'要有創建文件權限

可以看到有三個同時有dir和file的配置,且權限完整。根據目標類型名稱基本可以判斷用途,這裏選擇mongod_var_lib_t作爲目標類型。

3.3 配置目標類型

語法:chcon [-R] -t 類型名稱 文件或目錄

sudo chcon -R -u system_u -t mongod_var_lib_t mongo

再運行ls -Z可以查看已設置成功。

運行 mongod,可以成功運行,配置完畢。

四、參考資料

鳥哥的Linux私房菜:http://cn.linux.vbird.org/linux_basic/0440processcontrol_5.php

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