SELinux簡單配置

餘二五發表於2017-11-17

       SELinux簡單配置

SELinux(Secrity-Enhanced Linux,安全增強式Linux)是一種強制存取控制的實現,它的作法是以最小許可權原則為基礎提供一些更強、更安全的強制存取控制架構來與核心的主要子系統共同動作。

SELinux等級有三個:

                  Enforcing:  強制的,如果違反則直接阻止

                  Permissive: 在違反規則時只警告,但是不阻止

                  Disables:表示  SELinux不啟用

在啟動SELinux時要重新啟動系統才能使用。

 

SELinux可以通過不同的方式進行啟動與關閉,也可以使它暫時的關閉與開啟

         永久關閉方法:1>setupàFirewall configuration-SELinux 自己選擇開啟關閉

                      2>使用命令:[root@localhost ~]# system-config-securitylevel 也可以選擇

        暫時關閉方法:setenforce 1   :暫時關閉SELinux

                      setenforce 0   :開啟SELinux Permissive

        簡單檢視SELinux的狀態:

                                getenforce 

     SELinux中訪問控制屬性就叫安全上下文,所有的客體(如檔案,程式間通訊)和主體(程式)都有與其並聯的安全上下文,一個安全上下文由使用者、角色、和型別識別符號3個部分組成,如下命令可以看到檔案的安全上下文屬性      

    

SELlinux中安全上下文中的使用者和角色識別符號除了對強制有一點約束之外對型別強制訪問控制策略沒有任何影響。我們看一個小例子來說明一下型別識別符號的限制。

示例1    httpSELinux應用

    [root@localhost www]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm

warning: httpd-2.2.3-31.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing…               ################################### [100%]

    1:httpd                ################################### [100%]

   現在我們可以正常的啟動http服務

   [root@localhost ~]# service httpd start

Starting httpd:                                            [  OK  ]

但是我們如果修改一下http預設的主目錄,會出現怎麼樣的情況呢!

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

<Directory “/var/www/html”>   修改為  <Directory “/html”>

建立目錄

[root@localhost ~]# mkdir /html

這時候我們再來重新啟動一次

[root@localhost ~]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd: httpd: Syntax error on line 306 of /etc/httpd/conf/httpd.conf: /etc/httpd/conf/httpd.conf:306: <Directory> was not closed.

                                                           [FAILED]

 

可以看到系統會出現錯誤,這個情況就屬於型別識別符號的使用

檢視一下/var/www/html的目錄識別符號

  [root@localhost ~]# ll -dZ /var/www/html

drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www/html

再檢視一下/html的目錄識別符號

[root@localhost ~]# ll -dZ /html

drwxr-xr-x  root root root:object_r:default_t          /html      

可以看出/var/www/html的目錄識別符號屬於httpd域,而/html則屬於default_t,httpd_t域執行的httpd程式只能監聽httpd_port-t型別的埠,並限制此域的程式只能存取標記為httpd_sys_content_t的網頁檔案,所以httpd服務不能正常啟動

但是並不是開啟了SELinux就不能夠改變主目錄的位置,我們可以把/html目錄修改為httpd_t的域,可以使用chcon命令來更改,我們把/html的域更改為httpd_t的域

[root@localhost ~]# chcon -t httpd_sys_content_t /html

[root@localhost ~]# ll -dZ /html

drwxr-xr-x  root root root:object_r:httpd_sys_content_t /html 

現在我們再次啟動一次http服務

[root@localhost ~]# service httpd start

Starting httpd:                                            [  OK  ]

啟動成功!!!!!!! 

有時候我們又想改變http服務的埠,那麼應該怎麼辦,可以直接啟動嗎,我們可以嘗試著啟動一次

把伺服器埠更改為800

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

Listen 80  改為:  Listen 800  

先安裝一個除錯工具

[root@localhost Server]# yum install setroubleshoot

啟動setroubleshoot服務

[root@localhost Server]# service setroubleshoot start

Starting setroubleshootd:                                  [  OK  ]

 啟動http伺服器

[root@localhost ~]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:800

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:800

no listening sockets available, shutting down

Unable to open logs                                         [FAILED]

這次直接提示了:不能繫結本機的800埠,也可以檢視日誌

[root@localhost Server]# tail  /var/log/messages   可以看到錯誤提示

Dec 27 00:51:56 localhost setroubleshoot: SELinux is preventing tpvmgp (cupsd_t) “execute_no_trans” to /usr/lib/vmware-tools/bin32/appLoader (lib_t). For complete SELinux messages. run sealert -l 383d449b-4b8c-49aa-b7f0-f19bb5499555

並且讓執行程式碼檢視清楚的錯誤資訊:sealert -l 383d449b-4b8c-49aa-b7f0-f19bb5499555,我們可以自行檢視其詳細資訊。

現在提示是不能繫結800埠,那是因為SELinuxhttpd的埠固定了幾個預設的埠

 [root@localhost Server]# semanage port -l | grep http

http_cache_port_t              tcp      3128, 8080, 8118, 11211, 10001-10010

http_cache_port_t              udp      3130, 11211

http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989

可以看到關於http的所有埠使用情況,但是800並沒有在預設使用行列中,所以系統不能繫結這個埠,也就啟動不了服務。

但是我們可以通過semanage命令來把這個埠新增到http可以使用的行列中

[root@localhost ~]# semanage port -a -t http_port-t _p tcp 800

再檢視一次埠使用行列

[root@localhost ~]# semanage port -l | grep http

http_cache_port_t              tcp      3128, 8080, 8118, 11211, 10001-10010

http_cache_port_t              udp      3130, 11211

http_port_t                    tcp      800, 80, 443, 488, 8008, 8009, 8443

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989 

現在800埠已經可以被http服務使用了,我們可以正常啟動http服務了

[root@localhost ~]# service httpd start

Starting httpd:                                            [  OK  ]

服務正常啟動!!!!!!!

本文轉自 guodong810 51CTO部落格,原文連結:http://blog.51cto.com/guodong810/1102358,如需轉載請自行聯絡原作者


相關文章