Linux桌面需要強制訪問控制,RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 進行強制訪問控制...

38746fbe8a1a04ebdaa6fe32d4ee383b.png

RHCSA 認證:SELinux 精要和控制文件系統的訪問

盡管作為第一級別的權限和訪問控制機制是必要的,但它們同樣有一些局限,而這些局限則可以由安全增強 Linux(Security Enhanced Linux,簡稱為 SELinux)來處理。

這些局限的一種情形是:某個用戶可能通過一個泛泛的 chmod 命令將文件或目錄暴露出現了安全違例,從而引起訪問權限的意外傳播。結果,由該用戶開啟的任意進程可以對屬于該用戶的文件進行任意的操作,最終一個惡意的或有其它缺陷的軟件可能會取得整個系統的 root 級別的訪問權限。

考慮到這些局限性,美國國家安全局(NSA) 率先設計出了 SELinux,一種強制的訪問控制方法,它根據最小權限模型去限制進程在系統對象(如文件,目錄,網絡接口等)上的訪問或執行其他的操作的能力,而這些限制可以在之后根據需要進行修改。簡單來說,系統的每一個元素只給某個功能所需要的那些權限。

在 RHEL 7 中,SELinux 被并入了內核中,且默認情況下以強制模式(Enforcing)開啟。在這篇文章中,我們將簡要地介紹有關 SELinux 及其相關操作的基本概念。

SELinux 的模式

SELinux 可以以三種不同的模式運行:

強制模式(Enforcing):SELinux 基于其策略規則來拒絕訪問,這些規則是用以控制安全引擎的一系列準則;

寬容模式(Permissive):SELinux 不會拒絕訪問,但對于那些如果運行在強制模式下會被拒絕訪問的行為進行記錄;

關閉(Disabled)?(不言自明,即 SELinux 沒有實際運行).

使用 getenforce 命令可以展示 SELinux 當前所處的模式,而 setenforce 命令(后面跟上一個 1 或 0) 則被用來將當前模式切換到強制模式(Enforcing)或寬容模式(Permissive),但只對當前的會話有效。

為了使得在登出和重啟后上面的設置還能保持作用,你需要編輯 /etc/selinux/config 文件并將 SELINUX 變量的值設為 enforcing,permissive,disabled 中之一:

#getenforce

#setenforce0

#getenforce

#setenforce1

#getenforce

#cat/etc/selinux/config

c008e3269b567ab6e89d8c762d6d8d3e.png

設置 SELinux 模式

通常情況下,你應該使用 setenforce 來在 SELinux 模式間進行切換(從強制模式到寬容模式,或反之),以此來作為你排錯的第一步。假如 SELinux 當前被設置為強制模式,而你遇到了某些問題,但當你把 SELinux 切換為寬容模式后問題不再出現了,則你可以確信你遇到了一個 SELinux 權限方面的問題。

SELinux 上下文

一個 SELinux 上下文(Context)由一個訪問控制環境所組成,在這個環境中,決定的做出將基于 SELinux 的用戶,角色和類型(和可選的級別):

一個 SELinux 用戶是通過將一個常規的 Linux 用戶賬戶映射到一個 SELinux 用戶賬戶來實現的,反過來,在一個會話中,這個 SELinux 用戶賬戶在 SELinux 上下文中被進程所使用,以便能夠明確定義它們所允許的角色和級別。

角色的概念是作為域和處于該域中的 SELinux 用戶之間的媒介,它定義了 SELinux 可以訪問到哪個進程域和哪些文件類型。這將保護您的系統免受提權漏洞的攻擊。

類型則定義了一個 SELinux 文件類型或一個 SELinux 進程域。在正常情況下,進程將會被禁止訪問其他進程正使用的文件,并禁止對其他進程進行訪問。這樣只有當一個特定的 SELinux 策略規則允許它訪問時,才能夠進行訪問。

下面就讓我們看看這些概念是如何在下面的例子中起作用的。

例 1:改變 sshd 守護進程的默認端口

在 RHCSA 系列(八): 加固 SSH,設定主機名及啟用網絡服務 中,我們解釋了更改 sshd 所監聽的默認端口是加固你的服務器免受外部攻擊的首要安全措施。下面,就讓我們編輯 /etc/ssh/sshd_config 文件并將端口設置為 9999:

Port9999

保存更改并重啟 sshd:

#systemctlrestartsshd

#systemctlstatussshd

0fca5c9588eded294a1e5002b16c007a.png

重啟 SSH 服務

正如你看到的那樣, sshd 啟動失敗,但為什么會這樣呢?

快速檢查 /var/log/audit/audit.log 文件會發現 sshd 已經被拒絕在端口 9999 上開啟(SELinux 的日志信息包含單詞 "AVC",所以這類信息可以被輕易地與其他信息相區分),因為這個端口是 JBoss 管理服務的保留端口:

#cat/var/log/audit/audit.log|grepAVC|tail-1

725a83d9eb5936c4f3077b02ce8dbe5a.png

查看 SSH 日志

在這種情況下,你可以像先前解釋的那樣禁用 SELinux(但請不要這樣做!),并嘗試重啟 sshd,且這種方法能夠起效。但是, semanage 應用可以告訴我們在哪些端口上可以開啟 sshd 而不會出現任何問題。

運行:

#semanage port-l|grepssh

便可以得到一個 SELinux 允許 sshd 在哪些端口上監聽的列表:

74aca588a7a23ee06a2c966d50466bc9.png

Semanage 工具

所以讓我們在 /etc/ssh/sshd_config 中將端口更改為 9998 端口,增加這個端口到 sshportt 的上下文,然后重啟 sshd 服務:

#semanage port-a-tssh_port_t-p tcp9998

#systemctlrestartsshd

#systemctlis-activesshd

5a8760470f673edf0effcbd15cf5e702.png

semanage 添加端口

如你所見,這次 sshd 服務被成功地開啟了。這個例子告訴我們一個事實:SELinux 用它自己的端口類型的內部定義來控制 TCP 端口號。

例 2:允許 httpd 訪問 sendmail

這是一個 SELinux 管理一個進程來訪問另一個進程的例子。假如在你的 RHEL 7 服務器上,你要為 Apache 配置 mod_security 和 mod_evasive,你需要允許 httpd 訪問 sendmail,以便在遭受到 (D)DoS 攻擊時能夠用郵件來提醒你。在下面的命令中,如果你不想使得更改在重啟后仍然生效,請去掉 -P 選項。

#semanage boolean-1|grephttpd_can_sendmail

#setsebool-P httpd_can_sendmail1

#semanage boolean-1|grephttpd_can_sendmail

24e65aeff29a86ca0df6571d59b950be.png

允許 Apache 發送郵件

從上面的例子中,你可以知道 SELinux 布爾設定(或者只是布爾值)分別對應于 true 或 false,被嵌入到了 SELinux 策略中。你可以使用 semanage boolean -l 來列出所有的布爾值,也可以管道至 grep 命令以便篩選輸出的結果。

例 3:在一個特定目錄而非默認目錄下提供一個靜態站點服務

假設你正使用一個不同于默認目錄(/var/www/html)的目錄來提供一個靜態站點服務,例如 /websites 目錄(這種情形會出現在當你把你的網絡文件存儲在一個共享網絡設備上,并需要將它掛載在 /websites 目錄時)。

a). 在 /websites 下創建一個 index.html 文件并包含如下的內容:

SELinux test

假如你執行

#ls-lZ/websites/index.html

你將會看到這個 index.html 已經被標記上了 default_t SELinux 類型,而 Apache 不能訪問這類文件:

5af9f4833b4a8bb29304ab1c612d9552.png

檢查 SELinux 文件的權限

b). 將 /etc/httpd/conf/httpd.conf 中的 DocumentRoot 改為 /websites,并不要忘了 更新相應的 Directory 塊。然后重啟 Apache。

c). 瀏覽 http://,則你應該會得到一個 503 Forbidden 的 HTTP 響應。

d). 接下來,遞歸地改變 /websites 的標志,將它的標志變為 httpd_sys_content_t 類型,以便賦予 Apache 對這些目錄和其內容的只讀訪問權限:

#semanage fcontext-a-thttpd_sys_content_t"/websites(/.*)?"

e). 最后,應用在 d) 中創建的 SELinux 策略:

#restorecon-R-v/websites

現在重啟 Apache 并再次瀏覽到 http://,則你可以看到被正確展現出來的 html 文件:

b17262b41a4cd3c89f1f1ea0ebadba5f.png

確認 Apache 頁面

總結

在本文中,我們詳細地介紹了 SELinux 的基礎知識。請注意,由于這個主題的廣泛性,在單篇文章中做出一個完全詳盡的解釋是不可能的,但我們相信,在這個指南中列出的基本原則將會對你進一步了解更高級的話題有所幫助,假如你想了解的話。

假如你有任何的問題或評論,請不要猶豫,讓我們知曉吧。

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

0b1331709591d260c1c78e86d0c51c18.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458936.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用canvas實現擦玻璃效果

體驗效果:http://hovertree.com/texiao/html5/25/效果圖&#xff1a;代碼如下&#xff1a; <!DOCTYPE html> <html> <head lang"zh"> <meta name"viewport" content"initial-scale1.0, maximum-scale1.0, user-scalableno, widt…

如何計算時間復雜度

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 求解算法的時間復雜度的具體步驟是&#xff1a; ⑴ 找出算法中的基本語句&#xff1b;…

linux顯示系統信息軟件下載,linux查看系統信息軟件安裝信息命令學習筆記

查看LINUX安裝版本[rootlocalhost etc]# unameLinux[rootlocalhost etc]# uname -aLinux localhost.localdomain 2.6.32-279.11.1.el6.i686 #1 SMP Tue Oct 16 14:40:53 UTC 2012 i686 i686 i386 GNU/Linux[rootlocalhost etc]# cat /proc/versionLinux version 2.6.32-279.11.…

Bzoj 2662: [BeiJing wc2012]凍結 dijkstra,堆,分層圖,最短路

2662: [BeiJing wc2012]凍結 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Status][Discuss]Description “我要成為魔法少女&#xff01;” “那么&#xff0c;以靈魂為代價&#xff0c;你希望得到什么&#xff1f;” “我要將有關魔法和奇…

[轉]opencv學習資料

轉自&#xff1a;http://blog.csdn.net/poem_qianmo/article/details/20537737 1&#xff1a;Mat imread(const string& filename, intflags1 ); eg: Mat image0imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//載入最真實的圖像 ge1i…

linux servlet 亂碼問題,Servlet一次亂碼排查后的總結

由來在寫一個小小的表單提交功能的時候&#xff0c;出現了亂碼&#xff0c;很奇怪request上來的參數全部是亂碼&#xff0c;而從數據庫查詢出來的中文顯示到頁面正常&#xff0c;鎖定肯定是request對象那里出了問題。后來經過排查&#xff0c;發現是我封裝的框架中出了問題&…

C/C++回調函數

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 對于很多初學者來說&#xff0c;往往覺得回調函數很神秘&#xff0c;很想知道回調函數…

Linux 命令[2]:mkdir

make directories mkdir -p [目錄名] -p 遞歸創建 [rootlocalhost ~]# mkdir -p test [rootlocalhost ~]# ls anaconda-ks.cfg install.log install.log.syslog test 當然只創建一個目錄 -p 是可以省略的 注&#xff1a;如果創建多級目錄沒有 -p 會報錯 如&#xff1a; [roo…

jQuery動態設置樣式List item

前段時間&#xff0c;Insus.NET有修改一個功能《激活當前視圖菜單高亮呈現》http://www.cnblogs.com/insus/p/5287093.html 今天Insus.NET想改用另外一個方法來實現&#xff0c;使用jQuery。在ASP.NET MVC 環境實現&#xff1a; 代碼&#xff1a; <ul><li><a hr…

linux telnet 權限,允許telnet 通過root用戶進行訪問

允許telnet 通過root用戶進行訪問RHEL6:[rootclovem ~]# yum install telnet-server -y //安裝telnet服務端[rootclovem ~]# cat /etc/xinetd.d/telnet //開啟telnet的托管服務# default: on# description: The telnet server serves telnet sessions; it uses \#unencrypt…

TOUGHRADIUS 項目介紹

2019獨角獸企業重金招聘Python工程師標準>>> TOUGHRADIUS 項目介紹 ToughRADIUS是一個開源的Radius服務軟件&#xff0c;采用于 Apache License 2.0 許可協議發布&#xff0c;從創立之日起&#xff0c;他的宗旨就是服務于中小微ISP&#xff0c;讓運營變得更簡單。 T…

轉:Jmeter 用戶思考時間(User think time),定時器,和代理服務器(proxy server)...

在負載測試中需要考慮的的一個重要要素是思考時間&#xff08;think time&#xff09;&#xff0c; 也就是在兩次成功的訪問請求之間的暫停時間。 有多種情形揮發導致延遲的發生&#xff1a; 用戶需要時間閱讀文字內容&#xff0c;或者填表&#xff0c;或者查找正確的鏈接等。未…

linux sql語句傳參數,Linux/Unixshell參數傳遞到SQL腳本

在數據庫運維的過程中&#xff0c;Shell 腳本在很大程度上為運維提供了極大的便利性。而shell 腳本參數作為變量傳遞給SQL以及SQL腳本也是DB在數據庫運維的過程中&#xff0c;Shell 腳本在很大程度上為運維提供了極大的便利性。而shell 腳本參數作為變量傳遞給SQL以及SQL腳本也…

Myeclipse5.5獲取注冊碼

2019獨角獸企業重金招聘Python工程師標準>>> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MyEclipseGen {private static final String LL "Decompiling this copyrighted software is a vi…

虛函數和純虛函數的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 首先&#xff1a;強調一個概念 定義一個函數為虛函數&#xff0c;不代表函數為不被實…

工作日志WebRoot--編輯頁關于處理兩個關聯的選擇框

案例&#xff1a;點擊編輯&#xff0c;彈出界面后每個欄目都有一個默認的數值&#xff0c;但若其中一個選擇框發生更改&#xff0c;則觸發另一選擇框內的數據發生變動&#xff08;例如組織機構選擇發生變動&#xff0c;則相對應的組織機構的下屬機構也發生變動&#xff09;。 解…

linux下r語言畫圖,linux命令行下使用R語言繪圖實例講解

使用系統&#xff1a;centos 6.4 64bit在R語言中可以使用png()等函數生成圖片&#xff0c;例如&#xff1a; png("aa.png")可以生成圖片。但是如果你是通過shell遠程連接到系統上&#xff0c;可能會碰到如下錯誤&#xff1a;> png("aa.png")錯誤于.Exte…

Windows Mobile Gprs連接與數據傳輸

此模塊分兩部分完成&#xff0c;傳輸數據用socket &#xff0c;要使用socket在ppc上進行數據傳輸&#xff0c;就要誰讓ppc自動連接gprs 。其中套接字和gprs鏈接分別進行說明。 一 &#xff0c;應用程序在進行其它所需的Windows Sockets API調用需要進行一次成功的WSAStartup()調…

C語言變量的類型和存儲位置

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 1. C語言變量主要分為全局變量、靜態全局變量、局部變量、靜態局部變量和寄存器變量。…

nginx+tomcat負載均衡

最近練習nginxtomcat負載均衡。根據一些資料整理了大體思路&#xff0c;最終實現了1個nginx2個tomcat負載均衡。 安裝JDK 1》進入安裝目錄&#xff0c;給所有用戶添加可執行的權限 #chmod x jdk-7u67-linux-i586.rpm //不知這步有沒有必要 2》安裝JDK 輸入命令#rpm –ivh jdk-7…