2021-05-12 14:32:11
SELinux 從入門到精通教學
一、介紹
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
相關文章