本節索引:
一、SELinux介紹
二、SELinux安全上下文
三、SELinux相關操作
四、操作:SELinux環境下遷移httpd服務默認目錄
一、SELinux介紹:
SELinux(Security-Enhanced Linux) 是美國國家安全局(NSA)對于強制訪問控制的實現,是
Linux歷史上最杰出的新安全子系統。NSA是在Linux社區的幫助下開發了一種訪問控制體系,在
這種訪問控制體系的限制下,進程只能訪問那些在他的任務中所需要文件。
SELinux是一種基于 域-類型 模型(domain-type)的強制訪問控制(MAC)安全系統,它由NSA
編寫并設計成內核模塊包含到內核中,相應的某些安全相關的應用也被打了SELinux的補丁,最
后還有一個相應的安全策略。任何程序對其資源享有完全的控制權。假設某個程序打算把含有潛
在重要信息的文件扔到/tmp目錄下,那么在DAC情況下沒人能阻止他。SELinux提供了比傳統的
UNIX權限更好的訪問控制。
傳統UNIX系統使用的安全系統:自由訪問控制(DAC:Discretionary Access Control)
SELinx采用的安全系統:強制訪問控制(MAC:Mandatory Access Control)
DAC環境下進程是無束縛的
MAC環境下策略的規則決定控制的嚴格程度
MAC環境下進程可以被限制的
策略被用來定義被限制的進程能夠使用那些資源(文件和端口)
默認情況下,沒有被明確允許的行為將被拒絕
SElinux的工作類型:
使用cat /etc/selinux/config 可以查看當前SELinux類型和系統支持的所有SELinux類型,不同系統版本支持類型有所不同
SELinux共有四種工作類型:
(1)strict:centos5,每個進程都受到selinux的控制,不識別的進程將拒絕
(2)targeted: 用來保護常見的網絡服務,僅有限進程受到selinux控制,只監控容易
被入侵的進程,centos4只保護13個服務,centos5保護88個服務,不識別的服務將允許
(3)minimum:centos7,修改的targeted,只對選擇的網絡服務
(4)mls:提供MLS(多級安全)機制的安全性
targeted現為CentOS系統默認SElinux類型,minimum和mls穩定性不足,未加以應用,strict現已不存在
SELinux的優點與缺點:
優點:
(1)通過MAC對訪問的控制徹底化
(2)對于進程只賦予最小的權限
(3)防止權限升級
(4)對于用戶只賦予最小的權限
缺點:
(1)存在特權用戶root
(2)對于文件的訪問權劃分不夠細
(3)SUID程序的權限升級
(4)DAC(Discretionary Access Control)問題
二、SELinux安全上下文
傳統Linux,一切皆文件,由用戶,組,權限控制訪問
在SELinux中,一切皆對象(object),由存放在inode的擴展屬性域的
安全元素所控制其訪問
所有文件和端口資源和進程都具備安全標簽:安全上下文(security?context)
安全上下文有五個元素組成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0
user:指示登錄系統的用戶類型
role:定義文件,進程和用戶的用途
type:指定了數據類別,type類別改變可能導致進程無法訪問文件
sensitivity:限制訪問的需要,由組織定義的分層安全級別。s0最低,Target策略默認使用s0
category:對于特定組織劃分不分層的分類,Target策略默認不使用category
其中最重要的一項為文件的type標簽,如httpd進程只能在httpd_t 里運行,/etc/passwd只有type
為passwd_file_t才能起作用,/var/log/messages文件如果不是var_log_t類型將無法記錄日志等,
在SELinux安全策略中,修改了type類型,可能導致文件無法正常使用。
三、SElinux相關操作:
1.SELinux啟用、禁用
SElinux共有三種運行模式:
SELINUX=enforcing???????????????? 啟用SELinux
SELINUX=disabled?? ? ? ? ? ? ? ? ? 徹底禁用SELinux
SELINUX=permissive?????????????? 禁用,但違反SELinux策略會產生告警
getenforce??????????????????????? 顯示當前SEliunx運行模式
a)利用命令臨時修改:
setenforce 0???????????????????? 臨時切換到permissive
setenforce 1???????????????????? 臨時切換到enforcing
b)修改配置文件:
/etc/selinux/config
/etc/sysconfig/selinux??????????? SELINUX={disabled|enforcing|permissive}
/boot/grub/grub.conf???????????? 使用selinux=0禁用SElinux
注:grub.conf優先級高于/etc/selinux/config
2.修改SELinix安全標簽:
給文件重新打安全標簽:
chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
chcon [OPTION]… –reference=RFILE FILE…
-R:遞歸打標;
恢復目錄或文件默認的安全上下文:
restorecon [-R] /path/to/somewhere
SELinux端口標簽:
semanage port -l|grep http?? 查看http允許使用的端口
semanage port -a -t http_port_t -t tcp 9527??????? 添加http允許使用的端口包含9527
3.SELinux默認數據庫查詢與修改
查看SELinux默認數據庫:
semanage fcontext -l
查看某文件放入默認SElinux類型:
semanage fcontext -l | grep /path/file
添加到SELinux默認數據庫:
semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’
restorecon –Rv /testdir
從SElinux默認數據庫中刪除:(type類型將變回default_t)
semanage fcontext -d –t httpdsyscontentt ‘/testdir(/.*)?’
4.SELinux端口標簽
在SELinux安全策略中,定義了服務具體可使用的端口號,如果服務未使用對應的端口號,將會
導致無法使用,semanage命令也可以用來修改這些默認端口。
查看端口標簽:
semanage port –l
添加指定端口到指定服務:
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.SElinux布爾值
布爾型規則:
getsebool
setsebool
查看bool命令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 查看修改過的布爾值
設置bool值命令:
setsebool [-P] boolean value(on,off)?????????????? 不加-P只修改內存,臨時生效
setsebool [-P] Boolean=value(0,1)??????????????? 加-P同時修改內存和配置bool
6.SELinux日志管理:
將錯誤的信息寫入/var/log/message
yum install setroubleshoot(重啟生效)
查看安全事件日志說明
grep setroubleshoot /var/log/messages
sealert -l UUID
掃描并分析日志
sealert -a /var/log/audit/audit.log
7.SELinux幫助:
yum –y install selinux-policy-devel ( centos7.2)
yum –y install selinux-policy-doc (centos7.3/7.4)
mandb | makewhatis
man -k _selinux
四、操作:SELinux環境下遷移httpd服務默認目錄
將默認目錄/var/www/html遷移至/data/website/html目錄
一、創建/data/html目錄:
mkdir ? /data/html
二、修改httpd服務配置文件
cat ?/etc/httpd/conf/httpd.conf
#DocumentRoot “/var/www/html” ? ? ? ?加上注釋
DocumentRoot “/data/website/html”
#<Directory “/var/www/html”> ? ? ? ? ? ? 加上注釋
<Directory “/data/website/html”>
三、修改目錄type類型:
semanage fcontext -l |grep /var/www/html ? ? ? ? ? ? ? ? ? ? ? ? ?查看默認目錄的文件type類型
chcon -R -t httpd_sys_content_t /data/website/html
或:
修改安全上下文數據庫
semanage fcontext -a ?-t ?httpd_sys_content_t ? /data/html(/.*)?
restorecon -R /data/html ? ? ? ? ? ? ? ? ? ? ? ? ? ?同步數據庫type類型
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98614