初探SElinux

SELinux介紹:

  • SELinux: Secure Enhanced Linux(安全強化的linux),是美國國家安全局(NSA=The National Security Agency)和 SCC(Secure Computing Corporation)開發的Linux的一個強制訪問控制的安全模塊。2000年以GNU GPL發布,Linux內核2.6版本后集成在內核中。

  • DAC:Discretionary Access Control 自主訪問控制

     依據進程的所有者與文件資源的rwx權限來決定有無訪問能力。

  • MAC:Mandatory Access Control 強制訪問控制

    以策略規則制定特定程序讀取特定文件。

    

     DAC環境下進程是無束縛的

    MAC環境下策略的規則決定控制的嚴格程度

    MAC環境下進程可以被限制的

    策略被用來定義被限制的進程能夠使用那些資源(文件和端口)

    默認情況下,沒有被明確允許的行為將被拒絕

SElinux的運行模式:

SElinux是通過MAC方式的方式管理進程,它控制的主體為進程,而目標則是該進程能否讀取的“文件資源”

主體:(subject)

    SElinux主要管理的就是進程,所以這里可以將主體就當作進程

目標:(object)

    主體進程能否訪問的目標資源,一般就是文件系統。 所有可以讀取的對象,包括文件、目錄和進程,端口等

策略:(policy)

    由于進程和文件的數量龐大,因此SElinux會根據某些服務制定基本的安全訪問策略。這些策咯內還會有較為詳細的規則(rule)來指定不同的服務開放某些資源的訪問與否。目前的策略有四種:

  • strict: centos5,每個進程都受到selinux的控制

  • targeted: 用來保護常見的網絡服務,僅有限進程受到selinux控制,只監控容易被入侵的進程,rhel4只保護13個服務,rhel5保護88個服務

  • minimum:centos7,修改過的targeted,只對選擇的網絡服務

  • mls:提供MLS(多級安全)機制的安全性

     minimum和mls穩定性不足,未加以應用

    SELinux中對所有的文件都賦予一個type的文件類型標簽,對于所有的進程也賦予各自的一個domain的標簽。domain標簽能夠執行的操作由安全策略里定義。

    

    當一個subject試圖訪問一個object,Kernel中的策略執行服務器將檢查AVC (訪問矢量緩存Access Vector Cache), 在AVC中,subject和object的權限被緩存(cached),查找“應用+文件”的安全環境。然后根據查詢結果允許或拒絕訪問

    

    安全策略:定義主體讀取對象的規則數據庫,規則中記錄了哪個類型的主體使用哪個方法讀取哪一個對象是允許還是拒絕的,并且定義了哪種行為是充許或拒絕

SELinux安全上下文

   進程能不能訪問目標對象,除了策略指定之外,進程與目標的安全上下文必須一致才能順利訪問,這里的安全上下文,有點類似文件系統里的“rwx”權限。

在傳統Linux中,一切皆文件,由用戶,組,權限控制訪問;

在SELinux中,一切皆對象(object),由存放在inode的擴展屬性域的安全元素所控制其訪問;

所有文件和端口資源和進程都具備安全標簽:安全上下文(security context)

安全上下文有五個元素組成:

    user:role:type:sensitivity:category

    user_u:object_r:tmp_t:s0:c0

實際上下文:存放在文件系統中,可以使用“ls –Z; ps–Z”查看

期望(默認)上下文:存放在二進制的SELinux策略庫(映射目錄和期望安全上下文)中

可以使用命令"semanage fcontext –l"查看


五個安全元素

①User:指示登錄系統的用戶類型,如root,user_u,system_u,多數本地進程都屬于自由(unconfined)進程

②Role:定義文件,進程和用戶的用途:文件:object_r,進程和用戶:system_r

③Type:指定數據類型,規則中定義何種進程類型訪問何種文件Target策略基于type實現,多服務共用:public_content_t

④Sensitivity:限制訪問的需要,由組織定義的分層安全級別,如unclassified,secret,top,secret, 一個對象有且只有一個sensitivity,分0-15級,s0最低,Target策略默認使用s0

⑤Category:對于特定組織劃分不分層的分類,如FBI Secret,NSA secret, 一個對象可以有多個categroy,c0-c1023共1024個分類,Target 策略不使用category

wKiom1ffW1ahCCAGAABdUB70mGQ334.png

設置SELinux

并非所有的linux版本都支持SElinux,所以需要首先查看一下使用的版本。

配置SELinux:

    SELinux是否啟用

    給文件重新打安全標簽

    給端口設置安全標簽

    設定某些操作的布爾型開關

    SELinux的日志管理

SELinux的狀態:

    enforcing: 強制,每個受限的進程都必然受限

    permissive: 允許,每個受限的進程違規操作不會被禁止,但會被記錄于審計日志

    disabled: 禁用

相關命令:

getenforce: 獲取selinux當前狀態

sestatus:查看selinux狀態

setenforce 0|1

    0: 設置為permissive

    1: 設置為enforcing

此設定:重啟系統后無效,若要長久有效要修改配置文件。

 

配置文件:

/boot/grub/grub.conf

    使用selinux=0禁用SELinux

/etc/sysconfig/selinux(為/etc/selinux/config的軟鏈接文件)

/etc/selinux/config

    SELINUX={disabled|enforcing|permissive}

 

修改SELinux安全標簽

給文件重新打安全標簽:

  chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…

  chcon [OPTION]… –reference=RFILE FILE…

    -R:遞歸打標;

恢復目錄或文件默認的安全上下文:

  restorecon [-R] /path/to/somewhere

默認安全上下文查詢與修改

 semanage來自 policycoreutils-python包

查看默認的安全上下文

    semanage fcontext –l

添加安全上下文

    semanage fcontext -a –t httpd_sys_content_t‘/testdir(/.*)?’

    restorecon–Rv/testdir

刪除安全上下文

    semanage fcontext -d –t httpd_sys_content_t‘/testdir(/.*)?’

Selinux端口標簽

 

查看端口標簽

 semanage port –l

添加端口

 semanage port -a -t port_label-p tcp|udp PORT

 例:semanage port -a -t http_port_t -p tcp 9527

刪除端口

 semanage port -d -t port_label-p tcp|udp PORT

 例:semanage port -d -t http_port_t -p tcp 9527

修改現有端口為新標簽

 semanage port -m -t port_label-p tcp|udp PORT

 例:semanage port -m -t http_port_t-p tcp 9527

SELinux布爾值

布爾型規則:

 getsebooll;

 setsebool

查看bool命令:

 getsebool [-a] [boolean]

 semanage boolean –l

 semanage boolean -l –C 查看修改過的布爾值

設置bool值命令:

 setsebool [-P] boolean value(on,off)

 setsebool [-P] Boolean=value(0,1)

SELinux日志管理

  將錯誤的信息寫入/var/log/message

    yum install setroublesshoot*(重啟生效)

  查看安全事件日志說明

    grep setroubleshoot/var/log/messages

    sealert -l UUID

  掃描并分析日志

    sealert -a /var/log/audit/audit.log

SELinux幫助

yum -y install selinux-policy-devel(centos7)

yum –y install selinux-policy-doc (centos6)

mandb | makewhatis g

man -k selinux

例:

1、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問 

2、修改上述網站的http端口為9527,增加SELinux端口標簽,使網站可訪問 

3、啟用相關的SELinux布爾值,使上述網站的用戶student的家目錄可通過http訪問

1、

①首先啟動SElinux,(重啟后生效)

[root@CentOS 7 ~]# vim /etc/sysconfig/selinux
  SELINUX=enforcing
  SELINUXTYPE=targeted

②啟動httpd服務,并查看80端口是否啟用

[root@CentOS 7 ~]# systemctl start httpd
[root@CentOS 7 ~]# netstat -tnl

③改變網站主目錄為/website

[root@CentOS 7 ~]# vim /etc/httpd/conf/httpd.conf 
   DocumentRoot "/website"
    <Directory "/website">

④添加SElinux文件標簽規則

[root@CentOS 7 ~]# chcon  --reference=/var/www/html/ /website/

⑤創建網頁文件

[root@CentOS 7 ~]# echo "hello" > /website/index.html
[root@CentOS 7 ~]# ls /website/index.html -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /website/index.html

⑥重啟httpd服務:

[root@CentOS 7 ~]# systemctl restart httpd

⑦訪問網頁:

[root@CentOS-6 ~]# links 10.1.100.100

wKiom1ffjJCCWvPgAAACyE97MIY863.png

2、

①修改httpd端口號為9527

[root@CentOS 7 ~]# vim /etc/httpd/conf/httpd.conf
   Listen 9527

②增加SELinux端口標簽

[root@CentOS 7 ~]# semanage port -a -t http_port_t -p tcp 9527
[root@CentOS 7 ~]# echo "welcome" > /website/index.html

③重啟httpd服務:

[root@CentOS 7 ~]# systemctl restart httpd

④訪問網址:

[root@CentOS-6 ~]# links 10.1.100.100:9527

wKiom1ffla_xx1QnAAAD_p8lFjY499.png

3、

①編輯配置文件

[root@CentOS 7 ~]# vim /etc/httpd/conf.d/userdir.conf 
#  UserDir disabled
  UserDir public_html

②重啟httpd服務

[root@CentOS 7 ~]# systemctl restart httpd

③在student家目錄創建網頁文件

[root@CentOS 7 ~]# mkdir  /home/student/public_html
[root@CentOS 7 ~]#  echo "this is student's home" > /home/student/public_html/index.html

④啟用相關的SELinux布爾值

[root@CentOS 7 ~]# setsebool -P httpd_enable_homedirs on

⑤啟用apache用戶對student的家目錄有執行權限

[root@CentOS 7 ~]#  setfacl -m u:apache:x /home/student/

⑥訪問網頁

[root@CentOS-6 ~]# links 10.1.100.100:9527/~student

wKiom1ffqm-yBx3tAAAE4riHx5o860.png

原創文章,作者:Groot,如若轉載,請注明出處:http://www.www58058.com/49640

(0)
GrootGroot
上一篇 2016-10-09
下一篇 2016-10-09

相關推薦

  • 馬哥教育網絡班22期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;       [root@localhost ~]#…

    Linux干貨 2016-10-09
  • 推薦-Openssl加密解密及PKI,創建私有CA!

    Openssl加密解密及PKI,創建私有CA Openssl加密解密及PKI,創建私有CA Openssl加密解密及PKI,創建私有CA 一、什么是SSL? 二、SSL協議出現的目的? 三、密碼算法 四、SSL握手通信 五、IKE是啥? 六、PKI是啥? 七、Openssl開源項目 八、創建私有CA 九、吊銷證書 附:Openssh基于密鑰認證 一、什么是S…

    Linux干貨 2016-04-05
  • N25-第七周

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;     [root@localhost ~]# fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 255…

    Linux干貨 2017-05-21
  • ?Bash2

    字串比較時變量最好使用"" 這樣就不會報錯了,只是退出碼不為0 組合條件:     與:[ condition1 -a condition2 ]或condition1 && condition2     或:[ condition1 -o co…

    Linux干貨 2016-09-25
  • MySQL高級特性-合并表

    1. Merge Tables         如果愿意的話,可以把合并表看成一種較老的、有更多限制的分區表,但是它們也有自己的用處,并且能提供一些分區表不能提供的功能。 合并表實際是容納真正的表的容器??梢允褂锰厥獾腢NION語法來CREATE TABLE。下面是一個合并表的例子: mysql> &n…

    Linux干貨 2015-04-13
  • awk,systemctl,破解7root口令

    awk -F 指明輸入時用到的字段分隔符 默認空格為分隔符 -v 自定義變量 基本格式:awk [options] 'program' file $1,$2..$n稱為域標識,$0為所有域。 文件的每一行稱為記錄 awk '{print}' /etc/passwd 默認 print $0 顯示全段   awk…

    Linux干貨 2016-10-05
欧美性久久久久