SELinux
全稱:Security-Enhanced Linux,安全增強的Linux;
SELinux系統的原本名稱爲MAC:強制訪問控制;SELinux就是MAC訪問控制機制在Linux系統中的實現;python
操做系統安全等級標準(橙皮書): D級別(最低安全級別) C級別:C1, C2 (DAC自主訪問控制,例如windows等系統的安全級別爲C1級別) B級別:B1, B2, B3 (強制訪問控制級別MAC) A級別(最高安全級別) 訪問控制機制: DAC:Discretionary Access Control,自主訪問控制: 基於文件或數據被文件系統賦予的訪問權限(r,w,x)的方式實現的訪問控制機制; MAC:Mandatory Access Control,強制訪問控制: 對於文件或數據的訪問權限不是針對用戶身份來設定,當某個用戶發起某個進程以後,該進程是否可以操縱或處理此文件或數據,取決於進程和文件是否具有能夠匹配的domain(進程的域)和type(文件的類型); SELinux工做於Linux內核中: RHEL 4.0:測試性的加入了SELinux安全組件; RHEL 5.0:在安全操做系統時強制安裝此組件,但能夠在安裝時選擇關閉相應功能; RHEL 6.0+:在安裝操做系統時強制安裝此組件,且在系統啓動以後自動啓動其功能; SELinux依賴於安全策略結果進行相應的訪問控制管理,策略結果已知的有三種: 一、strict(嚴格策略):對於每一個文件都要嚴格的規定其類型,對於每一個進程都要設定特定的域,進程的域和文件的類型必須嚴格匹配,才能容許進程訪問此文件; 二、mls:multi-level security,多級安全策略結果集; //發行版內被去除 三、targeted:僅對有限個進程進行SELinux的強制訪問控制管控;只要進程的域和文件的類型屬於某同一大類,就能夠匹配,就能夠容許進程訪問文件;在RHEL系操做系統中爲此策略結果; //全部有限個進程:指的是那些容易被***而且會對系統形成安全隱患的進程 注意:在targeted策略結果集中,僅關心進程的domain和文件的type可否匹配,與其餘的安全上下文標識沒有關係; Sandbox(SELinux須要在沙箱中完成): 在Linux系統中,可以完成真實操做的實體,是進程; subject, action(operation), object subject:進程 action(operation)動做:open, close, read, write, modify, delete, chmod, chown, ... object:文件,進程,套接字,連接,... SELinux爲每一個文件和進程提供了一套安全標籤,這些安全標籤能夠稱爲SELinux的安全上下文(security context); user-identify:role:domain|type:sencitivity user-identify:SELinux的用戶身份標識,一般指用戶的類型; role:角色 domain|type:進程的域或文件的類型; sencitivity:敏感度; SELinux的策略庫(規則庫):用來存放規則 規則:進程的哪一個域能夠以哪一種方式訪問或操縱哪些類型的文件;存放於/etc/selinux/targeted/policy目錄中; /etc/sysconfig/selinux文件中定義了SELinux的工做模式和使用的策略結果集; SELINUX=enforcing SELINUXTYPE=targeted SELinux的工做模式(/etc/sysconfig/selinux文件中定義SELinux工做模式): enforcing - 強制開啓SELinux機制 permissive - 警告模式,全部動做被記錄下來,但並不會阻止操做 disabled - 關閉SELinux機制 注意: 1.凡是從enforcing或permissive模式切換至disabled模式,或者從disabled模式切換至enforcing或permissive模式,都必須通過操做系統的從新引導才能生效; 2.從enforcing模式到permissive模式的切換,能夠直接使用命令行工具完成且當即生效; setenforce命令:切換SELinux的工做模式 setenforce [ Enforcing | Permissive | 1 | 0 ] 1:Enforcing 0:Permissive getenforce命令:顯示SELinux的工做模式 注意:使用setenforce命令修改的SELinux的工做模式會當即生效,但並不是永久有效;若是想要使被修改的SELinux的工做模式永久有效,則須要修改/etc/sysconfig/selinux文件中的SELINUX參數的值,並從新引導操做系統; 查看進程或文件的SELinux的安全上下文: 文件安全上下文查看: ls -Z|--context [file] 進程安全上下文查看: ps auxZ|-efZ 修改文件的安全上下文: chcon命令: 經常使用選項: -t, --type=TYPE:直接設置目標文件的類型; -R, --recursive:遞歸地修改目錄中全部文件,包括子目錄中的文件; --reference=RFILE:參考RFILE所表明的文件的安全上下文,爲目標文件設置徹底相同的安全上下文; 使用場景: 一般在進程的安全上下文與文件的安全上下文類型不相符合或不能匹配的時候使用; 示例: 設置httpd虛擬主機對應的文檔根目錄的安全上下文: ~]# chcon -t httpd_sys_content_t -R /myweb ~]# chcon --reference=/var/www -R /myweb restorcon命令: 經常使用選項: -R, -r:遞歸修改指定目錄及其子目錄的安全上下文爲默認值; 示例: 撤銷httpd虛擬主機對應的文檔根目錄的安全上下文: ~]# restorcon -R /myweb 查看或修改策略中的內容: getsebool命令:查看SELinux的布爾值 經常使用選項:-a:查看全部SELinux的布爾值 setsebool命令:修改SELinux的布爾值 經常使用選項: -P:若是添加-P選項,則將附加的值直接寫入磁盤中的策略文件中,永久生效;若是不添加-P選項,則重啓後恢復默認布爾值 使用場景:支持二進制策略修改的系統服務; 1.vsftpd的匿名用戶的上傳功能被SELinux限制的場景: ~]# setsebool -P ftpd_anon_write on ~]# setsebool -P ftpd_full_access=1 2.samba服務中samba用戶訪問本身的家目錄的共享結果被SELinux限制的場景: ~]# setsebool -P samba_enable_home_dirs on 3.samba服務中共享的目錄是由管理員自行建立並指定的: chcon -t samba_share_t /path/to/directory semanage命令:SELinux的策略管理工具 //若是沒有此命令,安裝policycoreutils-python程序包 semanage port命令: -a, --add:添加一個端口號 -d, --delete:刪除一個端口號 -m, --modify:修改一個端口號 -l, --list:列出已被定義的端口號 示例: ~]# semanage port -a -t http_port_t -p tcp 8088