在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的軟連結,所以這個細節要留意,如果不是軟連結關係,就最好兩個檔案都修改下!