系統管理之Selinux詳解

SELinux:

SELinux概念
SELinux配置
啟用SELinux
管理文件安全標簽
管理端口標簽
管理SELinux布爾值開關
管理日志
查看SELinux幫助

SELinux概述

SELinux: Secure Enhanced Linux, 是美國國家安全局「NSA=The National Security Agency」 和SCC( SecureComputing Corporation)開發的
SELinux是Linux的一個強制訪問控制的安全模塊。工作于內核中, 2000年以GNU GPL發布,Linux內核2.6版本后集成在內核中
Linux有自己的控制機制:
    DAC: Discretionary Access Control 自由訪問控制
SELinux引入新的訪問控制機制:
    MAC: Mandatory Access Control 強制訪問控制
        ? DAC環境下進程是無束縛的
        ? MAC環境下策略的規則決定控制的嚴格程度
        ? MAC環境下進程可以被限制的
        ? 策略被用來定義被限制的進程能夠使用那些資源(文件和端口)
        ? 默認情況下,沒有被明確允許的行為將被拒絕


SELinux有四種工作類型:
    strict: 每個進程都受到selinux的控制(centos5)
    targeted: 用來保護常見的網絡服務,僅有限個進程受到selinux控制,只監控容易被入侵的進程,     rhel4只保護13個服務,rhel5保護88個服務
    minimum: centos7,修改過的targeted,只對選擇的網絡服務
    mls:提供MLS(多級安全)機制的安全性
        minimum和mls穩定性不足,未加以應用

SElinux安全上下文
    傳統Linux,一切皆文件,由用戶,組,權限控制訪問
    在SELinux中,一切皆對象,由存放在Inode的擴展屬性域的安全元素所控制其訪問。
    所有文件和端口資源和進程都具備安全標簽:安全上下文” ( security context)

    安全上下文有五個元素組成:
     user:role:type:sensitivity:category
     user_u:object_r:tmp_t:s0:c0

    實際上下文:存放在文件系統中, 
        查看安全上下文命令:
        ls –Z;ps –Z
    期望(默認)上下文:存放在二進制的SELinux策略庫(映射目錄和期望安全上下文)中
        查看命令: semanage fcontext –l
    selinxu規則庫:
        規則:哪種域能訪問那種或那些種類型的文件

SELinux的五個安全因素
    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 策略不使用cateaory

SElinux配置

SELinux是否啟用
給文件重新打標
給端口設置安全標簽
設定某些操作的布爾型特性
SELinux的日志管理        


1、SELinux的狀態:
   ·enforcing:強制,每個受限的進程都必然受限
   ·permissive:啟用,每個受限的進程違規操作不會被禁止,但會被記錄于審計日志
   ·disabled:關閉

   ·相關命令:        
      sestatus
         查看selinux的狀態
      getenforce:獲取當前selinux狀態
      setenforce 0|1  修改selinux狀態
                 0:設置為permissive
                 1:設置為enforcing
             注意:此設定:重啟系統后無效

    配置文件:
        /etc/selinux/config,/etc/sysconfig/selinux
              SELinux={disabled|permissive|enforcing}
        /boot/grub/grub.conf
              在kernel行追加內核參數:使用selinux=0禁用SELinux

        設置selinux也可以在開機的時候設定,在/boot/grub/grub.conf文件內核那一行后面設定selinux的狀態selinux=0|1,只要配置文件或內核設定為禁用,最后selinux的狀態為禁用

        注意:在從disabled狀態切換至enforcing或permissive狀態需要重啟系統,這時候系統會對每一個文件一一重打標簽,需要花費一定的時間。


  2、給配置文件重新打標:
      chcon
         chcon [OPTION]… CONTEXT FILE…
         chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE…
         chcon [OPTION]… –reference=RFILE FILE…
             OPTION: -R 遞歸打標,對目錄而言
        例如:我想給自己定義的web文檔根目錄自定義為/htdocs
                chcon -R   httpd_sys_content_t   /htdocs
  3、還原文件的默認標簽(默認安全上下文):
         restorecon [-R] /path/to/somewhere
         例如:我又將web的文檔根目錄改為原來的目錄,這時候自定義的目錄的標簽需要還原
            restorecon  -R   /htdocs     

            恢復是根據策略庫當中的策略進行還原


  4、默認安全上下文查詢與修改
       ·需要用到的包:semanage命令來自policycoreutils-python包

       ·查看默認的安全上下文
             semanage fcontext –l

系統管理之Selinux詳解

       ·添加安全上下文
            semanage fcontext -a –t httpd_sys_content_t '/testdir(/.*)?'
            restorecon –Rv /testdir

        ·刪除安全上下文
             semanage fcontext -d –t httpd_sys_content_t '/testdir(/.*)?'

        ·查看端口標簽
            semanage port –l

系統管理之Selinux詳解

         ·添加端口
              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                

    5、布爾型規則:
         getsebool
         setsebool

         ·查看bool值命令:
            getsebool [-a] [boolean]
            semanage boolean –l
            semanage boolean -l –C

系統管理之Selinux詳解

         ·設置bool 值命令:
            setsebool [-P] boolean value (on,off)

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

    6、SELinux日志管理:
         需要安裝settroublesshoot*,安裝此包需要重啟系統才能生效,它會將錯誤日志記錄到/var/log/message
         安裝包:yum install setroublesshoot* (重啟生效)

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

            sealert -l UUID
                查看安全事件日志說明

            sealert -a /var/log/audit/audit.log
                掃描并分析日志

系統管理之Selinux詳解
7、SELinux幫助:
yum -y install selinux-policy-devel (centos7)
yum -y install selinux-policy-doc (centos6)
mandb | makewhatis 需要更新man幫助的數據才能查詢
man -k _selinux

總結:selinux在安全防護上確實起到了一定的作用,它是在內核層面來工作,往往有許多的漏洞,一旦黑客利用漏洞入侵系統后果不堪設想,還有其操作的繁瑣和穩定性的欠缺的導致很多企業不愿意用到selinux ,一般都會使用硬件的安全防護設備,所以我們只需要作為了解,知道有這么個東西,如何開關閉及一些簡單的操作即可。

實戰演練

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

vim /etc/selinux/config
SELINUX=disabled
reboot 重啟才生效

systemctl status httpd
yum -y install httpd
systemctl start httpd
netstat -tnl
iptalbes -F

mkdir /website
ll -Z /website/ -d
vim /etc/httpd/conf/httpd.conf
Document Root "/website/"
<Directory "/website">
systemctl restart httpd
systemctl status httpd
echo mywebsite > index.html 
semanage fcontext -l |grep website
semanage fcontext -a -t httpd_sys_content_t "/website(/.*)?"
ll -Z /website/ -d
restorecon -R /website/



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



vim /etc/httpd/conf/httpd.conf
Listen 9527
semanager port -l|grep 9527
vim /etc/httpd/conf/httpd.conf
netstat -ntl
httpd -t 檢查語法
systemctl restart httpd
semanger port -a -t http_port_t -p tcp 9527
iptables -F



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



在CentOS 7上
vim /etc/httpd/conf.d/usrdir.conf
#UserDir disabled
UserDir public_html
systemctl restart httpd
su -student
mkdir public_html
echo welcome to studenthome > index.html
links x.x.x.x/~student 訪問家目錄
ll -d /home/student
ps aux|grep http
setfacl -m u:apache:x /home/student



在CentOS 6上
vim /etc/httpd/conf/httpd.conf
#UserDir disabled
UserDir public_html
service httpd restart
iptables -F
su -student
mkdir public_html
cd public html
echo studenthomecentos6 > index.html
cd
chmod 711 /home/wang
ll -d /home/wang/

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

(0)
wencxwencx
上一篇 2016-09-21
下一篇 2016-09-21

相關推薦

  • shell腳本編程之數組

       數組就是相同數據類型的元素按一定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,然后用編號區分他們的變量的集合,這個名字稱為數組名,編號稱為下標。組成數組的各個變量稱為數組的元素。數組是在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來的一種形式。 一、數組的表示方式   1、下標數組 &…

    Linux干貨 2016-01-05
  • Week 1–Linux基礎2

    四. Linux系統命令使用格式:  但首先,在linux中我們要知道linux系統中基本的命令格式如下: 命令字 【命令選項】 【命令參數】   Command 【option】 【arguments】 在這里主要介紹這幾個命令的使用格式(Ifconfig,echo, tty, startx, export, pwd, history, shut…

    Linux干貨 2016-12-05
  • 干貨 | 20 行 Python 代碼創建可視化地圖

    當我開始建造Vincent時, 我的一個目的就是使得地圖的建造盡可能合理化. 有一些很棒的python地圖庫-參見Basemap?和?Kartograph能讓地圖更有意思. 我強烈推薦這兩個工具, 因為他們都很好用而且很強大. 我想有更簡單一些的工具,能依靠Vega的力量并且允許簡單的語法點到geoJSON文件,詳細描述一個投影和大小/比列,最后輸出地圖. …

    2017-09-08
  • Linux第八周小結

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態 在線的主機使用綠色顯示 不在線的主使用紅色顯示 #!/bin/bash # for i in {1..254};do if ping -c 6 -w 1 192.168.1.$i &> /dev/null;then echo -e…

    Linux干貨 2017-08-20
  • LVS入門

    隨著互聯網進入尋常百姓家,網絡流量愈來愈大,大規模的網路訪問如果都使用一個服務器提供服務,那么網絡通訊注定會擁堵不堪。為了解決這些問題,達到使網絡流量均衡地分散到各個服務器上的目的,一些技術大牛發明了LVS負載均衡技術。   LVS簡介   LVS(Linux Virtual Server)即為Linux虛擬服務器,使由章文嵩博士主導開發…

    Linux干貨 2017-05-09
  • N25-第5周博客作業

    N25-第5周博客作業 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; grep -E "^[[:space:]]+[[:alnum:]]+" /boot/grub/grub.conf    grep "^[[:space:]]…

    Linux干貨 2016-12-31
欧美性久久久久