Linux下selinux簡單梳理

散盡浮華發表於2016-08-14

 

在linux環境下執行某些程式時,偶爾會遇到來一個關於selinux的強制模式不可執行的情況,這種情況下需要關閉selinux或者將enforcing改為permissive模式後才能進行執行。selinux是Linux核心中提供的強制訪問控制(MAC)系統,下面就對selinux的幾種模式及其轉換進行總結:

selinux的啟動、關閉與檢視
1)目前selinux支援三種模式,分別如下:
•enforcing:強制模式,代表selinux運作中,且已經正確的開始限制 domain/type 了;
•permissive:寬容模式:代表selinux運作中,不過僅會有警告訊息並不會實際限制 domain/type 的存取。這種模式可以運來作為 selinux 的 debug 之用;
•disabled:關閉,selinux 並沒有實際運作。
 
2)檢視selinux的模式
[root@localhost ~]# getenforce 
Enforcing       //顯示出目前的模式為 Enforcing
 
3)檢視 selinux的政策 (Policy)?
[root@localhost ~]# sestatus
selinux status: enabled      //是否啟動 selinux
selinuxfs mount: /selinux     //selinux 的相關檔案資料掛載點
Current mode: enforcing           //目前的模式
Mode from config file: enforcing     //設定檔指定的模式
Policy version: 21
Policy from config file: targeted     //目前的政策為何?
 
4)通過配置檔案調整selinux的引數
[root@localhost ~]# vim /etc/selinux/config
selinux=enforcing           //調整 enforcing|disabled|permissive
selinuxTYPE=targeted        //目前僅有 targeted 與 strict
 
5)selinux的啟動與關閉
上面是預設的政策與啟動的模式!需要注意的是,如果改變了政策則需要重新開機;如果由enforcing或permissive改成disabled,或由disabled改成其他兩個,那也必須要重新開機。這是因為 selinux 是整合到核心裡面去的, 你只可以在 selinux 運作下切換成為強制 (enforcing) 或寬容 (permissive) 模式,不能夠直接關閉 selinux 的!
同時,由selinux關閉 (disable) 的狀態到開啟的狀態也需要重新開機!
 
檢視selinux狀態:
a)/usr/sbin/sestatus -v    //如果selinux status引數為enabled即為開啟狀態
selinux status: enabled
b)getenforce       //也可以用這個命令檢查
 
 
關閉selinux:
a)臨時關閉(不用重啟機器):
setenforce 0      //設定selinux 成為permissive寬容模式
setenforce 1      //設定selinux 成為enforcing強制模式
 
b)修改配置檔案需要重啟機器:
修改/etc/selinux/config 檔案
將selinux=enforcing改為selinux=disabled
重啟機器即可
 
如果你要啟動selinux的話,請將上述的selinux=enforcing設定妥當,並且指定selinuxTYPE=targeted 這一個設定,並且到/boot/grub/menu.lst這個檔案去,看看核心有無關閉selinux。
[root@localhost ~]# vi /boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet selinux=0
initrd /initrd-2.6.18-92.el5.img
 
如果要啟動selinux ,則不可以出現 selinux=0的字樣在kernel後面!

=======================================================
溫馨提示一個坑點:
一般而言,要關閉伺服器的selinux功能,常用下面兩種方法:
1)臨時關閉
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce

2)永久關閉
[root@localhost ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled
[root@localhost ~]# reboot

之前碰到一個坑,如上設定SELINUX為disabled,並reboot重啟伺服器後,selinux並沒有關閉!

最後發現原因是:
/etc/selinux/config檔案裡面的SELINUX值沒有改過來,所以重啟不生效!
一般而言,伺服器系統安裝後,/etc/sysconfig/selinux會預設為/etc/selinux/config的軟連結,所以只需修改/etc/sysconfig/selinux檔案中的SELINUX為disabled即可!
因為系統啟動後預設會以/etc/selinux/config為主。

[root@localhost ~]# ll /etc/sysconfig/selinux 
lrwxrwxrwx. 1 root root 17 Apr 27 02:41 /etc/sysconfig/selinux -> ../selinux/config

但之前碰到過的現象是: /etc/sysconfig/selinux 並不是/etc/selinux/config的軟連結,所以這個細節要留意,如果不是軟連結關係,就最好兩個檔案都修改下!

相關文章