SELinux 全稱【安全增強(qiáng)型 Linux(Security-Enhanced Linux)】,它是一個 Linux 內(nèi)核模塊漱病,也是 Linux 的一個安全子系統(tǒng)牙甫。SELinux 主要作用就是最大限度地減小系統(tǒng)中服務(wù)進(jìn)程可訪問的資源(最小權(quán)限原則)狠裹。
以 MongoDB 引發(fā)的 SELinux 異常為例:
當(dāng)使用 systemctl 啟動應(yīng)用程序時竞帽,如果提示類似下圖錯誤扛施,則可能是由 SELinux 引起的安全策略問題。
解決方案一(最安全屹篓,首選方案):
- 方法一
在運(yùn)行程序(無論成功或者失敻碓)后,SELinux 會生成 audit 日志堆巧,可以從日志中導(dǎo)出所有不符合策略妄荔,生成策略源文件和對應(yīng)的編譯文件泼菌,直接安裝。操作如下:
[centos@host ~]$ journalctl -xe
# SELinux is preventing ...
# allow this access for now by executing:
# ausearch -c 'mongod' --raw | audit2allow -M my-mongod
# semodule -X 300 -i my-mongod.pp
[centos@host ~]$ sudo ausearch -c 'mongod' --raw | sudo audit2allow -M my-mongod
[centos@host ~]$ sudo semodule -X 300 -i my-mongod.pp
注意:這個過程需要反復(fù)若干次啦租,因?yàn)榘踩呗詥栴}只能發(fā)現(xiàn)一條解決后哗伯,才能發(fā)現(xiàn)另一條。
- 方法二
使用文本編輯器在創(chuàng)建 "my-mongod.te" 策略源文件篷角,例如:
[centos@host ~]$ sudo gedit my-mongod.te
編寫以下內(nèi)容并保存:
module my-mongod 1.0;
require {
type mongod_t;
type cgroup_t;
class file { getattr open read };
}
#============= mongod_t ==============
#!!!! This avc is allowed in the current policy
allow mongod_t cgroup_t:file { getattr open read };
編譯并安裝策略文件:
[centos@host ~]$ sudo checkmodule -M -m -o my-mongod.mod my-mongod.te
[centos@host ~]$ sudo semodule_package -o my-mongod.pp -m my-mongod.mod
[centos@host ~]$ sudo semodule -X 300 -i my-mongod.pp
注意:這個方法一般在所有策略都已發(fā)現(xiàn)的情況下比較適用焊刹。
解決方案二(最有效,兜底方案):
第一步内地,臨時關(guān)閉 SELinux。
[centos@host ~]$ sudo setenforce 0
第二步赋除,修改 SELinux 配置文件阱缓,永久關(guān)閉 SELinux。
使用文本編輯器打開"/etc/selinux/config"文件:
[centos@host ~]$ sudo gedit /etc/selinux/config
將 "SELINUX" 參數(shù)設(shè)置為:"permissive" 或者 "disabled"举农,并保存:
# enforcing - 表示啟用 SELinux 安全策略荆针。
# permissive - 表示啟用 SELinux 安全策略,但不強(qiáng)制驗(yàn)證颁糟。如果執(zhí)行第一步可以正常運(yùn)行航背,則建議設(shè)置此值。
# disabled - 關(guān)閉 SELinux 安全策略棱貌,相當(dāng)于沒有安裝 SELinux玖媚。
SELINUX=disabled
重啟服務(wù)器:
[centos@host ~]$ sudo reboot