Seliux简介
一.SELinux簡介
?? ?secure enhanced linux
?? ?SELinux:工作于Linux內核中
?? ?DAC:自主訪問控制 //linux自帶的,own,group,other //只有用戶 Discretionary Access Control——DAC
?? ??? ?//問題:普通用戶之間共享文件,要開放文件的其他人的權限,這樣是不安全的
?? ??? ?//假如tmp中放了重要數據,DAC是無法保證安全的。
?? ?MAC:強制訪問控制?? ?Mandatory? //強制對資源限制的訪問
?? ?
?? ?[進程]安全上下文:
?? ??? ?進程的屬主和屬組,進程所能夠訪問的文件的最終權限,取決于:
?? ??? ??? ?file:屬主--->屬組-->other //逐個匹配
?? ?MAC:每一個進程,假如需要訪問10個資源,那他也只能訪問者10個資源,及時他對其他資源也有相應的權限
?? ??? ?DAC是自助訪問功能,是沒有的
?? ??? ?MAC:任何一個進程啟動后,類似于放在一個sandbox內{事先準備的最小資源集},而不能以運行者的身份,到處訪問其他資源
?? ??? ??? ?這樣進程所能夠獲取的資源,也僅僅是沙箱內部的資源
?? ??? ?但是如何建立沙箱,以及沙箱切換//selinux就是類似于為每一個進程提供了一個沙箱?? ?
?? ?安全沙箱:sandbox
?? ??? ?放到一個隔離訪問空間中,類似于MAC
基本概念:
?? ?主體:訪問操作的主動發起者,它是系統中信息流的啟動者,可以使信息流在實體之間流動。
?? ?客體:信息的載體或從其他主體或客體接收信息的實體。
?? ??? ?主體有時也會成為訪問或受控的對象,如一個主體可以向另一個主體授權,
?? ??? ?一個進程可能控制幾個子進程等情況,這時受控的主體或子進程也是一種客體。
?? ?訪問控制分類:
?? ??? ?客體不受它們所依存的系統的限制,可以包括記錄、數據塊、存儲頁、存儲段、文件、目錄、
?? ??? ?目錄樹、庫表、郵箱、消息、程序等,還可以包括比特位、字節、字、字段、變量、處理器、
?? ??? ?通信信道、時鐘、網絡結點等。
?? ??? ?
二.Selinux有兩種工作級別
?? ?strict:每個進程都收到selinux的控制 //NAS開發,設定較為復雜
?? ?targetted:僅有限個進程受到selinux控制 //它是redhat開發的targeted,它只是對于主要的網絡服務進行保護
?? ??? ?比如apache, sendmail, bind, postgresql等,不屬于那些domain的就都讓他們在unconfined_t里
?? ??? ?可導入性高,可用性好但是不能對整個系統進行保護。
?? ?
?? ?SELinux的工作方式:
?? ??? ?subject operation object
?? ??? ?我 ??? ?打?? ??? ??? ?你
?? ??? ?
?? ??? ?subject:進程
?? ??? ?object:進程、文件
?? ??? ??? ?文件:open,write,close,chown,chmod
?? ??? ?
?? ??? ?subject:domain 操作者
?? ??? ?object:type 被操作對象
?? ?ls -Z? //selinux為每一個文件和進程提供的安全標簽,也為進程提供了安全標簽
?? ?ps auxZ //激 活selinux
?? ??? ?//原先是關閉的話,需要重啟系統,內核會為每一個文件打標簽
?? ?
三.安全標簽:
?? ?共5段:后兩段對于RHEL和CentOS是沒有意義的
?? ?user:role:type
?? ??? ?user:selinux的user
?? ??? ?role:角色,類似于group
?? ??? ?type:類型,作用,user所能夠訪問的對象范圍,domain
?? ?有了selinux自后,一個進程的權限,除了user-group-other之外還要受到
?? ??? ?沙箱的限制
?? ?//為文件打好標簽以后,進程的屬主即使對該文件具有寫權限,他也不一定能夠訪問,取決于沙箱的定義范圍
?? ?
?? ?1.對selinux來講,如果這個進程需要訪問某個文件,在沙箱的域外的其他沙箱內,如何突破限制訪問
?? ??? ?改變文件的類型:改為該進程所在域范圍內,
?? ?注意:任何一個進程到底能夠訪問哪些文件,并不是嚴格按照進程所在域和被訪問者自己的類型是否匹配決定的
?? ??? ??? ?而是依據selinux規則庫決定的
?? ?SELInux規則庫
?? ??? ?規則:哪種域能訪問哪種或哪些種類型文件
?? ??? ?
進程運行的過程
?? ?進程能否訪問一個文件?
?? ??? ?user->group->selinux的規則庫
?? ??? ??? ?有記錄:授權-->允許
?? ??? ??? ?有記錄:拒絕-->拒絕,并記錄日志
?? ??? ??? ?沒有記錄:拒絕
?? ??? ?規則是二進制存放的:速度比較快
?? ??? ?但是每次都要匹配selinux:因此還是比較慢的
四.配置selinux
?? ?selinux是否啟用:
?? ?給文件重新打標:
?? ?設定某些布型特性
?? ?1.SELinux狀態:enforcing|permissive|disabled
?? ??? ??? ?enforcing:強制,每個受限的進程都必然受限
?? ??? ??? ?permissive:啟用,每個受限的進程違規操作不會被禁止,但會被記錄于審計日志中
?? ??? ??? ?disabled:關閉
?? ??? ?注:當前系統為disabled,不管轉換為何種類型,都需要重啟OS才能啟用
?? ??? ?getenforce
?? ??? ?setenforce 0|1 //
?? ??? ??? ?僅僅當前有效,重啟OS無效
?? ??? ??? ?配置文件:/etc/sysconfig/selinux,/etc/selinux/config
?? ?2.給文件打標簽?? ??? ?
?? ??? ?chcon //change context ,修改標簽
??????? chcon [OPTION]... CONTEXT FILE...
??????? chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
??????? chcon [OPTION]... --reference=RFILE FILE...?? ??? ?
?? ??? ?通常只會修改type,
?? ??? ?chcon unconfined_u:object_r:user_home_t:s0 aa
?? ??? ?-R :遞歸打標
?? ??? ?注意:一般文件復制到某目錄后,標簽會隨之改變
?? ??? ?restorecon? FILE //當這個文件在策略里有定義時,可以恢復原來的文件標簽。
?? ??? ??? ?-R,-r //遞歸還原
?? ??? ?
?? ?3.標簽查看:
?? ??? ?ls -Z
?? ??? ?ls --context a.txt
?? ?4.復制和查找標簽
?? ??? ?cp -Z,--conntext=CONTEXT 在拷貝的時候指定目的文件的security context
?? ??? ?find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \: ?
?? ?5.查看se狀態
?? ??? ?sestatus -v
?? ?
五.測試selinux
?? ?1.yum install httpd//
?? ?unconfined_u:object_r:httpd_sys_content_t:s0
?? ?ps auxZ |grep httpd
?? ??? ?system_u:system_r:httpd_t:s0
?? ?//httpd_sys_content_t是httpd_t的一個子類型,因此httpd_t該進程能夠訪問index.html?? ?
?? ?3.vim /etc/httpd/conf/httpd.conf
?? ?? ls -Z
?? ??? ?unconfined_u:object_r:default_t //類型已經修改
?? ?4.再次訪問
?? ??? ?forbidden
?? ??? ?一:setenforce 0//可以再次訪問
?? ??? ?二:chcon -t httpd_sys_content_t a.html
?? ? ?
?? ?注意:/var/www/html目錄中,修改type是沒有效果的,selinux不會禁止,除非,改變原有的目錄
六.設定selinux的bool標簽
?? ?setsebool 是用來切換由布爾值控制的 SELinux 策略的,
?? ?getsebool 獲取bool值
?? ?
?? ?getsebool -a //查看所有的
?? ?getsebool ftp_home_dir
?? ?
?? ?setsebool
?? ??? ?-P //保存到策略文件中,永久有效
?? ?setsebool [ -PNV ] boolean value | bool1=val1 bool2=val2 ...
?? ?setsebool ftp_home_dir on
?? ??? ??? ??? ??? ?on/off? 1/0 :1表示開啟 //下次開機失效
?? ??? ??? ?-P:保存到策略文件,更新二進制文件
?? ?什么是SElinux布爾值呢?SEliux布爾值就相當于一個開關,精確控制SElinux對某個服務的某個選項的保護
?? ?setsebool ftp_home_dir on //開始保護,但是臨時生效
七.日志文件記錄位置
?? ?/var/log/audit/audit.log
?? ?tail audit.log
?? ?selinux的管理工具:
?? ??? ?semanage
?? ?
八.semanage的使用
?? ?相關命令:setsebool,getsebool,seinfo,sesearch
?? ?semanage {login|user|port|interface|fcontext|translation} -l
?? ?semanage fcontext -{a|d|m} [-frst] file_spec
?? ??? ?-l:查詢。
?? ??? ?fcontext:主要用在安全上下文方面。
?? ??? ?-a:增加,你可以增加一些目錄的默認安全上下文類型設置。
?? ??? ?-m:修改。
?? ??? ?-d:刪除。
?? ?這是一個功能強大的策略管理工具,有了它即使沒有策略的源代碼,也是可以管理安全策略的。
?? ?
?? ?
???
轉載于:https://blog.51cto.com/hmtk520/1981448
總結
- 上一篇: X86-64寄存器和栈帧--牛掰降解汇编
- 下一篇: 异步陷阱之IO篇