Linux中的SELinux與chcon以及Samba實現【轉】

1、SELinuxhtml

SElinux的前身是NSA(美國國家安全局)發起的一個項目。它的目的是將系統加固到能夠達到軍方級別。linux

爲何NSA選擇Linux呢?apache

在目前市面上大多數操做系統都是商用閉源的,只有Linux是開源的,這樣修改並加入這項功能就方便許多,並且沒有版權糾紛。因此,如今selinux就成爲了Linux內核的一部分。vim

在瞭解selinux之間,咱們須要知道DAC和CS的概念,它們是linux系統自己的安全機制。安全

DAC:自主訪問控制服務器

每個用戶爲了可以實現和其餘用戶共享文件,在使用ACL以前,只能經過改變這個文件其餘用戶的權限,可是這中方法給系統安全帶來了無窮的隱患。網絡

CS(安全上下文):取決於發起用戶的權限和文本自己的權限 測試

CS+DAC給系統的安全機制帶來了漏洞,事想apache用戶能夠查看/etc/passwd,若是它有寫權限,就可能被利用進而就修改passwd文件,危害系統安全。網站

全部才又了MAC強制訪問控制的概念ui

MAC: Mandatory Access Control  強制訪問控制,它是selinux實現訪問控制的基礎

還經過httpd服務來講明它的原理:

SELINUX經過type enforce (TE)強制類型策略將httpd的工做目錄定義在一個特定的目錄/var/www用戶若是在定義其餘目錄,將不容許訪問,從而實現mac的強制訪問控制。

selinux是怎麼工做的

它經過operation (操做)的主和賓打一個「標籤」,在一個「類型」裏只能由特定的目錄或用戶執行。這樣能夠限定一個進程的執行範圍只能在一個「沙箱」(sandbox)內了(最小權限法則)

###operation: 讀,寫,執行,等。實際上是一個主謂賓的結構 Subject Operation Object

###最小權限法則:例如定義Sbjiect httpd   的目錄/var/www 爲public_content_t類型,這樣,httpd只能訪問有這個特定類型的文件或目錄,這些文件就叫沙箱「sendbox」

使用selinx,必須精心設計一套訪問法則

給不一樣的進程打上不一樣的「域」,給不一樣的目錄打上不一樣的」類型「經過定義「類型」和「域」的對應規則,來實現。selinx須要域和標籤的對應關係,一對一對應     。可是系統上有上千個進程,實現起來很麻煩,因此通常狀況下,並非用selinx做爲安全防範。                  

selinux的實現機制有兩種

strict:       任何進程都受selinux的控制,通常不用,太難設定

targeted:   紅帽開發,指定選定的進程來受SELINUX,這種機制使得selinx更加容易受到控制 

policy: 規則組合起來就叫策略

規則一般是以二進制文件存在的(編輯完轉換成二進制),這樣能夠下降系統資源佔用

ll /etc/selinxu/policy

MLS  muiti level scurity

 


selinxu把一些規則裏面能夠方便控制的功能設定爲on或者off,這些都成爲布爾類型

getsebool -a   能夠顯示這些布爾型的內容

fcontext 規定目錄屬於哪一個進程的範圍

啓動使用selinux

1.啓用selinux

1.vim /etc/sysconfig/selinux 
2.SELINUX=enforcing      #任何進程都受selinux控制 
3.                                     permissive    #仍然受控制,可是進程進入了別的目錄會記錄到日誌 
4.                                     disable           #乾淨完全的關閉 
5.setenforce 
6.genenforce 
2.顯示標籤

1.ls -Z           顯示文件的標籤 
2.                   一共五段     角色:selinux裏另外定義的用戶 
3.                                                          object_r: 有點相似於組 
4.                                                          user_home_t: 域或者類型(最重要)經過改變它能夠控制訪問。類型強制的機制就是經過它實現的 
5.ps -Z          顯示進程的標籤 
6.全部顯示unconfined_t都表示不受selinux控制 
7.ps auxZ | grep httpd 
8.ls -dZ 
在不一樣的目錄創建的文件類型是不同的,歸不一樣的進程管理。

3.改變一個類型的標籤

1.chcon     chage contex  改變上下文 
2.chcon -t    改類型,指定爲特定類型 
3.                -u    
4.                -R   遞歸修改,能夠改變目錄下全部目錄 
5.                      --reference=   以某個文件的標籤爲參照改變成同樣的標籤 
6.chcon -R --reference=/var/www/html /www 
7.chcon -t default_t /www/index.html 
4.恢復默認安全上下文及修改

1.restorecon 
2.                   -R                   遞歸 
3.                   -F                                           強制 
4.                   -v                                           顯示詳細信息    
5.restorecon -R -v -F /www             # 顯示/www目錄的詳細CS信息                      
6.semange 
7.                   -d                  刪除 
8.                   -m                 修改 
9.                   -r 
10.                  -a                   附加 
11.                   -t                    類型 
12.  

6.開啓布爾類型

1.getsebool -a  | grep httpd                   #查看某個對應的布爾類型的值 
2.setsebool httpd_enable_cgi=on          # 加上-p選項永久有效 

 

2、實現samba來測試selinux控制

 1.添加tools文件夾

1.vim /etc/samba/smb.conf 
2.[tools] 
3.       path = /share                        #沒有的話事前建立一個 
4.       public = yes  5.        write list = @mygrp                 #只容許mygrp組具備建立文件的權限 
6.       browseable = yes 
7.service smb start 
2.添加用戶gentoo,並設置samba密碼,容許器登錄samba服務器在tools下建立文件

1.</pre><pre class="cpp" name="code">groupadd mygrp 
2.useradd gentoo -g mygrp 
3.[root@station32 var]# smbpasswd -a gentoo 
4.New SMB password: 
5.Retype new SMB password:  6.Added user gentoo. 
7.smbclient -L 192.168.0.32 -U gentoo          # 查看samba服務器的內容 
3.咱們查看下/shared目錄的CS,而且開啓selinux

1.ls -dZ /share/ 
2.drwxrwxr-x root mygrp root:object_r:default_t          /share/ 
3.setenforce 1 
4.開啓selinux後,再使用smbclient命令就會報錯,咱們看下配置文件裏面有這樣一行 # To set a label use the following: chcon-t samba_share_t /path ,因此咱們必須把/shared文件夾的CS修改後才能正常使用samba

1.chcon -t samba_share_t  /share 

 


 

5.咱們關閉samba裏關於訪問家目錄的布爾類型

1.setsebool samba_enable_home_dirs off  
這個時候使用win網絡鄰居,以用戶gentoo登錄後,就不能進入gentoo家目錄了

 


6.咱們將它開啓就又能訪問了,命令以下:

1.setsebool samba_enable_home_dirs on 

本篇文章來源於 Linux公社網站(www.linuxidc.com)  原文連接:http://www.linuxidc.com/Linux/2011-09/42783.htm

相關文章
相關標籤/搜索