天天看點

selinux實戰手冊

#selinux實戰手冊

#SELinux的政策與規則管理相關指令:seinfo指令、sesearch指令、getsebool指令、setsebool指令、semanage指令。

#selinux簡介

   SELinux(Security-Enhanced Linux) 是美國國家安全局(NSA)對于強制通路控制的實作,是 Linux曆史上最傑出的新本機安全性授權。

NSA是在Linux社群的幫助下開發了一種通路控制體系,在這種通路控制體系的限制下,程序隻能通路那些在他的任務中所需要檔案。

    RHEL、CENTOS、UBUNTU等Linux發行版系統預設都開啟了selinux安全功能,如果不熟悉用法,可直接将selinux關閉。

#selinux狀态設定

查狀态:getenforce

臨時開啟/關閉selinux:setenforce   1/0   [1開啟,0關閉]

#配置檔案:

cat  /etc/selinux/config   //有效配置如下:

SELINUX=enforcing     //狀态為強制

SELINUXTYPE=targeted

說明:狀态有enforcing強制,permissive自由(寬容),disable禁用。

     Enforcing狀态,就是你違反了政策,你就無法繼續操作下去。

     permissive狀态,就是Selinux有效,但是即使你違反了政策的話它讓你繼續操作,但是把你的違反的内容記錄下來。在我們開發政策的時候非常的有用。

相當于Debug模式。

技巧:在核心加載過程中關閉selinux,grub界面執行:

kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0

-----------------

查詢所有布爾設定狀況:getsebool -a

檢視檔案的selinux上下檔案屬性:ls  -Z   /etc/hosts

檢視目錄的:ls  -dZ   /etc

chcon:更改檔案的selinux标簽

mkdir   /sea    

ls  -dZ   /sea

chcon  -t  etc_t   /sea    //給目錄/sea設定selinux安全類型

cp  -Z   /etc/passwd   /sea/pa    //複制檔案及其selinux屬性

ls  -Z  /sea/pa      //檢視檔案的selinux屬性

chcon指令

功能:修改對象(檔案)的安全上下文,比如:使用者、角色、類型、安全級别。也就是将每個檔案的安全環境變更至指定環境。

使用--reference選項時,把指定檔案的安全環境設定為與參考檔案相同。chcon指令位于/usr/bin/chcon。 

文法:chcon [選項]... 環境 檔案... 

      chcon [選項]... [-u 使用者] [-r 角色] [-l 範圍] [-t 類型] 檔案... 

      chcon [選項]... --reference=參考檔案 檔案... 

選項:--help:顯示此幫助資訊并退出。

     -h, --no-dereference:影響符号連接配接而非引用的檔案。 

     --reference=參考檔案:使用指定參考檔案的安全環境,而非指定值。 

     -R, --recursive:遞歸處理所有的檔案及子目錄。 

     -v, --verbose:為處理的所有檔案顯示診斷資訊。 

     -u, --user=使用者:設定指定使用者的目标安全環境。 

     -r, --role=角色:設定指定角色的目标安全環境。 

     -t, --type=類型:設定指定類型的目标安全環境。 

     -l, --range=範圍:設定指定範圍的目标安全環境。 

以下選項是在指定了-R選項時被用于設定如何穿越目錄結構體系。如果您指定了多于一個選項,那麼隻有最後一個會生效。 

     -H:如果指令行參數是一個通到目錄的符号連結,則周遊符号連結。 

     -L:周遊每一個遇到的通到目錄的符号連結。 

     -P:不周遊任何符号連結(預設)。  

     --version:顯示版本資訊并退出。 

執行個體 如果你想把這個ftp共享給匿名使用者的話,需要開啟以下: 

chcon -R -t public_content_t /var/ftp 

如果你想讓你設定的FTP目錄可以上傳檔案的話,SELINUX需要設定: 

chcon -t public_content_rw_t /var/ftp/incoming 

允許使用者HHTP通路其家目錄,該設定限僅于使用者的家目錄首頁: 

setsebool -P httpd_enable_homedirs 1 

chcon -R -t httpd_sys_content_t ~user/public_html 

如果你希望将samba目錄共享給其他使用者,你需要設定: 

chcon -t samba_share_t /directory 

共享rsync目錄時: 

chcon -t public_content_t /directories

##查詢SElinux政策内各項規則的布爾值。getsebool

文法:getsebool [-a] [布爾值條款]

選項:-a  列出目前系統上面的所有布爾值條款設定為開啟或關閉值。

執行個體 查詢本系統内所有的布爾值設定狀況: 

getsebool -a    //部分結果如下

allow_ftpd_anon_write --> off     //是否允許ftpd匿名寫操作,off為關,on為開

allow_ftpd_full_access --> off     //是否允許ftpd完全通路

allow_ftpd_use_cifs --> off       //允許ftpd使用cifs通用網際網路檔案系統

allow_ftpd_use_nfs --> off        //允許ftpd使用nfs

ftp_home_dir --> off        //允許通路ftp家目錄

ftpd_connect_db --> off        //允許ftpd連接配接資料

ftpd_use_fusefs --> off        //允許ftpd使用fusefs

ftpd_use_passive_mode --> off        //允許ftpd被動模式

httpd_enable_ftp_server --> off      //在httpd上啟用ftp服務

tftp_anon_write --> off      //允許tftp匿名寫權限

tftp_use_cifs --> off      //允許tftp使用cifs

tftp_use_nfs --> off      //允許tftp使用nfs

allow_httpd_anon_write --> off   //允許httpd匿名寫權限

httpd_enable_homedirs --> off    //允許httpd通路使用者家目錄

getsebool httpd_enable_homedirs 

setsebool -P httpd_enable_homedirs=0   //0是關閉 1是開啟

-------------------

##SELinux的政策與規則管理相關指令:

seinfo指令、sesearch指令、getsebool指令、setsebool指令、semanage指令。

##setsebool指令

功能:用來修改SElinux政策内各項規則的布爾值。

文法:setsebool [-P] 布爾值=[0|1]

選項:-P:直接将設定值寫入配置檔案,該設定資料将來會生效的。

執行個體 允許vsvtp匿名使用者寫入權限: 

setsebool -P allow_ftpd_anon_write=1 

如果你希望你的ftp使用者可以通路自己的家目錄的話,需要開啟: 

setsebool -P ftp_home_dir 1 

如果你希望将vsftpd以daemon的方式運作的話,需要開啟: 

setsebool -P ftpd_is_daemon 1 

你可以讓SElinux停止保護vsftpd的daemon方式動行: 

setsebool -P ftpd_disable_trans 1 

HTTP被設定允許cgi的設定: 

setsebool -P httpd_enable_cgi 1 

允許httpd通路終端: setsebool -P httpd_tty_comm 1 

關閉Selinux的關于httpd程序守護的保護: 

setsebool -P httpd_disable_trans 1 service httpd restart 

關于named、master更新selinux設定: 

setsebool -P named_write_master_zones 1 

關閉named的程序守護保護: 

setsebool -P named_disable_trans 1 

service named restart Selinux

将本機的NFS共享設定成隻讀: 

setsebool -P nfs_export_all_ro 1 SElinux

将本機的NFS共享設定成可讀可寫: 

setsebool -P nfs_export_all_rw 1 

如果你想要将遠端NFS的家目錄共享到本機,需要開啟: 

setsebool -P use_nfs_home_dirs 1 

如果samba伺服器共享目錄給多個域,則需要: 

setsebool -P allow_smbd_anon_write=1 

samba伺服器要共享家目錄時: 

setsebool -P samba_enable_home_dirs 1 

如果你需在本機上使用遠端samba伺服器的家目錄: 

setsebool -P use_samba_home_dirs 1 

關閉selinux關于samba的程序守護的保護: 

setsebool -P smbd_disable_trans 1 

service smb restart 

允許rsync其他使用者寫入時: 

setsebool -P allow_rsync_anon_write=1 

停止rsync的程序保護 

setsebool -P rsync_disable_trans 1 

允許系統使用kerberos: 

setsebool -P allow_kerberos 1 

系統工作在nis環境時: 

setsebool -P allow_ypbind 1

--------------------

restorecon指令

功能:用來恢複SELinux檔案屬性即恢複檔案的安全上下文。 

文法 restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...] 

選項 -i:忽略不存在的檔案。

-f:infilename 檔案 infilename 中記錄要處理的檔案。

-e:directory 排除目錄。 -R/-r:遞歸處理目錄。

-n:不改變檔案标簽。 

-o/outfilename:儲存檔案清單到 outfilename,在檔案不正确情況下。 

-v:将過程顯示到螢幕上。 

-F:強制恢複檔案安全語境。 

執行個體:假設CentOS安裝了apache,網頁預設的主目錄是/var/www/html,我們經常遇到這樣的問題,

在其他目錄中建立了一個網頁檔案,然後用mv移動到網頁預設目錄/var/www/html中,但是在浏覽器中

卻打不開這個檔案,這很可能是因為這個檔案的SELinux配置資訊是繼承原來那個目錄的,

與/var/www/html目錄不同,使用mv移動的時候,這個SELinux配置資訊也一起移動過來了,進而導緻

無法打開頁面,具體請看下面的執行個體: /*使用CentOS舉例,如果預設沒有安裝apache,確定網絡連接配接,

使用下面的指令安裝

*/ [[email protected] ~]# yum install httpd /*

我們在root的家目錄建立一個html檔案

*/ [[email protected] ~]# pwd /root [[email protected] ~]# vi index.html /*

随便輸入一段文字,儲存退出

*/ welcome to www.linuxde.net /*将這個檔案mv到網頁預設目錄下*/

[[email protected] ~]# mv index.html /var/www/html/ 

/*

 * 這個時候我們使用firefox浏覽器輸入127.0.0.1/index.html發現打不開,

 * 檢視一下SELinux的日志檔案,發現了下面這一段報錯資訊,從這個報錯資訊不難看出, 

 * 程序httpd通路網頁主目錄中的index.html時被SELinux阻止,原因是因為,SELinux配置資訊不正确, 

 * 正确的SELinux配置資訊應該是scontext=後面的部分,

 * 而index.html檔案的SELinux配置資訊卻是tcontext=後面的部分,

 * 從tcontext=的第三段“admin_home_t”不難看出,這個檔案的SELinux配置資訊是root使用者家目錄的。

 */ type=AVC msg=audit(1378974214.610:465): avc: denied { open } for pid=2359 

 comm="httpd" path="/var/www/html/index.html" 

 dev="sda1" ino=1317685 scontext=system_u:system_r:httpd_t:s0 

 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file 

 /* 使用ls -Z也可以看出,檔案和目錄的SELinux資訊不比對*/ 

 [[email protected] html]# ls -Z /var/www/html/ 

 .... unconfined_u:object_r:admin_home_t:s0 index.html 

 [[email protected] html]# ls -Zd /var/www/html/ 

 .... system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ 

 /*使用restorecon來恢複網頁主目錄中所有檔案的SELinux配置資訊(如果目标為一個目錄,可以添加-R參數遞歸)*/

 [[email protected] html]# restorecon -R /var/www/html/

-------------------

seinfo指令

功能:是用來查詢SELinux的政策提供多少相關規則,一個主體程序能否讀取到目标檔案資源的重點是在于SELinux的政策以及政策内的各項規則,

然後再通過該規則的定義去處理各項目标檔案的安全上下文,尤其是“類型”部分。

文法 seinfo(選項) 

選項 -A:列出SELinux的狀态、規則布爾值、身份識别、角色、類型等所有資訊。 

-t:列出SELinux所有類型(type)的種類。 

-r:列出SELinux所有角色(role)的種類。 

-u:列出SELinux所有身份識别(user)的種類。 

-b:列出所有規則的種類(布爾值)。 

執行個體 列出與httpd有關的規則: 

seinfo -b | grep httpd

semanage指令

功能:是用來查詢與修改SELinux預設目錄的安全上下文。

SELinux的政策與規則管理相關指令:seinfo指令、sesearch指令、getsebool指令、setsebool指令、semanage指令。 

文法:semanage {login|user|port|interface|fcontext|translation} -l 

      semanage fcontext -{a|d|m} [-frst] file_spec 

選項 -l:查詢。 fcontext:主要用在安全上下文方面。 

     -a:增加,你可以增加一些目錄的預設安全上下文類型設定。 

     -m:修改。 -d:删除。 

執行個體 查詢一下/var/www/html的預設安全性本文的設定: 

semanage fcontext -l SELinux fcontext type Context

....(前面省略).... /var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 ....(後面省略).... 

說明:如上面例子所示,我們可以查詢的到每個目錄的安全性本文!而目錄的設定可以使用正規表達式去指定一個範圍。

那麼如果我們想要增加某些自定義目錄的安全性本文呢?舉例來說,我想要色設定/srv/samba成為 public_content_t的類型時,

應該如何設定呢? 用semanage指令設定/srv/samba目錄的預設安全性本文為public_content_t: 

mkdir /srv/samba ll -Zd /srv/samba drwxr-xr-x root root root:object_r:var_t /srv/samba 

如上所示,預設的情況應該是var_t這個咚咚的! 

semanage fcontext -l | grep '/srv' /srv/.* 

all files system_u:object_r:var_t:s0 /srv/([^/]*/)?ftp(/.*)? 

all files system_u:object_r:public_content_t:s0 /srv/([^/]*/)?www(/.*)? 

all files system_u:object_r:httpd_sys_content_t:s0 /srv/([^/]*/)?rsync(/.*)? 

all files system_u:object_r:public_content_t:s0 /srv/gallery2(/.*)? 

all files system_u:object_r:httpd_sys_content_t:s0 /srv directory system_u:object_r:var_t:s0 

//看這裡! 上面則是預設的/srv底下的安全性本文資料,不過,并沒有指定到/srv/samba。 

semanage fcontext -a -t public_content_t "/srv/samba(/.*)?" 

semanage fcontext -l | grep '/srv/samba' /srv/samba(/.*)? 

all files system_u:object_r:public_content_t:s0 

cat /etc/selinux/targeted/contexts/files/file_contexts.local 

# This file is auto-generated by libsemanage 

# Please use the semanage command to make changes /srv/samba(/.*)? 

system_u:object_r:public_content_t:s0 #寫入這個檔案 restorecon -Rv /srv/samba* 

#嘗試恢複預設值 ll -Zd /srv/samba 

drwxr-xr-x root root system_u:object_r:public_content_t /srv/samba/ 

#有預設值,以後用restorecon指令來修改比較簡單! 

semanage指令的功能很多,這裡主要用到的僅有fcontext這個選項的用法而已。

如上所示,你可以使用semanage來查詢所有的目錄預設值,也能夠使用它來增加預設值的設定!

-------------------------

功能:使用seinfo指令可以查詢SELinux的政策提供多少相關規則,如果查到的相關類型或者布爾值,想要知道詳細規則時,使用sesearch指令查詢。

文法:sesearch [-a] [-s 主體類型] [-t 目标類型] [-b 布爾值] 

選項:-a:列出該類型或布爾值的所有相關資訊 

      -t:後面還要接類型,例如 -t httpd_t 

      -b:後面還要接布爾值的規則,例如 -b httpd_enable_ftp_server 

執行個體 找出目标檔案資源類型為httpd_sys_content_t的有關資訊: 

sesearch -a -t httpd_sys_content_t 

找出主體程序為httpd_t且目标檔案類型為httpd相關的所有資訊: 

sesearch -s httpd_t -t httpd_* -a 

檢視布爾值httpd_enable_homedirs設定了多少規則: 

sesearch -b httpd_enable_homedirs -a

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

繼續閱讀