SELinux配置java
一:SELinux簡介linux
在SELinux訪問控制體系的限制下,進程只能訪問那些在他的任務中所須要的文件,從而實現系統的安全性。正則表達式
1:常見的讀取控制機制數據庫
(1) DACapache
(Discretionary Access Control,任意式讀取控制),每一個對象都會記錄一個擁有者的信息。只要是對象的擁有,就能夠得到該對象的徹底控制權限。DAC容許擁有者徹底權限。其餘須要讀取該對象的時候,必須授予適當的權限。可是每一個對象僅有一組擁有者的信息,若是須要更復雜的讀取控制能力,必須使用ACL。ACL是DAC的延伸,在ACL環境下,能夠爲不一樣的用戶設置一組權限,對不一樣的用戶設置不一樣的權限。安全
(2) MAC服務器
(Mandatory Access Control,強制性讀取控制),爲每個對象添加一個安全的上下文。進程和用戶除了具有傳統的權限以外,還必須得到SELinux的受權,才能讀取對象。網絡
(3) RBACapp
(Role-based Access Control,角色基礎讀取控制),以用戶所屬的角色進行讀取權限斷定的動做。dom
(4) MLS
(Mulit-Live Security,多層次安全),以對象的機密等級來決定進程對該對象的讀取權限。
2:什麼是SELinux
SELinux(Security-Enhanced Linux,安全加強型Linux)是美國國家安全局(NAS)對於強制訪問控制的實現,在這種訪問控制體系的限制下,進程只能訪問哪些在他的任務中所需的文件。SELinux在類型強制服務器中合併了多級安全性或一種可選的多類策略,並採用了基於角色的控制概念。
在SELinux中定義了許多類型(TYPE),每個進程、文件、設備等都必須標識他所屬的類型進程只能讀取相同類型的文件,若是沒有相關類型,而且SELinux不容許讀取的時候,則沒法讀取文件。SELinux除了約束進程讀取文件的能力以外,還限制進程對設備、網絡聯機、通訊端口、跨進程通訊的讀取能力,並提供更細緻的讀取控制。
SELinux的特色:
Ø MAC:對訪問的控制完全化,對全部的文件、目錄、端口的訪問都是基於策略設定的,能夠由管理員自行設定的。
Ø RBAC:對於用戶只是賦予最小權限。用戶被劃分紅了一些角色,即便是root用戶,若是不具有sysadm_r的角色的話,也不能執行相關的管理。哪個角色能夠執行哪些域是能夠修改的。
Ø 安全上下文:當啓動SELinux的時候,全部文件與對象都有安全上下文。
二:SELinux狀態和應用模式
1:/etc/selinux/config文件詳解
[root@localhost ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
(1)應用模式設置
enforcing:強制模式,只要SELinux不容許,就沒法執行
permissive:容許模式,將該時間記錄下來,依然容許執行
disabled:禁用SELinux
(2)策略類型設置
在使用策略類型時必須先安裝策略類型的軟件包
targeted:保護常見的網絡服務,是SELinux的默認值
minimum:SELinux最低基本策略
mls:提供符合MLS機制的安全性
2:查看SELinux狀態
使用sestatus命令查看系統運行SELinux的狀態、應用模式、布爾值以及sestatus.cong文件內列出的文件和進程的安全上下文。
-v:詳細檢查進程和文件的安全上下文
-b:顯示當前布爾值狀態
[root@localhost ~]# sestatus
SELinux status: enabled \\SELinux狀態,enabled啓用,disabled禁用
SELinuxfs mount: /selinux \\SELiuux fs文件系統掛在目錄
Current mode: enforcing \\SELinux目前的應用模式
Mode from config file: enforcing \\在配置文件中設置的SELinux應用模式
Policy version: 24 \\使用中的SELinux策略類型版本
Policy from config file: targeted \\在配置文件中設置的SELinux策略類型
3:啓用或禁用SELinux
修改/etc/selinux/config文件,以禁用SELInux(若要啓用,SELinux字段應設置爲enforcing或permissive)
SELINUX=disabled
SELINUXTYPE=targeted
4:查看和更改SELinux應用模式
(1) 查看SELinux應用模式
[root@localhost ~]# getenforce
Enforcing
(2) 更改SELinux應用模式
使用setenforce命令能夠切換SELinux應用模式
enforcing或1:強制模式
permissive或0:容許模式
[root@localhost ~]# setenforce 0
三:安全上下文
安全上下文是一組和進程或對象有關的安全屬性,每個進程或對象都會記錄一條安全上下文,將其做爲SELinux判斷進程是否能讀取對象的依據。
1:安全上下文格式
(1) USER字段
USER字段用來記錄登陸系統後所屬的SELinux身份。USER字段一般以_u爲後綴。
經常使用的USER:
Ø user_u:真實用戶類型的使用者
Ø system_u:系統帳戶類型的使用者
Ø root:超級用戶的使用者
(2) ROLE字段
ROLE字段用來存儲進程、領域或對象所扮演的角色信息,使用ROLE表明多個TYPE的組合,ROLE字段一般以_r爲後綴。
經常使用的ROLE
Ø staff_r:內部的用戶角色
Ø user_r:其餘或不分類的用戶角色
Ø object_r:文件、設備或其餘沒法分類的對象
Ø secadm_r:容許作安全管理的用戶角色
(3) TYPE字段
TYPE字段用來定義該對象的類別。TYPE字段一般以_t爲後綴
一般的TYPE字段
unconfiged_:未設置類型
default_t:默認類別
mn_t:表明掛載點的類型,/mnt中的文件類型屬於這個類別
boot_t:做爲開機文件的類型,/boot中的文件多數屬於這個類別
bin_t:做爲二進制執行文件,/bin中的文件多數屬於這個類別
sbin_t:做爲系統管理類型的文件,/sbin中的文件屬於這個類別
device_t:表明設備文件,/dev中的文件屬於這個類別
lib_t:連接庫類別,/lib中的文件屬於這個類別
var_t:表明存儲於/var中的文件類別
usr_t:表明存儲於/usr中的文件類別
etc_t:存儲於/etc中的文件類別
tty_device_t:表明終端或控制檯設備
su_exec_t:具有su功能的執行文件
java_exec_t:JAVA相關的執行文件
public_content_t:公共內容類型文件,好比FTP、NFS等服務器中的文件
shadow_t:表明存儲密碼數據的文件類別
http_t:做爲HTTP服務器文件的類別
(4) LEVEL和CATEGORY字段
用來定義其隸屬的安全等級和分類。LEVEL字段定義爲s0~S15,共16個,s0機密等級最低,s15機密等級最高。CATEGORY字段定義爲c0~c1023,共1024個。
2:查看安全上下文
(1) 查看用戶帳戶安全上下文
[root@localhost ~]# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(2) 查看進程安全上下文
[root@localhost ~]# ps -ax -Z
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
LABEL PID TTY STAT TIME COMMAND
system_u:system_r:init_t:s0 1 ? Ss 0:01 /sbin/init
system_u:system_r:kernel_t:s0 2 ? S 0:00 [kthreadd]
system_u:system_r:kernel_t:s0 3 ? S 0:00 [migration/0]
system_u:system_r:kernel_t:s0 4 ? S 0:00 [ksoftirqd/0]
system_u:system_r:kernel_t:s0 5 ? S 0:00 [migration/0]
system_u:system_r:kernel_t:s0 6 ? S 0:00 [watchdog/0]
(3) 查看文件和目錄安全上下文
[root@localhost ~]# ls -Z /root/anaconda-ks.cfg
-rw-------. root root system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg
[root@localhost ~]# ls -dZ /root
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root
3:修改文件的安全上下文
(1) 查看文件系統對象擴展屬性
getfattr命令查看文件系統對象的擴展屬性。
-m . 匹配全部格式的擴展屬性,默認的是user.xxx,即"^user\."。
-d 得到全部擴展屬性值
-d -e hex 使用16進制編碼dump出對應擴展屬性的值
--absolute-names 不過濾路徑分隔符('/')
-n 指定擴展屬性的名稱
-R遞歸到子目錄
[root@localhost ~]# getfattr -m . -d /root/anaconda-ks.cfg
getfattr: Removing leading '/' from absolute path names
# file: root/anaconda-ks.cfg
security.selinux="system_u:object_r:admin_home_t:s0"
(2) 修改文件安全上下文
使用chcon命令修改文件的SELinux安全上下文
-h, --no-dereference:影響符號鏈接而非引用的文件。
--reference=參考文件:使用指定參考文件的安全環境,而非指定值。
-R, --recursive:遞歸處理全部的文件及子目錄。
-v, --verbose:爲處理的全部文件顯示診斷信息。
-u, --user=用戶:設置指定用戶的目標安全環境。
-r, --role=角色:設置指定角色的目標安全環境。
-t, --type=類型:設置指定類型的目標安全環境。
-l, --range=範圍:設置指定範圍的目標安全環境。
[root@localhost ~]# chcon -tetc_t /root/anaconda-ks.cfg
[root@localhost ~]# ls -Z /root/anaconda-ks.cfg
-rw-------. root root system_u:object_r:etc_t:s0 /root/anaconda-ks.cfg
4:修復安全上下文
(1) 查看默認安全上下文
使用matchpathcon命令能夠獲得制定文件的默認SELinux安全上下文。
-p:使用前綴的速度解答
-N:不使用解答
-n:不顯示路徑
-V:在磁盤匹配默認上驗證文件上下文
-f <file_context_file文件>:使用備用file_context文件
[root@localhost ~]# matchpathcon /root/anaconda-ks.cfg
/root/anaconda-ks.cfg system_u:object_r:admin_home_t:s0
(2) 使用fixfiles命令修復安全上下文
使用fixfiles命令能夠修復RPM軟件包裏的文件的安全上下文。
-l <日誌文件>:將輸出保存到制定的日誌文件
-F:強制重置上下文爲匹配file_context的自定義文件
-f:清楚/tmp目錄
-R <RPM軟件包名稱>:使用rpm數據庫,以發現指定數據包中的全部文件和恢復文件的上下文
例:修復crontabs軟件包中的文件的安全上下文
[root@localhost ~]# ls -Z /etc/crontab
-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab
[root@localhost ~]# chcon -t user_home_t /etc/crontab
[root@localhost ~]# ls -Z /etc/crontab
-rw-r--r--. root root system_u:object_r:user_home_t:s0 /etc/crontab
[root@localhost ~]# rpm -qf /etc/crontab
crontabs-1.10-33.el6.noarch
[root@localhost ~]# fixfiles -R crontabs check
/sbin/restorecon reset /etc/crontab context system_u:object_r:user_home_t:s0->system_u:object_r:system_cron_spool_t:s0
[root@localhost ~]# fixfiles -R crontabs restore
[root@localhost ~]# ls -Z /etc/crontab
-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab
(3) 使用restorecon命令修復安全上下文
使用該命令能夠恢復SELinux文件屬性,即恢復文件的安全上下文。
-i:忽略不存在的文件
-f <文件名>:包含由應用程序處理的文件列表
-e <目錄>:制定要排除的目錄
-R:遞歸處理目錄
-n:不改變任何文件標籤
-o <文件名>:保存不正確的上下文列表到輸出文件中
-v:顯示文件標籤
-F:強制恢復文件安全上下文
-p:沒1000個文件顯示速度
例:恢復/root/anaconda-ks.cfg文件的安全上下文
[root@localhost ~]# restorecon /root/anaconda-ks.cfg
[root@localhost ~]# ls -Z /root/anaconda-ks.cfg
-rw-------. root root system_u:object_r:admin_home_t:s0 /root/anaconda-ks.cfg
(4) 從新產生安全上下文
若是須要修復很是多的文件的安全上下文,則建議從新產生安全上下文,爲Linux整個系統中的每個文件從新產生正確的安全上下文。Linux在開機的時候,會檢查是否須要啓動SELinux子系統,以及是否有/.autorelabel文件,Linux系統使用fixfiles從新生成Linux系統文件的安全上下文。
[root@localhost ~]# touch /.autorelable
重啓系統(須要較長時間)
四:策略類型
1:策略類型簡介
SELinux策略是用來定義SELinux的讀取規則,好比哪個安全上下文的進程容許或禁止讀取哪個對象。Linux會把每個Linux策略類型的資料存儲在/etc/selinux策略類型名目錄中。
例:targeted策略類型的內容(targeted目錄中的文件或子目錄都是用來存儲SELinux策略類型的數據)
[root@localhost ~]# ls -l /etc/selinux/targeted/
總用量 24
drwxr-xr-x. 4 root root 4096 7月 1 2016 contexts \\存儲策略類型的安全上下文
drwxr-xr-x. 2 root root 4096 11月 24 2013 logins \\
drwxr-xr-x. 3 root root 4096 7月 1 2016 modules \\存儲策略類型的模版數據
drwxr-xr-x. 2 root root 4096 7月 1 2016 policy \\存儲策略類型的二進制類型數據庫
-rw-r--r--. 1 root root 607 11月 24 2013 setrans.conf \\定義某一個安全等級和類別的轉譯名稱
-rw-r--r--. 1 root root 106 7月 1 2016 seusers \\自動生成libsemanage
[root@localhost ~]# ls -l /etc/selinux/targeted/policy/ \\policy是targeted中最重要的目錄,
總用量 7124
-rw-r--r--. 1 root root 7292701 7月 1 2016 policy.24
[root@localhost ~]# ls /etc/selinux/targeted/policy/
policy.24 \\ policy.24是該策略類型數據庫文件,文件名後的數子是該策略類型數據庫的版本
2:安裝和使用策略類型
(1) 查看/etc/selinux目錄(此時只有一個targeted目錄,每個策略類型都會有一個目錄的)
[root@localhost ~]# ls -l /etc/selinux/
總用量 20
-rw-r--r--. 1 root root 458 7月 1 2016 config
-rw-r--r--. 1 root root 113 11月 23 2013 restorecond.conf
-rw-r--r--. 1 root root 76 11月 23 2013 restorecond_user.conf
-rw-r--r--. 1 root root 2271 2月 22 2013 semanage.conf
drwxr-xr-x. 6 root root 4096 7月 1 2016 targeted
(2) 安裝selinux-policy-minimum軟件包
[root@localhost ~]# rpm -qa selinux-policy-minimum
[root@localhost ~]# yum -y install selinux-policy-minimum
(3) 查看是否已經存在策略類型
[root@localhost ~]# ls -l /etc/selinux/總用量 24
-rw-r--r--. 1 root root 458 7月 1 2016 config
drwxr-xr-x. 6 root root 4096 3月 15 14:10 minimum
-rw-r--r--. 1 root root 113 11月 23 2013 restorecond.conf
-rw-r--r--. 1 root root 76 11月 23 2013 restorecond_user.conf
-rw-r--r--. 1 root root 2271 2月 22 2013 semanage.conf
drwxr-xr-x. 6 root root 4096 7月 1 2016 targeted
(4) 使用新的策略類型
[root@localhost ~]# vi /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=minimum
(5) 從新啓動Linux系統
3:查看策略類型信息
查看策略類型須要安裝setools-console和setools-libs軟件包,而後才能使用seinfo命令查看。
(1) 安裝裝setools-console和setools-libs軟件包
[root@localhost ~]# yum -y install setools-console
[root@localhost ~]# yum -y install setools-libs
(2) 查看策略類型信息
使用seinfo命令查看SELinux策略的組建有關的信息
seinfo命令選項
-x:爲每一個組件匹配表達式顯示更多詳細信息
--stats:顯示策略的統計信息
-l:顯示約束語句時顯示換行符
-A:列出SELinux的狀態、規則布爾值、身份識別、角色、類型等全部信息。
-t:列出SELinux全部類型(type)的種類。
-r:列出SELinux全部角色(role)的種類。
-u:列出SELinux全部身份識別(user)的種類。
-b:列出全部規則的種類(布爾值)。
例:查看SELinux策略類型targeted的信息
[root@localhost ~]# seinfo /etc/selinux/targeted/policy/policy.24
Statistics for policy file: /etc/selinux/targeted/policy/policy.24
Policy Version & Type: v.24 (binary, mls)
Classes: 81 Permissions: 235
Sensitivities: 1 Categories: 1024
Types: 3637 Attributes: 280
Users: 9 Roles: 12
Booleans: 217 Cond. Expr.: 257
Allow: 291034 Neverallow: 0
Auditallow: 123 Dontaudit: 226650
Type_trans: 33142 Type_change: 38
Type_member: 48 Role allow: 19
Role_trans: 308 Range_trans: 4521
Constraints: 90 Validatetrans: 0
Initial SIDs: 27 Fs_use: 23
Genfscon: 83 Portcon: 446
Netifcon: 0 Nodecon: 0
Permissives: 75 Polcap: 2
(3) 搜索策略類型
使用seinfo命令能夠查詢SELinux的策略提供多少相關規則,若是查到的相關類型或者布爾值,想要知道詳細規則時,使用sesearch命令查詢。
sesearch命令選項:
-a:列出該類型或布爾值的全部相關信息
-t:後面還要接類型,例如 -t httpd_t
-b:後面還要接布爾值的規則,例如 -b httpd_enable_ftp_server
-d:不搜索類型的屬性
-R:使用正則表達式匹配
-n:問每一個規則顯示行號(若是有)
-S:搜索規則的語義而不是語法
-C:爲條件規則顯示條件表達式
規則類型:
-A:搜索容許規則
--neverallow:搜索neverallow規則
--auditallow:搜索auditallow規則
--dontaudit:搜索dontaudit規則
-T:搜索type_transition、type_member和type_change規則
--role_allow:搜索角色容許規則
--role_trans:搜索role_transition規則
--range_trans:搜索range_transition規則
--all:搜索全部規則類型
例:搜索targeted策略類型中httpd_t讀取etc_t類型時全部的規則
[root@localhost ~]# sesearch -A -s httpd_t -t etc_t /etc/selinux/targeted/policy/policy.24
Found 14 semantic av rules:
allow httpd_t file_type : filesystem getattr ;
allow domain etc_t : file { ioctl read getattr lock open } ;
allow domain etc_t : dir { ioctl read getattr lock search open } ;
allow domain etc_t : lnk_file { read getattr } ;
allow httpd_t etc_t : file { ioctl read getattr lock open } ;
allow httpd_t etc_t : dir { ioctl read getattr lock search open } ;
allow httpd_t etc_t : lnk_file { read getattr } ;
allow domain configfile : file { ioctl read getattr lock open } ;
allow domain configfile : dir { ioctl read getattr lock search open } ;
allow domain configfile : lnk_file { read getattr } ;
allow httpd_t configfile : file { ioctl read getattr lock open } ;
allow httpd_t configfile : dir { ioctl read getattr lock search open } ;
allow httpd_t configfile : lnk_file { read getattr } ;
allow httpd_t etc_t : dir { getattr search open } ;
五:布爾值
1:查看布爾值
使用gesebool命令查看SELinux布爾值
-a:列出目前系統上面的全部布爾值條款設置爲開啓或關閉值。
例:查看全部SELinux布爾值
[root@localhost ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
allow_console_login --> on
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
allow_daemons_use_tcp_wrapper --> off
allow_daemons_use_tty --> on
allow_domain_fd_use --> on
例:查看httpd_can_network_connect布爾值
[root@localhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect --> off
2:修改布爾值
setsebool命令是用來修改SElinux策略內各項規則的布爾值。setsebool命令和getsebool命令是SELinux修改和查詢布爾值的一套工具組。
當值設置爲1、on、true是標識啓用布爾值,當值爲0、false、off時爲禁用布爾值。使用setsebool修改SELinux的布爾值時只能改變當前運行的布爾值,Linux系統重啓後,將繼續加載默認配置,若是須要永久改變,須要使用-P選項。
例:啓用httpd_can_network_connect的布爾值
[root@localhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect --> off
[root@localhost ~]# setsebool httpd_can_network_connect on
[root@localhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect --> on
例子:禁用httpd_can_network_connect的布爾值
[root@localhost ~]# setsebool httpd_can_network_connect off
[root@localhost ~]# getsebool httpd_can_network_connect
httpd_can_network_connect --> off
六:管理策略模塊
使用semodule命令能夠管理SELinux策略模塊,好比顯示、安裝、升級、刪除、激活以及禁用策略模塊。
semodule命令選項
-l:顯示安裝的模塊
-R重裝策略模塊
-B創建和承諾改裝策略模塊
-I <策略模塊>:安裝一個新的模塊
-u <策略模塊>:升級策略模塊
-e <策略模塊>:激活策略模塊
-d <策略模塊>:禁用策略模塊
-b <策略模塊>:安裝新的基礎模塊
-r <策略模塊>:刪除策略模塊
例:查看SELinux加載的策略模塊
[root@localhost ~]# semodule -l
abrt 1.2.0
accountsd 1.0.0
ada 1.4.0
afs 1.5.3
aiccu 1.0.0
aide 1.5.0
amanda 1.12.0
amtu 1.2.0
例:查看apache策略模塊
[root@localhost ~]# semodule -l | grep apache
apache 2.1.2
例:禁用zebra策略模塊
[root@localhost ~]# semodule -d zebra
[root@localhost ~]# semodule -l | grep zebra
zebra 1.10.1 Disabled
例:激活zebra模塊
[root@localhost ~]# semodule -e zebra
[root@localhost ~]# semodule -l | grep zebra
zebra 1.10.1
例:刪除zebra模塊
[root@localhost ~]# semodule -r zebra
[root@localhost ~]# semodule -l | grep zebra
七:圖形界面管理SELinux
須要先安裝policycoreutils-gui軟件包
[root@localhost ~]# yum -y install policycoreutils-gui
【系統】à【管理】à【SELinux管理】,打開SELinux維護界面,
1:狀態
2:布爾值
3:文本標記
4:用戶映射
5:SELinux用戶
6:網絡端口
7:策略模塊
8:進程域