1. 程式人生 > >Selinux(核心加強型火牆)簡介與用法

Selinux(核心加強型火牆)簡介與用法

一、selinux簡介

SELinux是「Security-Enhanced Linux」的簡稱,是美國國家安全域性「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)開發的 Linux的一個擴張強制訪問控制安全模組。

SELinux 主要作用就是最大限度地減小系統中服務程序可訪問的資源(最小許可權原則)。設想一下,如果一個以 root 身份執行的網路服務存在 0day 漏洞,黑客就可以利用這個漏洞,以 root 的身份在您的伺服器上為所欲為了。是不是很可怕?SELinux 就是來解決這個問題的。

1、selinux: 核心級加強型防火牆

2、作用: 給每一個檔案載入標籤(context:安全上下文)

對檔案的影響:程式的安全上下文和檔案的安全上下文必須相匹配才會被允許
對服務的影響:用setsebool ,把程式的功能加了開關,並且把開關全部關掉

3、顯示selinux的狀態: getenforce

selinux的三種狀態:
Enforcing      強制模式
Permissive      警告模式
Disabled       關閉

在這裡插入圖片描述

4、更改selinux的開機狀態:

vim /etc/sysconfig/selinux
在這裡插入圖片描述
在這裡插入圖片描述
更改完狀態要重啟才能生效
reboot #核心重啟
在這裡插入圖片描述


重啟後檢視
在這裡插入圖片描述

5、selinux的兩個級別: 強制和警告

setsebool     # 功能開關
getenforce    # 檢視selinux的布林值
enforcing / permissive   # 開啟
	enforcing  # 強制(拒絕+警告)
	permissive # 警告(接受+警告)
		兩者之間的轉換(不需要重啟就可以生效)
                setenforce 0 -----> permissive   # 轉換為警告模式,
                setenforce 1 -----> enforcing     # 轉換為強制模式

在這裡插入圖片描述

6、selinux報錯日誌: /var/log/audit/audit.log

二、selinux:安全上下文訪問規則

1、安全上下文簡介:

所有作業系統訪問控制都是以關聯的客體和主體的某種型別的訪問控制屬性為基礎的

在SELinux中,訪問控制屬性叫做安全上下文。所有客體(檔案、程序間通訊通道、套接字、網路主機等)和主體(程序)都有與其關聯的安全上下文
  
比如:我們從別的地方移動一個檔案到/var/ftp,而當我們登陸lftp之後,發現看不到該檔案,是因為這個檔案的安全上下文和/var/ftp的安全上下文不匹配,這就是selinux的保護機制,所以我們需要將這個檔案的安全上下文修改和/var/ftp的達到一致

測試:

檢視selinux狀態為強制模式
在這裡插入圖片描述
在/mnt下新建一個檔案hui,並將它移動到 /var/ftp
在這裡插入圖片描述

注意:
mv是重新命名的過程,檔案的屬性和許可權不會改變(檔案上下文型別不會改變)
cp新建的過程,檔案的屬性和許可權會改變(會重新生成安全上下文)

檢視/var/ftp的安全上下文的型別

(1)ls  -Z  檢視檔案的安全上下文
(2)ls  -Zd   檢視目錄的安全上下文
/var/ftp是lftp的預設釋出目錄,它預設的安全上下文是public_content_t
此處可以看到hui和pub安全上下文型別不一致
在這裡插入圖片描述

lftp登入服務端,看不到移動過去的檔案

在這裡插入圖片描述

當把selinux的狀態由強制模式改為警告模式後

在這裡插入圖片描述
再次登入客戶端,就可以看到移動過去的檔案huoq
在這裡插入圖片描述

2、修改上下文的方法:

(1)臨時修改
檢視/ftphome的上下文型別 ,顯示default
在這裡插入圖片描述
chcon -t public_content_t /ftphome/ -R -t  #表示修改上下文型別為public_content_t #-R 表示遞迴設定#
在這裡插入圖片描述
測試臨時屬性
修改selinux的配置檔案,將selinux的狀態進行如下改變:enforcing–>disabled–>enforcing
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
發現上下文型別又變成預設,說明這種方式的修改是臨時的
在這裡插入圖片描述
(2)永久修改:
檢視/var/ftp和/ftphome的上下文列表
因為/ftphome是自己建立的目錄,沒有列表資訊
在這裡插入圖片描述
修改/ftphome和底下的所有檔案的安全上下文 ,遞迴重新整理並顯示重新整理過程
在這裡插入圖片描述

-a  表示增加    -d    表示刪除
-t  表示設定安全上下文的型別為public_content_t
/ftphome(/.*)?   表示對檔案本身和裡面的所有檔案,包括隱藏檔案

再次檢視 /ftphome的上下文列表
在這裡插入圖片描述
上下文型別永久設定成功
在這裡插入圖片描述

三、管理selinux 布林(sebool)值

SELinux 布林值是更改 SELinux 策略行為的開關
SELinux 布林值是可以啟用或禁用的規則

(1)本地使用者上傳

在selinux開啟的狀態下,預設本地使用者是沒有上傳許可權的
在這裡插入圖片描述
檢視開關(本地使用者上傳開關是關閉的)
在這裡插入圖片描述
開啟本地使用者上傳開關
在這裡插入圖片描述
測試:此時本地使用者可以上傳檔案
在這裡插入圖片描述
有時上傳不成功 553(許可權過小)需要給該使用者加w許可權
(2)匿名使用者上傳
在selinux開啟的狀態下,匿名使用者是沒有上傳許可權
在這裡插入圖片描述
編輯ftp服務配置檔案,將匿名使用者上傳許可權開啟
在這裡插入圖片描述
將註釋去掉
在這裡插入圖片描述
配置完成後重啟服務:
在這裡插入圖片描述
修改匿名使用者目錄的所有組並給組新增許可權
在這裡插入圖片描述
開啟匿名使用者上傳開關
在這裡插入圖片描述
給匿名使用者預設家目錄的安全上下文型別新增讀寫許可權
在這裡插入圖片描述
測試:
此時匿名使用者可以成功上傳檔案
在這裡插入圖片描述

四、selinux的排錯工具: setroubleshoot-server

檢視selinux排錯工具軟體包
在這裡插入圖片描述
在/mnt下新建一個檔案pcgj,並將它移動到 /var/ftp
在這裡插入圖片描述
清空日誌資訊,方便測試報錯資訊
在這裡插入圖片描述
lftp登入服務端,看不到自己建立的檔案,這是由於安全上下文的關係
在這裡插入圖片描述
檢視selinux的報錯日誌/var/log/audit/audit.log,會有報錯資訊產生
在這裡插入圖片描述
檢視/var/log/messages 日誌,裡面會有報錯的解決方案(排錯指令)
在這裡插入圖片描述
如果刪除setroubleshoot-server軟體
先安裝setroubleshoot-server軟體
在這裡插入圖片描述
在這裡插入圖片描述此處再次清空日誌資訊方便測試
在這裡插入圖片描述
再次登入服務端並退出
在這裡插入圖片描述
selinux報錯日誌/var/log/audit/audit.log中仍有報錯,但是/var/log/messages就不會有排錯指令了
在這裡插入圖片描述
在這裡插入圖片描述