欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:運(yùn)維 SELinux詳解

柚子快報(bào)激活碼778899分享:運(yùn)維 SELinux詳解

http://yzkb.51969.com/

文章目錄

SELinux詳解什么是SELinux當(dāng)初設(shè)計(jì)的目標(biāo):避免資源的誤用傳統(tǒng)的文件權(quán)限與賬號(hào)主要的關(guān)系:自主訪問控制(DAC)以策略規(guī)則制定特定進(jìn)程讀取特定文件:強(qiáng)制訪問控制(MAC)

SELinux的運(yùn)行模式安全上下文進(jìn)程與文件SELinux類型字段的相關(guān)性

SELinux 3種模式的啟動(dòng)、關(guān)閉與查看三種模式的運(yùn)行狀態(tài)SELinux的啟動(dòng)與關(guān)閉

SELinux策略內(nèi)的規(guī)則管理SELinux各個(gè)規(guī)則的布爾值查詢getseboolSELinux類型查詢seinfo、sesearchseinfo(查詢目前所有的身份識(shí)別與角色)sesearch(查看SELinux的類型)

修改SELinux規(guī)則的布爾值setsebool

SELinux安全上下文修改chcon手動(dòng)修改文件的SELinux類型restorecon讓文件恢復(fù)正確的SELinux類型semanage默認(rèn)目錄的安全上下文查詢與修改

SELinux詳解

什么是SELinux

什么是SELinux呢?其實(shí)它是【Security-Enhanced Linux】的英文縮寫,字母上的意思就是安全強(qiáng)化Linux的意思。

當(dāng)初設(shè)計(jì)的目標(biāo):避免資源的誤用

SELinux是由美國(guó)國(guó)家安全局(NSA)開發(fā)的,當(dāng)初開發(fā)的原因是很多企業(yè)發(fā)現(xiàn),系統(tǒng)出現(xiàn)問題的原因大部分都在于【內(nèi)部員工的資源誤用】,實(shí)際由外部發(fā)動(dòng)的攻擊反而沒有那么嚴(yán)重。那么什么是【員工資源誤用】呢?舉例來說,如果有個(gè)不是很懂系統(tǒng)的系統(tǒng)管理員為了自己設(shè)置的方便,將網(wǎng)頁(yè)所在目錄【/var/www/html/】的權(quán)限設(shè)置為【drwxrwxrwx】。

那么如果【/var/www/html】設(shè)置為777,代表所有進(jìn)程均可對(duì)該目錄讀寫,萬(wàn)一你真的啟動(dòng)了WWW服務(wù)器軟件,那么該軟件所觸發(fā)的進(jìn)程將可以寫入該目錄,而該進(jìn)程卻是對(duì)整個(gè)Internet提供服務(wù)的。只要有心人接觸到這個(gè)進(jìn)程,而且該進(jìn)程剛好又提供了用戶進(jìn)行寫入的功能,那么外部的人很可能就會(huì)想你的系統(tǒng)寫入些莫名其妙的東西。

為了管理這方面的權(quán)限與進(jìn)程的問題,美國(guó)國(guó)家安全局開始著手處理操作系統(tǒng)這方面的管理。由于Linux是自由軟件,程序代碼都是公開的,因此它們便使用Linux來作為研究的目標(biāo),最后更將研究結(jié)果整合到Linux內(nèi)核中,那就是SELinux。所以說,SELinux是整合到內(nèi)核的一個(gè)模塊。

這也就是說:其實(shí)SELinux是在進(jìn)行進(jìn)程、文件等詳細(xì)權(quán)限配置時(shí)依據(jù)的一個(gè)內(nèi)核模塊。由于啟動(dòng)網(wǎng)絡(luò)服務(wù)的也是進(jìn)程,因此剛好也是能夠控制網(wǎng)絡(luò)服務(wù)能否讀寫系統(tǒng)資源的第一道關(guān)卡。

傳統(tǒng)的文件權(quán)限與賬號(hào)主要的關(guān)系:自主訪問控制(DAC)

我們知道系統(tǒng)的賬號(hào)主要分為系統(tǒng)管理員(root)與一般用戶,而這兩種身份能否使用系統(tǒng)上面的文件資源則于rwx的權(quán)限設(shè)置有關(guān)。不過你需要注意的是,各種權(quán)限設(shè)置對(duì)root是無(wú)效的。因此,當(dāng)某個(gè)進(jìn)程想要對(duì)文件進(jìn)行讀寫時(shí),系統(tǒng)就會(huì)根據(jù)該進(jìn)程的擁有者和用戶組,比對(duì)文件的權(quán)限,只有通過權(quán)限檢查,才可以讀寫該文件。

這種讀寫文件系統(tǒng)的方式被稱為【自主訪問控制(DAC)】?;旧?,就是依據(jù)進(jìn)程的擁有者于文件資源的rwx權(quán)限來決定有無(wú)讀寫的權(quán)限。不過這種DAC的訪問控制有幾個(gè)缺點(diǎn),就是:

root具有最高權(quán)限:如果不小心某個(gè)進(jìn)程被有心人獲取,且該進(jìn)程屬于root權(quán)限,那么這個(gè)進(jìn)程就可以在系統(tǒng)上執(zhí)行任何資源的讀寫。用戶可以獲取進(jìn)程來修改文件資源的訪問權(quán)限:如果你不小心將某個(gè)目錄的權(quán)限設(shè)置為777,由于對(duì)任何人的權(quán)限都會(huì)變成rwx,因此該目錄就會(huì)被任何人所任意讀寫。

以策略規(guī)則制定特定進(jìn)程讀取特定文件:強(qiáng)制訪問控制(MAC)

現(xiàn)在我們知道DAC的困擾就是當(dāng)用戶獲取進(jìn)程后,它可以借由這個(gè)進(jìn)程與自己默認(rèn)的權(quán)限來處理它自己的文件資源。萬(wàn)一這個(gè)用戶對(duì)Linux系統(tǒng)不熟,就很可能會(huì)又資源誤用的問題產(chǎn)生。為了避免DAC容易發(fā)生的問題,SELinux引入了強(qiáng)制訪問控制(MAC)的方法。

強(qiáng)制訪問控制(MAC),它可以針對(duì)特定的進(jìn)程與特定的文件資源來管理權(quán)限。也就是說,即使你是root,那么在使用不同的進(jìn)程時(shí),你所能獲取的權(quán)限也并不一定是root,而要根據(jù)當(dāng)時(shí)該進(jìn)程的設(shè)置而定。如此一來,我們針對(duì)控制的【主體】變成了【進(jìn)程】而不是用戶。此外,這個(gè)主體進(jìn)程也不能任意使用系統(tǒng)文件資源,因?yàn)槊總€(gè)文件資源也針對(duì)該主體進(jìn)程設(shè)置了可使用的權(quán)限。但是整個(gè)系統(tǒng)進(jìn)程那么多、文件那么多,一項(xiàng)一項(xiàng)的控制可就沒完沒了。所以SELinux也提供了一些默認(rèn)策略(Policy),并在該策略內(nèi)提供多個(gè)規(guī)則(rule),讓你可以選擇是否啟用該控制規(guī)則。

在強(qiáng)制訪問的設(shè)置下,我們的進(jìn)程能夠活動(dòng)的空間就變小了。舉例來說,WWW服務(wù)器軟件的進(jìn)程為httpd整個(gè)程序,而默認(rèn)情況下,httpd僅能在/var/www/這個(gè)目錄下面讀寫文件。如果httpd這個(gè)進(jìn)程想要到其他目錄取讀寫數(shù)據(jù),處理規(guī)則設(shè)置要開放外,目標(biāo)目錄也要設(shè)置成httpd可讀取的類型(type)才行,限制非常多。所以不小心httpd被黑客獲取了控制權(quán),它也無(wú)權(quán)瀏覽/etc/shadow等重要配置文件。

針對(duì)apache這個(gè)WWW網(wǎng)絡(luò)服務(wù)使用DAC或MAC的結(jié)果,兩者間的關(guān)系可以使用下圖

左圖是沒有SELinux的DAC讀寫結(jié)果,apache這個(gè)root所主導(dǎo)的進(jìn)程,可以在這三個(gè)目錄內(nèi)作任何文件的新建與修改。右邊則是加上SELinux的MAC管理的結(jié)果,SELinux僅會(huì)針對(duì)apache這個(gè)【進(jìn)程】開放部分目錄的使用權(quán),其他非正規(guī)目錄就不會(huì)讓apache使用。因此不管你是誰(shuí)都不能穿透MAC的框。

SELinux的運(yùn)行模式

SELinux是通過MAC的方式來管理進(jìn)程的,它控制的主體是進(jìn)程,而目標(biāo)則是該進(jìn)程能否讀取的【文件資源】

主體 SELinux主要管理的就是進(jìn)程 目標(biāo) 主體進(jìn)程能否讀寫的【目標(biāo)資源】一般是文件系統(tǒng) 策略 由于進(jìn)程與文件數(shù)量龐大,因此SELinux會(huì)依據(jù)某些服務(wù)來制訂基本的讀寫安全性策略,這些策略內(nèi)還會(huì)有詳細(xì)的規(guī)則來指定不同的服務(wù)是否開放某些資源的讀寫。三個(gè)主要的策略,分別是:

targeted:針對(duì)網(wǎng)絡(luò)服務(wù)限制較多,針對(duì)本機(jī)限制較少,是默認(rèn)的策略 minimum:由target自定義而來,僅針對(duì)選擇的進(jìn)程來保護(hù) mls:完整的SELinux限制,限制方面較為嚴(yán)格 建議使用默認(rèn)的策略即可(targeted) 安全上下文(security context) 上面寫了主體、目標(biāo)、策略,除了策略指定之外,主體與目標(biāo)的安全上下文必須一致才能夠順利的讀寫。這個(gè)安全上下文(security context)有點(diǎn)類似文件系統(tǒng)的rwx。安全上下文的內(nèi)容與設(shè)置非常重要,如果設(shè)置錯(cuò)誤,你的某些服務(wù)(主體進(jìn)程)就無(wú)法讀寫文件系統(tǒng)(目標(biāo)資源),當(dāng)然就會(huì)一直出現(xiàn)【權(quán)限不符】的錯(cuò)誤信息。

上圖的重點(diǎn)在【主體】如何獲取【目標(biāo)】的資源訪問權(quán)限。由上圖可知

(1)主體進(jìn)程必須要通過SELinux策略內(nèi)的規(guī)則放行后,才可以與目標(biāo)資源進(jìn)行安全上下文比對(duì)

(2)若比對(duì)失敗無(wú)法讀寫目標(biāo),若比對(duì)成功則可以開始讀寫目標(biāo)。最終能否讀寫目標(biāo)還是與文件系統(tǒng)rwx權(quán)限有關(guān)。

安全上下文

那么安全上下文到底是什么樣的存在呢?我們可以使用ls -Z(注意:你必須已經(jīng)啟動(dòng)了SELinux才行)

# 先來看看root家目錄下面的【文件的SELinux相關(guān)信息】

[root@chenshiren ~]# ls -Z

system_u:object_r:admin_home_t:s0 anaconda-ks.cfg

unconfined_u:object_r:mail_home_t:s0 dead.letter unconfined_u:object_r:admin_home_t:s0 mailfile.txt

unconfined_u:object_r:admin_home_t:s0 csqbashrc unconfined_u:object_r:admin_home_t:s0 givecsqmail.txt system_u:object_r:admin_home_t:s0 nohup.out

unconfined_u:object_r:admin_home_t:s0 csq.txt

system_u:object_r:admin_home_t:s0 givecsq.txt

system_u:object_r:admin_home_t:s0 sleep500s.sh

# 上述特殊字體的部分,就是安全上下文的內(nèi)容。

如上所示,安全上下文用冒號(hào)分為三個(gè)字段

Identify:role:type

身份識(shí)別:角色:類型

三個(gè)字段的意義:

身份識(shí)別 相當(dāng)于賬號(hào)方面的身份識(shí)別,主要的身份識(shí)別由下面幾種常見的類型

unconfined_u:不受限的用戶,也就是說,該文件來自不受限的進(jìn)程。一般來說,我們使用可登錄賬號(hào)獲取bash后默認(rèn)的bash環(huán)境是不受SELinux管制的,因?yàn)閎ash不是說明特別的網(wǎng)絡(luò)服務(wù) system_u:系統(tǒng)用戶,大部分是系統(tǒng)自己產(chǎn)生的文件。 基本上,如果是系統(tǒng)或軟件本身所提供的文件,大多就是system_u這個(gè)身份名稱;而如果是我們用戶通過bash自己建立的文件,大多則是不受限的unconfined_u身份;如果是網(wǎng)絡(luò)服務(wù)所產(chǎn)生的文件,或是系統(tǒng)服務(wù)運(yùn)行過程產(chǎn)生的文件,則大部分的識(shí)別就會(huì)是system_u。 上述內(nèi)容中,操作系統(tǒng)安裝自動(dòng)產(chǎn)生的【anaconda-ks.cfs】就會(huì)是【system_u】,而我們自己創(chuàng)建的【csq.txt】就會(huì)是【unconfined_u】這個(gè)標(biāo)識(shí)。 角色 通過角色字段,我們可以字段這個(gè)數(shù)據(jù)屬于進(jìn)程、文件資源還是代表用戶,一般的角色有:

object_r:代表的是文件或目錄等資源,這應(yīng)該是最常見的system_r:代表的就是進(jìn)程,不過,一般用戶也會(huì)被指定成為system_r 角色最后面使用【_r】來結(jié)尾,因?yàn)槭莚ole的意思 類型 基本上,一個(gè)主體進(jìn)程能不能讀取到這個(gè)文件資源與類型字段有關(guān),而類型字段在文件與進(jìn)程方面的定義又不太相同,分別是:

type:在文件資源上面稱為類型domain:在主體進(jìn)程則稱為域 domain需要與type搭配,則該進(jìn)程才能夠順利讀取文件資源

進(jìn)程與文件SELinux類型字段的相關(guān)性

查看系統(tǒng)中的進(jìn)程SELinux下面的安全上下文是什么?

# 再來查看一下系統(tǒng)【進(jìn)程的SELinux相關(guān)信息】

[root@chenshiren ~]# ps -eZ

system_u:system_r:init_t:s0 1 ? 00:00:02 systemd

system_u:system_r:kernel_t:s0 2 ? 00:00:00 kthreadd

system_u:system_r:kernel_t:s0 6 ? 00:00:00 ksoftirqd/0

.......

......

......

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1971 ? 00:00:00 sshd

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1972 pts/1 00:00:00 bash

# 基本上進(jìn)程主要就分為兩大類,一種是系統(tǒng)有受限的system_u:system_r,另一種可能是用戶自己的,

# 比較不受限進(jìn)程(通常是本機(jī)用戶自己執(zhí)行的進(jìn)程),就是unconfined_u:unconfined_r這兩種

身份識(shí)別角色該對(duì)應(yīng)在targeted的意義unconfined_uunconfined_r一般可登錄用戶的進(jìn)程,比較沒有受限的進(jìn)程的意思。大多數(shù)都是用戶已經(jīng)順利登錄系統(tǒng)后,所用來操作系統(tǒng)的進(jìn)程。例bash、X window相關(guān)軟件system_usystem_r由于為系統(tǒng)賬號(hào),因此是非交互式的系統(tǒng)運(yùn)行進(jìn)程,大多數(shù)的系統(tǒng)進(jìn)程均是這種類型

如上所述,在默認(rèn)的target策略下,其實(shí)最重要的字段就是類型字段(type),主體與目標(biāo)之間是否具有可讀寫的權(quán)限,與進(jìn)程的domain及文件的type有關(guān)。兩者的關(guān)系可以使用crond以及它的配置文件來說明,就是通過/usr/sbin/crond、/etc/crontab、/etc/cron.d等文件來說明。首先,來看看這幾個(gè)安全上下文的內(nèi)容

1.先看看crond這個(gè)【進(jìn)程】的安全上下文

[root@localhost ~]# ps -eZ | grep cron

system_u:system_r:crond_t:s0-s0:c0.c1023 816 ? 00:00:00 crond

# 這個(gè)安全上下文的類型名稱為 crond_t

2.再來看看執(zhí)行文件、配置文件等的安全上下文內(nèi)容是什么

[root@localhost ~]# ll -Zd /usr/sbin/crond /etc/crontab /etc/cron.d

drwxr-xr-x. root root system_u:object_r:system_cron_spool_t:s0 /etc/cron.d

-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab

-rwxr-xr-x. root root system_u:object_r:crond_exec_t:s0 /usr/sbin/crond

當(dāng)我們執(zhí)行/usr/sbin/crond之后,這個(gè)程序變成的進(jìn)程的 domain 類型會(huì)是crond_exec_t,而這個(gè)crond_exec_t能夠讀取的配置文件則為system_cron_spool_t這種的類型。因此不論/etc/crontab、/etc/cron.d 還是/var/spool/cron都會(huì)是相關(guān)的SELinux類型(/var/spool/cron為user_cron_spool_t)

上圖意義可以這樣理解:

首先,我們觸發(fā)一個(gè)可執(zhí)行的目標(biāo)文件,即具有【crond_exec_t】這個(gè)類型的【/usr/sbin/crond】文件該文件的類型會(huì)讓這個(gè)文件所造成的主體進(jìn)程具有crond這個(gè)域(domain),我們的策略針對(duì)這個(gè)域已經(jīng)制定了許多規(guī)則,其中包括這個(gè)域可以讀取的目標(biāo)資源類型。由于crond domain被設(shè)置為可以讀取system_cron_spool_t這個(gè)類型的目標(biāo)文件(Object),因此你的配置文件放到/etc/cron.d/目錄下,就能被crond那個(gè)進(jìn)程讀取了。但最終能不能讀到正確的數(shù)據(jù),還要看rwx是否符合Linux權(quán)限的規(guī)范。

上述流程告訴我們幾個(gè)重點(diǎn),第一個(gè)是策略內(nèi)需要制訂詳細(xì)的domain/type相關(guān)性;第二個(gè)是若文件的type設(shè)置錯(cuò)誤,那么即使權(quán)限設(shè)置為rwx全開的777,該主體進(jìn)程也無(wú)法讀取目標(biāo)文件資源。

那么如果,你的crond配置文件的SELinux并不是system_cron_spool_t該配置文件真的可以順利的讀取運(yùn)行嗎

1.假設(shè)你因?yàn)椴皇斓木壒?,因此是在【root家目錄】建立一個(gè)如下的cron設(shè)置

[root@chenshiren ~]# vim checktime

10 * * * * root sleep 60s

2.檢查后才發(fā)現(xiàn)文件放錯(cuò)了目錄,又不想要保留副本,因此使用mv移動(dòng)到了正確的目錄

[root@chenshiren ~]# mv checktime /etc/cron.d/

[root@chenshiren ~]# ll /etc/cron.d/checktime

-rw-r--r--. 1 root root 26 3月 24 22:19 /etc/cron.d/checktime

# 權(quán)限是644,確定沒問題,任何進(jìn)程都能夠讀取

3.強(qiáng)制重新啟動(dòng)crond,然后看一下日志文件,看看有沒有問題發(fā)生

[root@localhost ~]# systemctl restart crond

[root@localhost ~]# tail /var/log/cron

Mar 25 00:41:17 chenshiren crond[2296]: ((null)) Unauthorized SELinux context=system_u:system_r:system_cronjob_t:s0-s0:c0.c1023 file_context=unconfined_u:object_r:admin_home_t:s0 (/etc/cron.d/checktime)

Mar 25 00:41:17 chenshiren crond[2296]: (root) FAILED (loading cron table)

Mar 25 00:41:17 chenshiren crond[2296]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

# 上面的意思是,有錯(cuò)誤,因?yàn)樵镜陌踩舷挛呐c文件的實(shí)際安全上下文無(wú)法匹配的緣故。

[root@chenshiren ~]# ls -Z /etc/cron.d/checktime

unconfined_u:object_r:admin_home_t:s0 /etc/cron.d/checktime

從上面的案例來看,為我們配置的文件確實(shí)沒有辦法被crond這個(gè)服務(wù)所讀取。而原因在日志文件內(nèi)就有說明,主要就是來自SELinux安全上下文類型的不同所致

SELinux 3種模式的啟動(dòng)、關(guān)閉與查看

目前SELinux依據(jù)啟動(dòng)與否,共有三種模式,分別如下:

Enforcing:強(qiáng)制模式,代表SELinux運(yùn)行中,且已經(jīng)正確開始限制domain/typePermissive:寬容模式,代表SELinux運(yùn)行中,不過僅會(huì)有警告信息并不會(huì)實(shí)際限制domain/type的讀寫Disabled:關(guān)閉模式,SELinux并沒有實(shí)際運(yùn)行。

那么這3種模式與上面談到的策略規(guī)則、安全上下文是什么關(guān)系呢?如下圖

如上圖,并不是所有的進(jìn)程都會(huì)被SELinux所管制,因此最左邊會(huì)出現(xiàn)一個(gè)所謂的【有受限的進(jìn)程主體】。那如何查看有沒有受限?可以通過【ps -eZ】去查看。

舉例來說,我們找找crond與bash這兩個(gè)進(jìn)程是否被限制

[root@localhost ~]# ps -eZ | grep -E 'cron|bash'

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 8353 tty1 00:00:00 bash

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 8761 pts/0 00:00:00 bash

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 8775 pts/1 00:00:00 bash

system_u:system_r:crond_t:s0-s0:c0.c1023 60387 ? 00:00:00 crond

如上案例所示,我們可以看到crond確實(shí)是受限的主體進(jìn)程,而bash因?yàn)槭潜緳C(jī)進(jìn)程,就是不受限(unconfined_t)的類型。也就是說bash是不用通過上面 那個(gè)圖的流程,直接去判斷rwx了。

三種模式的運(yùn)行狀態(tài)

如果是disabled模式,那么SELinux將不會(huì)運(yùn)行,當(dāng)然受限的進(jìn)程也不會(huì)經(jīng)過SELinux,也是直接判斷rwx。

如果是permissive(寬容模式)?這種模式也是不會(huì)阻止主體進(jìn)程(所以我們?cè)?什么SELinux標(biāo)題的最后的一張圖中的MAC里面的箭頭是可以被穿透的),如果沒有通過策略規(guī)則或安全上下文比對(duì)時(shí),那么該讀寫操作將會(huì)被記錄起來(log),可作為未來檢查問題的判斷依據(jù)。

Enforcing模式,就是實(shí)際將受限主體進(jìn)入規(guī)則比對(duì)、安全上下文比對(duì)的流程,若失敗,就直接阻止主題進(jìn)程的讀寫操作,并且將他記錄下來。如果通通沒問題,才會(huì)進(jìn)入到rwx權(quán)限判斷。

那你如何知道目前的SELinux模式呢?可以使用getenforce來查看

[root@localhost ~]# getenforce

Enforcing # 就顯示出目前的模式為Enforcing

另外又如何知道SELinux的策略(Policy)是什么呢?這時(shí)可以使用sestatus來查看

sestatus [-vb]

選項(xiàng):

-v:檢查列于/etc/sestatus.conf內(nèi)的文件與進(jìn)程的安全上下文內(nèi)容

-b:將目前策略的規(guī)則布爾值列出,就是某些規(guī)則(rule)是否要啟動(dòng)(0/1)的意思

使用案例

列出目前SELinux使用哪個(gè)策略(Policy)?

[root@localhost ~]# sestatus

SELinux status: enabled <==是否啟動(dòng)SELinux

SELinuxfs mount: /sys/fs/selinux <==SELinux的相關(guān)文件掛載點(diǎn)

SELinux root directory: /etc/selinux <==SELinux的根目錄所在

Loaded policy name: targeted <==目前的策略是什么?

Current mode: enforcing <==目前的模式

Mode from config file: enforcing <==目前配置文件內(nèi)規(guī)范的SELinux模式

Policy MLS status: enabled <==是否含有MLS的模式機(jī)制

Policy deny_unknown status: allowed <==是否默認(rèn)阻止為止的主體進(jìn)程

Max kernel policy version: 31

如上所示,目前是啟動(dòng)的而且是Enforcing模式,而由配置文件查詢得知為Enforcing模式。此外,目前默認(rèn)策略為targeted。SELinux的配置文件是哪個(gè)?其實(shí)就是/etc/selinux/config這個(gè)文件。

[root@localhost ~]# vim /etc/selinux/config

SELINUX=enforcing <==調(diào)整enforcing、permissive、disabled

SELINUXTYPE=targeted <==目前僅有 targeted、mls、minimum三種策略

若需要修改默認(rèn)策略的話,直接修改SELinux=enforcing那一行即可。

SELinux的啟動(dòng)與關(guān)閉

你需要注意的是,如果你修改了策略則需要重新啟動(dòng);如果由Enforcing或Permissive改成Disabled,或由Disabled改成其他兩個(gè),那也必須要重新啟動(dòng)。這是因?yàn)镾ELinux是整合到內(nèi)核中的,你可以在SELinux運(yùn)行下切換成強(qiáng)制(Ebfircing)或?qū)捜?Permissive)模式,不能夠直接關(guān)閉SELinux。

不過你需要注意的是,如果從Disable 轉(zhuǎn)到啟動(dòng)SELinux的模式時(shí),由于系統(tǒng)必須要針對(duì)文件寫入安全上下文的信息,因此啟動(dòng)過程會(huì)花費(fèi)不少的時(shí)間在等待重新寫入SELinux安全上下文(有時(shí)也成為SELinux Label),而且在寫完之后還要再重新啟動(dòng)一次,你必須要等待很長(zhǎng)一段時(shí)間。等到下次成功后,再使用getenforce或sestatus來查看是否成功啟動(dòng)到Enforcing模式。

如果你已經(jīng)在用Enforcing模式,但是可能由于一些設(shè)置的問題導(dǎo)致SELinux讓某些服務(wù)無(wú)法正常地運(yùn)行。你可以將Enforcing的模式改為寬容(Permissive)的模式,讓SELinux只會(huì)警告無(wú)法順利連接的信息,而不是直接阻止主體進(jìn)程的讀取權(quán)限。讓SELinux模式在Enforcing與Permissive之間切換的方法為:

setenforce [ 0 | 1 ] # setenforce 無(wú)法在Disabled模式下切換模式

選項(xiàng):

0:轉(zhuǎn)成Permissive寬容模式

1:轉(zhuǎn)成Enforcing強(qiáng)制模式

# 將SELinux在Enforcing與Permissive之間切換與查看

[root@localhost ~]# setenforce 0

[root@localhost ~]# getenforce

Permissive

[root@localhost ~]# setenforce 1

[root@localhost ~]# getenforce

Enforcing

# 完全關(guān)閉SELinux

grubby --update-kernel ALL --args selinux=0 ; reboot

# 如果要再次開啟

grubby --update-kernel ALL --args selinux=1

SELinux策略內(nèi)的規(guī)則管理

SELinux的三種模式會(huì)影響到主體進(jìn)程的放行與否。如果是進(jìn)入Enforcing模式,那么接下來下來會(huì)影響到主體進(jìn)程的,當(dāng)然就是策略【target 策略內(nèi)的各項(xiàng)規(guī)則(rules)】。那么們?cè)趺床榭催@個(gè)策略到底影響了多少主體進(jìn)程的規(guī)則呢?使用getsebool

SELinux各個(gè)規(guī)則的布爾值查詢getsebool

# 查看當(dāng)前策略影響了多少主體進(jìn)程的規(guī)則

[root@localhost ~]# getsebool -a

abrt_anon_write --> off

abrt_handle_event --> off

......

.....

...

cron_can_relabel --> off

cron_userdomain_transition --> on

.....

....

httpd_enable_homedirs --> off

......

...

# 這么多SELinux規(guī)則,每個(gè)規(guī)則后面都列出現(xiàn)在是允許放行還是不許放行的布爾值

SELinux類型查詢seinfo、sesearch

SELinux有這么規(guī)則,但是每個(gè)規(guī)則到底在限制什么東西?如果想知道就要使用seinfo等工具。這些工具并沒有默認(rèn)安裝我們需要手動(dòng)安裝一下

[root@localhost ~]# yum install -y /opt/centos/Packages/setools-console-*

# 找到自己yum倉(cāng)庫(kù)然后安裝

seinfo(查詢目前所有的身份識(shí)別與角色)

seinfo [-Atrub]

選項(xiàng):

-A:列出SELinux的狀態(tài)、規(guī)則布爾值、身份識(shí)別、角色、類型等所有信息。

-u:列出SELinux的所有身份識(shí)別(user)種類

-r:列出SELinux的所有角色(role)種類

-t:列出SELinux的所有類型(type)種類

-b:列出所有規(guī)則的種類(布爾值)

# 示例1 列出SELinux在此策略下的統(tǒng)計(jì)狀態(tài)

[root@localhost ~]# seinfo

Statistics for policy file: /sys/fs/selinux/policy

Policy Version & Type: v.31 (binary, mls)

Classes: 130 Permissions: 272

Sensitivities: 1 Categories: 1024

Types: 4794 Attributes: 258

Users: 8 Roles: 14

Booleans: 316 Cond. Expr.: 362

Allow: 107901 Neverallow: 0

Auditallow: 158 Dontaudit: 10082

Type_trans: 18154 Type_change: 74

Type_member: 35 Role allow: 37

Role_trans: 414 Range_trans: 5899

Constraints: 143 Validatetrans: 0

Initial SIDs: 27 Fs_use: 32

Genfscon: 103 Portcon: 614

Netifcon: 0 Nodecon: 0

Permissives: 0 Polcap: 5

# 上面我們可以看到整個(gè)策略是targeted,此策略的安全上下文類型有4794個(gè)

# 而各種SELinux的規(guī)則(Booleans)共制訂了316條

sesearch(查看SELinux的類型)

上面的seinfo沒有談到規(guī)則相關(guān)的東西,在之前我們創(chuàng)建過一個(gè)checktime的文件并移動(dòng)到了/etc/cron.d/下面,但是他的SELinux類型不對(duì),crond整個(gè)進(jìn)程類型是crond_t,那么crond_t能夠讀取的文件SELinux類型有哪些?

sesearch [-A] [-s 主體類型] [-t 目標(biāo)類型] [-b 布爾值]

選項(xiàng):

-A:列出后面數(shù)據(jù)中,允許【讀取或放行】的相關(guān)信息

-t:后面接類型,例如-t httpd_t

-b:后面接SELinux的規(guī)則,例如 -b httpd_enable_ftp_server

# 示例1 找出crond_t這個(gè)主體進(jìn)程能夠讀取的文件SELinux類型

[root@localhost ~]# sesearch -A -s crond_t | grep spool

allow crond_t system_cron_spool_t : dir { ioctl read getattr lock search open } ;

allow crond_t var_spool_t : file { ioctl read getattr lock open } ;

allow crond_t cron_spool_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;

allow crond_t cron_spool_t : dir { ioctl read write getattr lock add_name remove_name search open } ;

allow crond_t user_cron_spool_t : dir { ioctl read write getattr lock add_name remove_name search open } ;

allow daemon user_cron_spool_t : file { ioctl read write getattr lock append } ;

allow crond_t var_spool_t : dir { ioctl read getattr lock search open } ;

allow crond_t system_cron_spool_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;

allow crond_t user_cron_spool_t : lnk_file { read getattr } ;

allow crond_t user_cron_spool_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;

allow crond_t system_cron_spool_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;

allow crond_t user_cron_spool_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;

# allow后面接主體進(jìn)程以及文件的SELinux類型,上面的數(shù)據(jù)是選取出來的

# 意思是說,crond_t可以讀取system_cron_spool_t的文件/目錄類型等

# 示例2 找出crond_t是否能夠讀取/etc/cron.d/checktime這個(gè)我們自定義的配置文件?

[root@localhost ~]# ll -Z /etc/cron.d/checktime

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /etc/cron.d/checktime

# 一個(gè)SELinux類型為amdin_home_t,一個(gè)是文件(file)

[root@localhost ~]# sesearch -A -s crond_t | grep admin_home_t

allow crond_t admin_home_t : lnk_file { read getattr } ;

allow domain admin_home_t : dir { getattr search open } ;

allow userdom_filetrans_type admin_home_t : lnk_file { read getattr } ;

allow domain admin_home_t : lnk_file { read getattr } ;

allow crond_t admin_home_t : dir { ioctl read getattr lock search open } ;

allow userdom_filetrans_type admin_home_t : dir { ioctl read write getattr lock add_name remove_name search open } ;

# 雖然有crond_t admin_home_t 存在,但是這是總體的信息,并沒有針對(duì)某些規(guī)則的尋找

# 所以還是確定checktime能否被讀取。但是,基本上就是SELinux的類型出問題,因此才會(huì)無(wú)法讀取

所以說,/etc/cron.d/checktime這個(gè)我們自己復(fù)制過去的文件會(huì)沒有辦法讀取的原因,就是因?yàn)镾ELinux類型錯(cuò)誤,根本就無(wú)法讀取。

使用getsebool -a 里面看到的 httpd_enable_homeedirs到底是上面?又是規(guī)范了哪些主體進(jìn)程能夠讀取SELinux類型呢?

[root@localhost ~]# sesearch -A -b httpd_enable_homedirs

Found 77 semantic av rules:

allow httpd_t user_home_dir_t : lnk_file { read getattr } ;

allow httpd_suexec_t user_home_dir_t : dir { getattr search open } ;

allow httpd_t nfs_t : lnk_file { read getattr } ;

allow httpd_sys_script_t nfs_t : file { ioctl read getattr lock open } ;

allow httpd_sys_script_t cifs_t : lnk_file { read getattr } ;

allow httpd_suexec_t user_home_dir_t : lnk_file { read getattr } ;

allow httpd_t cifs_t : file { ioctl read getattr lock open } ;

allow httpd_sys_script_t nfs_t : dir { getattr search open } ;

allow httpd_sys_script_t nfs_t : dir { ioctl read getattr lock search open } ;

allow httpd_sys_script_t nfs_t : dir { getattr search open } ;

allow httpd_sys_script_t nfs_t : dir { ioctl read getattr lock search open } ;

allow httpd_suexec_t user_home_type : lnk_file { read getattr } ;

allow httpd_sys_script_t cifs_t : file { ioctl read getattr lock open } ;

allow httpd_user_script_t user_home_type : lnk_file { read getattr } ;

allow httpd_t cifs_t : lnk_file { read getattr } ;

......

.....

# 從上面的數(shù)據(jù)可以理解,在這個(gè)規(guī)則中,主要是放行httpd_t能否讀取使用者家目錄的文件

# 所以,如果這個(gè)規(guī)則沒有啟動(dòng),基本上,httpd_t這種進(jìn)程就無(wú)法讀取使用者家目錄下的文件

修改SELinux規(guī)則的布爾值setsebool

那么如果查詢某個(gè)SELinux規(guī)則,并且以sesearch知道該規(guī)則的用途后,想要關(guān)閉或啟動(dòng)它,又該如何處置

setsebool [-P] 【規(guī)則名稱】 [ 0 | 1 ]

選項(xiàng):

-P:之間將設(shè)置寫入配置文件,該設(shè)置信息未來會(huì)生效

使用案例

查詢httpd_enable_homedirs這個(gè)規(guī)則的狀態(tài),并且修改這個(gè)規(guī)則成為不通的布爾值

[root@localhost ~]# getsebool httpd_enable_homedirs

httpd_enable_homedirs --> off # 查看是關(guān)閉的我們開啟他

[root@localhost ~]# setsebool -P httpd_enable_homedirs 1

[root@localhost ~]# getsebool httpd_enable_homedirs

httpd_enable_homedirs --> on # 開啟成功

SELinux安全上下文修改

SELinux對(duì)受限的主體進(jìn)程有沒有影響,第一關(guān)考慮SELinux的三種類型,第二個(gè)考慮SELinux的策略規(guī)則是否放行,第三關(guān)則是開始比對(duì)SELinux類型。由上面的策略規(guī)則我們可以知道,sesearch來找到主體進(jìn)程與SELinux類型關(guān)系。那么怎么修改文件的SELinux,讓主體進(jìn)程能夠讀到正確的文件呢?

chcon手動(dòng)修改文件的SELinux類型

chcon [-R] [-t type] [-u user] [-r role] 文件

chcon [-R] --reference=范例文件 文件

選項(xiàng):

-R:連同該目錄下的子目錄也同時(shí)修改

-t:后面接安全上下文的類型欄位,例如httpd_sys_content_t

-u:后面接身份識(shí)別,例如system_u

-r:后面接角色,例如 system_r

-v:若有變化成功,請(qǐng)將變動(dòng)的結(jié)果列出來

--reference=范例文件:拿某個(gè)文件當(dāng)范例來修改后續(xù)接的文件類型

# 示例1 查詢一下/etc/hosts的SELinux類型,并將該類型套用到/etc/cron.d/checktime上

[root@chenshiren ~]# ll -Z /etc/hosts

-rw-r--r--. 1 root root system_u:object_r:net_conf_t:s0 158 6月 23 2020 /etc/hosts

[root@chenshiren ~]# chcon -v -t net_conf_t /etc/cron.d/checktime

正在更改 '/etc/cron.d/checktime' 的安全上下文

[root@chenshiren ~]# ll -Z /etc/cron.d/checktime

-rw-r--r--. 1 root root unconfined_u:object_r:net_conf_t:s0 26 3月 24 22:19 /etc/cron.d/checktime

-rw-r--r--. root root unconfined_u:object_r:net_conf_t:s0 /etc/cron.d/checktime

# 示例2 直接以/etc/shadow的SELinux類型套用到/etc/cron.d/checktime上

[root@chenshiren ~]# chcon -v --reference=/etc/shadow /etc/cron.d/checktime

正在更改 '/etc/cron.d/checktime' 的安全上下文

[root@chenshiren ~]# ll -Z /etc/cron.d/checktime

-rw-r--r--. 1 root root system_u:object_r:shadow_t:s0 26 3月 24 22:19 /etc/cron.d/checktime

上面的練習(xí)【都沒有正確的解答】,因?yàn)檎_的SELinux類型應(yīng)該是要以 /etc/cron.d/ 下面的文件為標(biāo)準(zhǔn)來處理才對(duì)。那么能不能讓SELinux自己解決默認(rèn)目錄下的SELinux類型?使用restorecon

restorecon讓文件恢復(fù)正確的SELinux類型

restorecon [-Rv] 文件目錄

選項(xiàng):

-R:連同子目錄一起修改

-v:將過程顯示到屏幕

# 示例1 將/etc/cron.d/下面的文件通通恢復(fù)成默認(rèn)的SELinux類型

[root@chenshiren ~]# restorecon -Rv /etc/cron.d/

Relabeled /etc/cron.d/checktime from system_u:object_r:shadow_t:s0 to system_u:object_r:system_cron_spool_t:s0

# 上面這兩行其實(shí)是同一行,標(biāo)識(shí)將checktime由shadow_t改成system_cron_spool_t

# 重新啟動(dòng)crond看看有沒有正確啟動(dòng)checktime

[root@localhost ~]# systemctl restart crond

[root@localhost ~]# tail /var/log/cron

.....

....

Mar 25 01:08:15 chenshiren crond[3635]: (CRON) INFO (running with inotify support)

Mar 25 01:08:15 chenshiren crond[3635]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

semanage默認(rèn)目錄的安全上下文查詢與修改

你可能會(huì)覺得奇怪,為什么restorecon可以【恢復(fù)】原本的SELinux類型呢?那肯定是有個(gè)地方在記錄每個(gè)文件/目錄的SELinux默認(rèn)類型,那么如何查詢SELinux類型以及如何【增加/修改/刪除】默認(rèn)的SELinux類型呢?使用semanage即可

Linux默認(rèn)沒有安裝semanage這個(gè)命令需要手動(dòng)安裝一下

[root@localhost ~]# yum -y install policycoreutils-python semanage

semanage {login|user|port|interfase|fcontext|translation} -l

semanage fcontext -{a|d|m} [-frst] file_spec

選項(xiàng):

fcontext:主要用在安全上下文方面的用途,-l為查詢的意思

-a:增加的意思,你可以增加一些目錄的默認(rèn)安全上下文類型設(shè)置。

-m:修改

-d:刪除

# 示例1 查詢一下/etc/ /etc/cron.d默認(rèn)的SELinux類型是什么

[root@chenshiren ~]# semanage fcontext -l |grep -E '^/etc|^/etc/cron'

......

......

/etc all files system_u:object_r:etc_t:s0

/etc/cron\.d(/.*)? all files system_u:object_r:system_cron_spool_t:s0

.....

...

看到上面輸出的最后一行,那也是我們?yōu)槭裁粗苯邮褂胿im去/etc/cron.d 下面建立新文件,默認(rèn)的SELinux類型就是正確的。同時(shí),我們也會(huì)知道使用restorecon恢復(fù)正確的SELinux類型時(shí),系統(tǒng)會(huì)去判斷默認(rèn)的類型為依據(jù)。

如果我們要建立一個(gè)/srv/mycron目錄,這個(gè)目錄默認(rèn)也需要變成 system_cron_spool_t時(shí),應(yīng)該如何處理?

1. 先建立/srv/mycron 同時(shí)在內(nèi)部放入配置文件,同時(shí)查看SELinux類型

[root@chenshiren ~]# mkdir /srv/mycron

[root@chenshiren ~]# cp -rf /etc/cron.d/checktime /srv/mycron/

[root@chenshiren ~]# ll -dZ /srv/mycron/ /srv/mycron/checktime

drwxr-xr-x. 2 root root unconfined_u:object_r:var_t:s0 23 3月 25 01:16 /srv/mycron/

-rw-r--r--. 1 root root unconfined_u:object_r:var_t:s0 26 3月 25 01:16 /srv/mycron/checktime

2. 查看一下上層/srv 的SELinux類型

[root@localhost ~]# semanage fcontext -l | grep '^/srv'

/srv/.* all files system_u:object_r:var_t:s0

......

..

怪不得mycron會(huì)是var_t

3. 將mycron默認(rèn)值改為system_cron_spool_t

[root@chenshiren ~]# semanage fcontext -a -t system_cron_spool_t "/srv/mycron(/.*)?"

[root@chenshiren ~]# restorecon -Rv /srv/mycron/

Relabeled /srv/mycron from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:system_cron_spool_t:s0

Relabeled /srv/mycron/checktime from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:system_cron_spool_t:s0

[root@chenshiren ~]# ll -dZ /srv/mycron/ /srv/mycron/*

drwxr-xr-x. 2 root root unconfined_u:object_r:system_cron_spool_t:s0 23 3月 25 01:16 /srv/mycron/

-rw-r--r--. 1 root root unconfined_u:object_r:system_cron_spool_t:s0 26 3月 25 01:16 /srv/mycron/checktime

# 有了默認(rèn)值到,未來就不會(huì)不小心被亂改了

柚子快報(bào)激活碼778899分享:運(yùn)維 SELinux詳解

http://yzkb.51969.com/

推薦閱讀

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19544813.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄