SElinux簡介
????????SELinux是security-Enhanced Linux的縮寫,意思是安全強化的linux
????????SELinux主要由美國國家安全局(NSA)開發,當初開發的目的是為了避免資源的誤用。傳統的訪問控制在我們開啟權限后,系統進程可以直接訪問
? ? ? ? ? ? ?當我們對權限設置不嚴謹時,這種訪問方式就是系統的安全漏洞
在開啟SElinux后
? ? ? ? ? ? ?會對進程本身部署安全上下文
? ? ? ? ? ? ?會對文件部署安全上下文
? ? ? ? ? ? ?會對服務使用端口進行限制
? ? ? ? ? ? ?會對程序本身的不安全功能做限制
selinux的工作原理
SElinux的工作方式
SELinux是通過MAC的方式來控制管理進程,它控制的主體是進程,而目標則是該進程能否讀取的文件資源
????????主體(subject):就是進程
????????目標(object):被主體訪問的資源,可以是文件、目錄、端口等。
????????策略(policy):由于進程與文件數量龐大,因此SELinux會依據某些服務來制定基本的訪問安全策略
? ? ? ? ? ? ? ?otargeted:針對網絡服務限制較多,針對本機限制較少,是默認的策略;ostrict:完整的SELinux限制,限制方面較為嚴格。
SELinux的安全上下文
安全上下文(securitycontext):
????????主體能不能訪問目標除策略指定外,主體與目標的安全上下文必須一致才能夠順利訪問。
????????最終文件的成功訪問還是與文件系統的rwx權限設置有關
安全上下文的查看
# ls -Z
進程安全上下文查看
# ps axZ | grep vsftpd
安全上下文用冒號分為四個字段:ldentify:role:type:
????????身份標識(Identify):相當于賬號方面的身份標識,主要有以下三種常見的類型:root:表示root的賬號身份;
????????????????systemU:表示程序方面的標識,通常就是進程;
????????????????unconfinedu:代表的是一般用戶賬號相關的身份。
????????角色(role):通過角色字段,可知這個數據是屬于程序、文件資源還是代表用戶。
????????????????一般角色有:objectr:代表的是文件或目錄等文件資源; ???systemr:代表的是進程。
????????類型(type):在默認的targeted策略中,ldentify與role字段基本上是不重要的,重要的在于這個類型字段。而類型字段在文件與進程的定義不太相同。
????????????????分別是:type:在文件資源上面稱為類型。???domain:在主體程序中則稱為域
????????odomain需要與type搭配,則該程序才能夠順利讀取文件資源。
????????代表靈敏度,一般用SO、S1、S2來命名,數字代表靈敏度的分級。數值越大、靈敏度越高
對于SElinux的管理及優化
SElinux的工作模式SElinux有三種工作模式:
????????oenforcing:強制模式,開始限制domain/type.
????????opermissive:寬容模式,僅會有警告信息并不會實際限制domain/type的訪問。
????????odisabled:關閉,SELinux并沒有實際運行。
對于SElinux狀態管理查看SElinux當前狀態查看
# setsebool -P ftpd_full_access off
# getenforce ?????????【查看工作模式,1 ??Enforcing強制模式,0 ??Permissive警告模式】
臨時更改SElinux的工作模式
# setenforce (0/1) ????【0表示警告模式(警告但可運行),1表示強制模式(不可運行)】
永久更改SElinux狀態
在RHEL9之前的版本中通過文件來永久更改SElinux的狀態
# viM/etc/se1inux/config
在RHEL9中需要通過修改內核啟動參數來永久更改SElinux的狀態
# grubby --update-kernel ALL --args selinux=1????—開
# grubby --update-kernel ALL --args selinux=0????—關
如何開啟selinux
# grubby --update-kernel ALL --args selinux=1
# reboot
管理文件的安全上下文
# dnf install nginx -y ??????????????????????【下載】
# systemctl enable --now nginx??????????????【開火墻】
# systemctl disable --now firewalld
# cd /usr/share/nginx/html/
# rm -fr index.html
# echo /mnt/index.html > /mnt/index.html ??????【輸入內容】
# mv /mnt/index.html /usr/share/nginx/html/index.html?????【移動文件】
# ls -Z /usr/share/nginx/html/ ??運行結果:
臨時更改文件的安全上下文
chcon ?[-R] ?[-t type] ?[-u user]??[-r role] ?文件
????????-R:連同該目錄下的子目錄也同時修改
????????-t:后面接安全上下文的類型字段
# chcon -Rt httpd_sys_content_t index.html
# ls -Z /usr/share/nginx/html/ ??運行結果:
????????-U:后面接身份識別
????????-r:后面接角色
永久修改安全上下文
semanager fcontext ?[-a|-d] ?[-t type] ?[-s user]??[-r range] ?文件
????????-l:列出所有記錄
????????-a:添加記錄
????????-t:添加的類型
# semanage fcontext ?-a -t httpd_sys_content_t '/lee(/.*)?' ???【添加文件】
# semanage fcontext -l | grep /lee ??????【查看安全上下文】
# restorecon -RvvF /lee/?????????????????【刷新安全上下文】
# ls -Zd /lee?查看結果:
????????-M:修改記錄
????????-d:刪除記錄
????????-P:指定添加的端口是tcp或udp協議的,port子命令下使用
????????-e:目標路徑參考原路徑的上下文類型,fcontext子命令下使用
????????-S:后面接身份識別
????????-r:后面接角色
服務的端口影響
在系統SElinux開啟后會規定服務使用端口
查看服務被允許使用的端口
# semanage port -l | grep ssh
根據需求更改被允許使用的端口
# semanage port -a -t ssh_port_t -p tcp 6666????????【更改端口】
# semanage port -l | grep ssh
selinux對linux服務的影響
服務的功能影響
在系統SElinux開啟后會為服務添加新的功能開關,我們把這個開關叫做sebool
臨時修改bool值
# getsebool ?-a | grep http ???????????【查看sebool值】
# setsebool ?httpd_anon_write 1????????????【修改sebool值】
# getsebool ?-a | grep http ??查看結果:
重啟# reboot后查看結果:
永久修改
# setsebool -P httpd_anon_write off
查看結果: