天天看點

linux Selinux管理工具semanage

Selinux極大的增強了Linux系統的安全性,能将使用者權限關在籠子裡,如httpd服務,apache預設隻能通路/var/www目錄,并隻能監聽80和443端口,是以能有效的防範0-day類的攻擊。    

      舉例來說,系統上的 Apache 被發現存在一個漏洞,使得某遠端使用者可以通路系統上的敏感檔案(比如 /etc/passwd 來獲得系統已存在使用者),而修複該安全漏洞的 Apache 更新更新檔尚未釋出。此時 SELinux 可以起到彌補該漏洞的緩和方案。因為 /etc/passwd 不具有 Apache 的通路标簽,是以 Apache 對于 /etc/passwd 的通路會被 SELinux 阻止。

    相比其他強制性通路控制系統,SELinux 有如下優勢:

    ●控制政策是可查詢而非程式不可見的。

    ●可以熱更改政策而無需重新開機或者停止服務。

    ●可以從程序初始化、繼承和程式執行三個方面通過政策進行控制。

    ●控制範圍覆寫檔案系統、目錄、檔案、檔案啟動描述符、端口、消息接口和網絡接口

CentOS系統自帶的chcon工具隻能修改檔案、目錄等的檔案類型和政策,無法對端口、消息接口和網絡接口等進行管理,semanage能有效勝任SELinux的相關配置工作。

安裝:

# yum -y install policycoreutils-python

基本使用:

管理登入linux的使用者和SELinux局限的使用者之間的映射。

semanage login [-S store] -{a|d|m|l|n|D} [-sr] login_name | %groupname

管理政策子產品:

semanage module [-S store] -{a|d|l} [-m [--enable | --disable] ] module_name

管理網絡端口類型定義:

semanage port [-S store] -{a|d|m|l|n|D} [-tr] [-p proto] port | port_range

例:如apache采用非标準端口,需執行如下指令:

emanage port -a -t http_port_t -p tcp port_number

檢視目前允許的httpd端口:

# semanage port -l|grep http

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

http_cache_port_t udp 3130

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

pegasus_http_port_t tcp 5988

pegasus_https_port_t tcp 5989

注意:8888是我剛才添加的

管理網絡接口類型定義

semanage interface [-S store] -{a|d|m|l|n|D} [-tr] interface_spec

管理網絡節點類型定義

semanage node [-S store] -{a|d|m|l|n|D} [-tr] [ -p protocol ] [-M netmask] address

管理檔案中映射定義

semanage fcontext [-S store] -{a|d|m|l|n|D} [-frst] file_spec

semanage fcontext [-S store] -{a|d|m|l|n|D} -e replacement target

例一:

 指令參考:​​http://man.linuxde.net/semanage​​

例二:

讓 Apache 可以通路位于非預設目錄下的網站檔案

首先,用 semanage fcontext -l | grep '/var/www'

獲知預設 /var/www 目錄的 SELinux 上下文:

/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

從中可以看到 Apache 隻能通路包含 httpd_sys_content_t 标簽的檔案。

假設希望 Apache 使用 /srv/www 作為網站檔案目錄,那麼就需要給這個目錄下的檔案增加 httpd_sys_content_t 标簽,分兩步實作。

首先為 /srv/www 這個目錄下的檔案添加預設标簽類型:semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?' 

然後用新的标簽類型标注已有檔案:restorecon -Rv /srv/www 之後 Apache 就可以使用該目錄下的檔案建構網站了。

其中 restorecon 在 SELinux 管理中很常見,起到恢複檔案預設标簽的作用。

比如當從使用者主目錄下将某個檔案複制到 Apache 網站目錄下時,Apache 預設是無法通路,因為使用者主目錄的下的檔案标簽是 user_home_t。此時就需要 restorecon 将其恢複為可被 Apache 通路的 httpd_sys_content_t 類型:

restorecon -v /srv/www/foo.com/html/file.html

restorecon reset /srv/www/foo.com/html/file.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

繼續閱讀