Context值和bool開關的應用

  1. Context值和bool開關的相關內容

Context值分爲2種

系統默認的context值

服務的context值

Context值的作用

主要是防止有未知文件進入目錄文件之中(如將病毒拷貝到目錄文件下)

Bool開關的作用

Bool主要是爭對在selinux處於enforcing(強制狀態)時,擁有訪問端口的口令也是無法登陸的情況時起作用的。

然後就是context值和bool開關的相關命令

Chcon t 更改

Restorecon v 恢復

Getroubleshoot a 查看所有的bool開關

首先用命令 ll Z 查看文件的context值,發現文件的context值都是user_home_t

接下來就以文件install.log爲例,將文件install.log複製到/tmp下,再次看看context值,發現context值變爲了tmp_t了

由上面兩個現象可以知道,context值是繼承上級目錄文件的context值的

接下來就開始演示context值的作用了

首先就以ftp共享文件來測試,安裝ftp服務後,就可以在/var下面自動生成ftp/pub這兩節目錄,然後就可以在目錄pub下創建共享文件了,這裏創建了一個文件test和複製了一個文件install.log,發現文件test的context值爲public_content_t,而文件instal.log的context值也變爲了public_content_t

接下來通過遠程用戶以ftp服務登錄到主機上,查看pub下的文件,可以查看這兩個共享文件

然後修改文件install.log的context值爲tmp_t

然後再次遠程登錄到主機,查看pub下的文件,發現看不到文件instll.log了,到這就隱隱的明白了什麼,那就是是否繼承了上一級目錄context值的原因

於是爲了驗證自己隱約的想法,就來查看pub的context值吧,結果發現確實如推測的那樣,pub的context值也是public_content_t,由此可知,剛纔將文件install.log的context值認爲的改變爲tmp_t後,就無法讀取了,這個文件確實還是存在的,只不過pub已經不會識別了,因爲它的context已經被改變了。

爲了更加確定推測,將文件install.log的context值恢復,再看看

更改後,再次查看,發現文件install.log又出現了,那麼現在可以完全的明白了context值的作用了,可以對context值作用進行一個小結了

由於目錄pub的context值爲public_content_t,所以在pub下的文件的context值也應該爲public_content_t,如果人爲的將context值改變了,那麼pub就不會認這個在它目錄下的文件了,即使沒有被刪,我們也不會看到了

然後在http下再測試一下,安裝了http服務後就可以在/var下面生成兩節目錄www/html了,然後在目錄html下創建文件名爲index.html文件,在這個文件裏寫的內容,我們就可以通過瀏覽器來看到了,這個是對http網頁文件的解釋,這裏還是回到context值吧,我們來看看文件index.html的context值,發現context值是httpd_sys_cotent_t,

然後用瀏覽器查看一下,就可以看到內容了

接下來就更改一下文件index.html的context值吧,將其更改爲tmp_t

發現在瀏覽器裏已經看不到網頁文件的內容了,原因應該是剛纔的那個文件沒有被讀取到,被目錄html忽略了,所以在瀏覽器中自然看不到了

然後將文件index.html的context值恢復爲httpd_sys_content_t

那麼就可以在瀏覽器中看到hello了

接下來我們將ftp安裝後所產生的兩節目錄ftp/pub刪掉,

然後就創建文件ftp/pub這兩節目錄,並創建共享目錄

創建test共享文件

然後遠程登錄,發現登錄上了,可是卻看不到共享文件test了

這時候我想到的是context值,於是,查看一下test的context值,發現變爲了var_t,看來是繼承了/var目錄的context值,可是/var是系統默認的context值,與ftp服務的context值是不同的,所以新建的文件僅僅是名字一樣罷了,可是卻不具備服務的context值,那麼就沒有意義,因此是沒有用的

這時候可以用命令restorecon Rv ftp 將context值恢復

恢復context值後就可以看到共享文件了

下面就是文件繼承上一級的事例

實驗到這裏就得說明一下了

Context值分爲兩種

  1. 系統默認的context值
  2. 服務的context值

也就是說,除了由於服務的原因,比如/var下面,由於安裝了ftp服務後,會在/var下面創建ftp這個目錄文件,可是查看context值卻發現並沒有繼承/var的context值,卻可以在/var下面看到,這個現象可不是爲了推翻context值的作用,而是爲了說明繼承分爲兩種,一種是以系統默認的context值爲基,在此下面創建的目錄或文件就繼承了其context值,而有一種情況是不受其約束的,那就是安裝服務的時侯所自動產生的目錄或文件,它們擁有着屬於自己的context值,可以當作例外來看,那麼一切就可以解釋的通了。

其實想要context值恢復還有一個方法(須安裝圖形化界面)

首先需要安裝一個軟件包,policycoreutils-gui,然後就敲命令system-config-selinux,

就進入瞭如下的圖形化界面,將下次啓動時重新標記勾上,然後重啓系統,那麼再開啓系統時,所以被更改的context值就會被重新標記,即context都會恢復爲原始值

下面顯示的是啓動系統後重打標記的過程,*代表的就是在重打標記

做到這,我們是否會想到既然一個勾就將更改的context值改了,那麼是否可以讓context永久是更改後的值呢,即使重打標記也不變,

其實是有的,可以用命令semanage fconftext a t httpd_sys_content_t 'pub(/.*)就可以了

接下來就開始第二個實驗了

做bool開關

首先講講bool開關的作用,bool開關的作用就是在selinux變爲enforcing狀態時,將bool開啓後就可以繼續訪問,在這就先簡單的解釋一下selinux的三種狀態吧

首先disabled態,也就是禁用了selinux的功能

然後就是permissive狀態,主要用於判斷系統是服務本身的問題還是selinux問題,舉個例子吧,當遠程訪問用戶時,如果在知道了遠程主機的賬戶的賬號和密碼時,驗證成功後就可以訪問了。

最後就是enforcing狀態了,表示的是強制的意思,依舊接着上面的例子,也就是說即使知道了對方賬戶的賬號和密碼,驗證成功也不能訪問,即強制的不允許其登錄,這個安全性更高。

那麼這麼一來就有一個問題了,沒錯當將selinux設置爲enforing狀態後安全性確實更高了,可是如果不能訪問的話,這種安全就沒有意義了,那麼有什麼方法可以讓其處於enforcing狀態依舊可以訪問呢?

這時就需要bool開關了

接下來就開始演示bool開關的作用了

在這兒,首先需要安裝setroubleshoot這個安裝包,當然selinux也應該設置爲enforcing狀態,爲了使這兩個更改生效,就需要重啓系統了,重啓系統後,就可以查看了,如下兩個圖,發現selinux確實已經處於enforcing狀態了,而在系統工具裏看到了selinux故障排除工具,就說明setroubleshoot安裝成功了

然後就可以開始更改bool值了

首先我們遠程登錄主機的普通賬戶發現登上了,卻無法查看用戶文件,報了登錄失敗的錯誤,這其實是selinux的enforcing起了作用

然後就查看bool開關的信息,這裏可以進行指定搜索,我們訪問的是ftp上用戶的home下的文件,那麼就可以進行如下搜尋,發現其off了,也就是bool處於關閉狀態

那麼就需要將其開啓,於是就可以敲如下命令,這裏的1表示的就是開啓,而0代表的就是關閉了

然後再次訪問,就可以看到賬戶的home下的文件了

至此,關於context值和bool開關的實驗就結束了!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章