基本 SELINUX 安全性概念
SELINUX ( 安全增強型 Linux ) 是可保護你係統安全性的額外機制
在某種程度上 , 它可以被看作是與標準權限系統並行的權限系統。在常規模式中 , 以用戶身份運行進程 , 並且系統上的文件和其他資源都設置了權限 ( 控制哪些用戶對哪些文件具有哪些訪問權 SELINUX 的另一個不同之處在於 , 若要訪問文件 ,你必須具有普通訪問權限和 SELINUX 訪問權限。因此 , 即使以超級用戶身份root 運行進程 , 根據進程以及文件或資源的 SELinux 安全性上下文可能拒絕訪問文件或資源限 ) 標籤
- 在無 selinux 保護時 , 惡意人員可以嘗試利用 web 服務器中的安全漏 洞強行進入系統。如果成功 , 將會控制以用戶 apache 身份運行的進程 , 這時再由一個本地安全漏洞就可能使攻擊者獲得超級用戶的訪問權限
selinux 安全上下文訪問規則
WEB 服務器的 HTTPD 進程設置了 SELINUX 上下文system_u:system_r:httpd_t 標籤。該上下文的重要部分是第三個用冒號分隔的字段 SELINUX 類型 : httpd_t系統上的文件和資源也設置了 SELINUX 上下文標籤 , 並且重要的部分是 SELINUX 類型。例如 , /var/www/html 中的文件具有類型 httpd_sys_content_t 。
/tmp 和 /var/tmp 中的文件通常具有類型 tmp_t Seliux 策略具有允許以 httpd_t 身份運行的進程訪問標記爲httpd_sys_content_t 的文件的規則。沒有規則允許這些進程訪問標記有 tmp_t 的文件 , 因此將拒絕這些訪問 , 即使常規文件權限指出應該允許這些訪問selinux是內核的進程,所以改變需要重啓,內核初始化,第一次慢。
- 文件: selinux能配對的才能訪問 特定程序只能訪問特定程序的標籤 不同目錄標籤不同 還會影響功能
- 功能: 不安全的程序會禁止掉 管理員自己需要打開
更改 selinux 的開機狀態
selinux開機狀態的控制文件 : /etc/sysconfig/selinux
vim /etc/sysconfig/selinux
SELINUX=enforcing | permissive | disabled
enfirocing 強制模式:
SELINUX 主動拒絕訪問嘗試讀取類型上下文爲 tmp_t的 web
服務器。在強制模式中,SELINXU 既記錄衝突,也強制執行規則permissive 警告模式(許可模式):
通常用於對問題進行故障排除。在許可模式下,即使沒有明確規則, SELINUX
也允許所有交互,並且記錄所有被拒絕的交互。此模式可以用於確定你是否有
SELINUX問題。無需重新引導即可從強制模式轉爲許可模式,或再從許可模式轉回強制模式- disabled 關閉
將文件中的SELINUX中的值修改之後,需要重啓電腦生效
顯示及更改 SELINUX 模式
getenforce ##顯示SELinux模式
setenforce 0|1 ##更改SELinux模式
0 表示 permissive # 警告模式
1 表示 enforcing # 強制模式
顯示SELinux文件安全上下文
什麼確定文件的初始SELinux上下文?
通常是父目錄。將父目錄的上下文指定給所新創建的文件。這對vimcp和touch等命令起作用,但是,如果文件是時在其他位置創建愛你的並且保留了權限(與mv或cp -a 一樣)則還將保留SELinux上下文許多處理文件的命令具有一個用於顯示或設置SELinux上下文的選項(通常是-Z)。如,ps,ls,cp,mkdir都很斯用 - Z 選項顯示或設置SELinux上下文。
查看安全上下文
ls -Z
修改 selinux 安全上下文
chcon 命令
一次性定製安全上下文 , 執行 restorecon 刷新後還原
chcon 只是更改,沒有記錄,開機就沒了 (change file SELinux security context)
參數 -t : –type=TYPE : set type TYPE in the target security context
context:標籤
//別的地方建立的文件移到這裏,因爲上下文不配對,所以文件看不到,用chcon修改安全上下文使之相同,就能看到了這個文件
改變之後如果重啓selinux,即(改成disabled又改成enforcing,開機就發現沒有了) 所以要用semanage永久修改
semanage命令
restorecon 是 policycoreutil軟件包的一部分
semanage是 policycoreutil-python 軟件包的一部分
semanage fcontext 可用於顯示或修改restorrecon用來設置默認文件上下文的規則
semanage fcontext 使用擴展正則表達式來指定路徑和文件名。 fcontext 規則中最常用的擴展正則表達式是 (/.*)? ,表示隨意地匹配 / 後跟任何數量的字符
semanage fcontext 將遞歸地與在表達式面前列出的目錄以及該目錄中的所有內容相匹配
標籤是直接寫在內核的
semanage fcontext 參數:
semanage : - SELinux Policy Management tool
-l //查看安全上下文
-a //在內核添加
-t //指定安全上下文
man semanage
--list List records of the specified object type
--add Add a record of the specified object type
--type TYPE SElinux Type for the object
"改的是目錄及目錄內部的文件"
示例,ftp根目錄是/westos :
第一次直接訪問 :
查看安全上下文並修改成爲可以被ftp服務訪問的安全上下文 :
//注意書寫格式規範
##改變之後需要重啓主機,如果想立即看到效果,不重啓:
restorecon -RvvF #(vv是因爲不止一個文件) ##立即讀取
man restorecon:
restore file(s) default SELinux security contexts
-R, -r change files and directories file labels recursively (descend directories). ##遞歸處理目錄。
Note: restorecon reports warnings on paths without default labels only if called non-recursively or in verbose mode.
-v show changes in file labels, if type or role are going to be changed
##將過程顯示到屏幕上。
-F Force reset of context to match file_context for customizable files, and the default file context,changing the user, role, range portion as well as the type. ##強制恢復文件安全語境。
命令刷新後再次lftp,就可以看到了
管理SELinux布爾值
SELinux布爾值是更改 SELinux策略行爲的開關。SELinux布爾值是可以啓用或禁用的規則。安全管理員可以使用SELinux布爾值來調整策略,以有選擇地進行調整許多軟件包都具有 man page *_selinx(8),其中詳細說明了所使用的一些布爾值;
man -k '_selinux'
可以輕鬆地找到這些手冊
getsebool 用於顯示布爾值 , setsebool 用於修改布爾值
setsebool -p 修改SELinux策略,以永久保留修改 重啓開啓生效,on | off :開啓 | 關閉
semanage boolean -l 將顯示布爾值是否永久
查看selinux屏蔽的功能: getsebool -a | grep ftp
開啓上傳權限
- 先去確定selinux是強制模式 , 單獨setsebool 開啓寫權限發現是不能生效的
- 將pub下文件安全上下文改變: semanage fcontext -a -t public_content_rw_t ‘/var/ftp/pub(/.*)?’
restorecon 重讀 -RvvF 注意r與f一定是大寫
//刷新成功是有提示的setsebool -P frpd_anon_write on 開啓寫 off 關閉寫
vim /etc/vsftpd/vsftpd.conf 開啓上傳權限
重啓服務生效
這裏,注意,保證 pub目錄權限是777 ,不然有很多權限上的問題!
//lftp進入後,就可以上傳了
監控SELinux衝突
- pub下放一個標籤不同的文件,lftp進去後發現看不見
這時,需要查看日誌,分析解決方案 ,setroubleshoot-server提供解決方案的軟件,沒有這個軟件就沒有分析解決問題的功能
必須安裝setroubleshoot-server 軟件包,才能將SELinux消息發送至 /var/log/messages
setroubleshoot-server 偵聽 /var/log/audit/audit.log 中的審覈信息並將簡短摘要發送至 /var/log/messages
摘要包括SELinux衝突的唯一標示符(UUIDs),可用於收集更多信息,Sealert -l UUID 用於生成特定事件的報告。 Sealert -a /var/log/audit/audit.log 用於在該文件中生成所有事件的報告/var/log/audit/audit.log 專門存放selinux中的問題,但是不全
在message中有全面的信息,
其中:
run : sealert -l 159f537a-5ce3-4ea4-8a3c-f3e08aea9360
//讓你運行這一段代碼,分析這個問題的詳細解答:
//顯示了安全上下文,軟件版本,位置等詳細信息semanage fcontext -a -t FILE_TYPE ‘$FIX_TARGET_PATH’
//下面的是安全上下文所有的格式,不用去看
Then execute:
restorecon -v ‘$FIX_TARGET_PATH’
//告訴你的是解決方案,後面的變量指的是文件的目標
//運行之後,問題解除,可以顯示出來了