首頁 > 軟體

SELinux 從入門到精通教學

2020-06-16 16:48:01

一、介紹

1.官方意思
SELinux是一種基於 域-型別 模型(domain-type)的強制存取控制(MAC)安全系統,它由NSA編寫並設計成核心模組包含到核心中,相應的某些安全相關的應用也被打了SELinux的修補程式,最後還有一個相應的安全策略。任何程式對其資源享有完全的控制權。假設某個程式打算把含有潛在重要資訊的檔案扔到/tmp目錄下,那麼在DAC情況下沒人能阻止他。SELinux提供了比傳統的UNIX許可權更好的存取控制。

2.簡單意思
selinux就像是一種系統的保護機制,如果關閉它的話,也沒什麼問題,操作上不會因為selinux而感到阻礙和困難,但是你開啟之後,你會感覺做什麼都是錯的,寸步難行。舉個樂子:”當你開啟了HTTP服務,內容能正常存取,但是你開啟selinux之後就報錯,那你會覺得是selinux的問題,然後你就設定好這個內容的selinux的上下文(類似使用者許可權),又可以正常存取了,然後你開開心心地將一個專案程式碼上傳到網頁根目錄,不能開啟了,你會想到selinux ~~ 首頁能開啟,但是其他jpg、gif等等不能正常顯示,你又改許可權,噼裡啪啦地一頓操作猛如虎,都可以了,但是跳轉到別人的網站又不行了,emmm ~~ 直接重灌系統“

3.有點意思
selinux畢竟是保護機制,所以肯定能起到保護作用,保護著系統不被任意修改,保護著站點的許可權又嚴格存取限制,你的檔案都是等於資料,資料是錢買不了的,想好好地存在於網際網路,就要做相對的安全(沒有絕對的安全),通過各種手段保護你的資料不被修改等等,安全意識是非常重要的。

4.沒什麼意思
selinux是非常好的一種保護機制,但在企業中,大多數是沒有使用這個安全機制的,畢竟都是直接關閉的,比如雲伺服器,你買的時候就已經預設是關閉selinux這個保護機制了。所以在這裡演示,後期的軟體服務和部署都不會開啟。

二、Selinux入門--基本設定

1.關於selinux
selinux在系統的分布

[root@linuxidc ~]# find / -name selinux
/sys/fs/selinux
/etc/sysconfig/selinux
/etc/selinux
/usr/lib64/Python2.7/site-packages/selinux
/usr/share/selinux
/usr/libexec/selinux
[root@linuxidc ~]# 

2.分析

selinux目錄組成:
/sys/:系統全域性裝置管理目錄,比如cgroup、pstore、selinux、xfs都存在這個目錄。
/etc/:服務的組態檔目錄。
/usr/:存放二進位制檔案、共用檔案、函數庫檔案、服務執行檔案的目錄。

3.命令式寬容模式或嚴格模式(以下設定全域性有效)

檢視當前selinux的狀態
[root@linuxidc ~]# getenforce
Enforcing
[root@linuxidc ~]# 

設定寬容模式
[root@linuxidc ~]# setenforce 0
[root@linuxidc ~]# getenforce
Permissive
[root@linuxidc ~]# 

設定拒絕模式
[root@linuxidc ~]# setenforce 1
[root@linuxidc ~]# getenforce
Enforcing
[root@linuxidc ~]# 

4.組態檔說明(可以設定關閉、寬容、嚴格模式)
/etc/sysconfig/selinux 是 /etc/selinux/config 檔案的軟連結
所以修改這兩個其中一個,檔案內容都會改變。

5.組態檔

[root@linuxidc ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.        開啟模式
#     permissive - SELinux prints warnings instead of enforcing.    寬容模式
#     disabled - No SELinux policy is loaded.       關閉模式
SELINUX=enforcing     #設定selinux的狀態模式
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,    #目標模式
#     minimum - Modification of targeted policy. Only selected processes are protected.   #最小化許可權控制
#     mls - Multi Level Security protection.    #多種selinux模式,根據檔案的上下文設定而改變存取許可權
SELINUXTYPE=targeted      #設定selinux的型別,預設目標模式

6.更新組態檔

[root@linuxidc ~]# vim /etc/selinux/config 
[root@linuxidc ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled    #修改組態檔,需要重新啟動系統以生效
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

[root@linuxidc ~]# 

7.重新啟動系統
重新啟動系統方式有很多:
第一種方法:
[root@linuxidc ~]# reboot

第二種方法:
[root@linuxidc ~]# init 6

這是系統啟動級別命令,參考我另一個部落格文章:
http://blog.51cto.com/linuxidcheng/2161336

第三種方法:

虛擬機器--》滑鼠右擊--》電源--》重新啟動客戶機

8.檢視selinux狀態

[root@linuxidc ~]# getenforce
Disabled

三、Selinux進階---上下文

提醒:如果想使用上下文,必須開啟selinux才能有效,如果設定了上下文,卻沒有開啟selinux,那等於白忙了。

這裡舉個例子:其他設定,類比就好

1.安裝Apache服務
[root@linuxidc ~]# yum install -y httpd #提供網頁服務

2.安裝網路工具
[root@linuxidc ~]# yum install -y net-tools #提供查詢系統網路狀態的工具

3.啟動網頁服務並檢查網站埠(預設埠為80)

[root@linuxidc ~]# systemctl start httpd && netstat -tunlp |grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      1633/httpd          
[root@linuxidc ~]# 

4.存取網頁(預設網頁)

5.開啟selinux

[root@linuxidc ~]# getenforce
Enforcing
[root@linuxidc ~]# 

6.設定自定義網頁

7.檢視web上下文

[root@linuxidc html]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@linuxidc html]# 

上下文為:httpd_sys_content_t

8.在家目錄建立網頁檔案,並移動到網站根目錄

[root@linuxidc html]# cd
[root@linuxidc ~]# vim linuxidc.html
[root@linuxidc ~]# cat linuxidc.html 
<h1 align=center>test2 web</h1>
<h2 align=center>linuxidc</h2>
[root@linuxidc ~]# mv linuxidc.html /var/www/html/
[root@linuxidc ~]# cd /var/www/html/
[root@linuxidc html]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 linuxidc.html
[root@linuxidc html]# 

9.存取新建立的網頁檔案(顯示沒許可權存取該檔案)

10.設定檔案selinux,並存取網頁(可正常存取該網頁檔案)

11.chcon命令掌握

[root@linuxidc html]# chcon --help
Usage: chcon [OPTION]... CONTEXT FILE...
  or:  chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
  or:  chcon [OPTION]... --reference=RFILE FILE...

選項如下:
--reference     #參照其他檔案上下文
--dereference    #不參照其他檔案上下文    
-h, --no-dereference     #影響符號連結而不是參照檔案
-u, --user=USER      #指定使用者
-r, --role=ROLE     #指定角色
-t, --type=TYPE     #指定上下文
-l, --range=RANGE      #指定上下文的範圍
--no-preserve-root      #不區分對待根目錄
--preserve-root    #區分對待根目錄
--reference=RFILE      #直接參照該檔案的上下文
-R, --recursive        #遞回,一般用在目錄
-v, --verbose          #對每個檔案輸出資訊

12.顯示一下版本資訊

[root@linuxidc html]# chcon --version
chcon (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Russell Coker and Jim Meyering.
[root@linuxidc html]# 

SELinux管理原則  https://www.linuxidc.com/Linux/2018-08/153603.htm
Linux SELinux 工作原理及紀錄檔管理詳解 https://www.linuxidc.com/Linux/2018-08/153454.htm
深入理解SELinux https://www.linuxidc.com/Linux/2017-10/148081.htm
檢視SELinux狀態&關閉SELinux  https://www.linuxidc.com/Linux/2016-11/137723.htm

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-08/153625.htm


IT145.com E-mail:sddin#qq.com