SELinux配置

SELinux配置java


 

SELinux簡介linux

SELinux訪問控制體系的限制下,進程只能訪問那些在他的任務中所須要的文件,從而實現系統的安全性。正則表達式

1:常見的讀取控制機制數據庫

(1) DACapache

Discretionary Access Control,任意式讀取控制),每一個對象都會記錄一個擁有者的信息。只要是對象的擁有,就能夠得到該對象的徹底控制權限。DAC容許擁有者徹底權限。其餘須要讀取該對象的時候,必須授予適當的權限。可是每一個對象僅有一組擁有者的信息,若是須要更復雜的讀取控制能力,必須使用ACLACLDAC的延伸,在ACL環境下,能夠爲不一樣的用戶設置一組權限,對不一樣的用戶設置不一樣的權限。安全

(2) MAC服務器

Mandatory Access Control,強制性讀取控制),爲每個對象添加一個安全的上下文。進程和用戶除了具有傳統的權限以外,還必須得到SELinux的受權,才能讀取對象。網絡

(3) RBACapp

Role-based Access Control,角色基礎讀取控制),以用戶所屬的角色進行讀取權限斷定的動做。dom

(4) MLS

Mulit-Live Security,多層次安全),以對象的機密等級來決定進程對該對象的讀取權限。

2:什麼是SELinux

SELinuxSecurity-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的默認值

      minimumSELinux最低基本策略

      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字段應設置爲enforcingpermissive

SELINUX=disabled

SELINUXTYPE=targeted

 

4:查看和更改SELinux應用模式

(1) 查看SELinux應用模式

[root@localhost ~]# getenforce

Enforcing

(2) 更改SELinux應用模式

使用setenforce命令能夠切換SELinux應用模式

enforcing1:強制模式

permissive0:容許模式

[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_tJAVA相關的執行文件

public_content_t:公共內容類型文件,好比FTPNFS等服務器中的文件

shadow_t:表明存儲密碼數據的文件類別

http_t:做爲HTTP服務器文件的類別

 

(4) LEVELCATEGORY字段

用來定義其隸屬的安全等級和分類。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 1124 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 1124 2013 setrans.conf   \\定義某一個安全等級和類別的轉譯名稱

-rw-r--r--. 1 root root  106 7月   1 2016 seusers       \\自動生成libsemanage

 

[root@localhost ~]# ls -l /etc/selinux/targeted/policy/      \\policytargeted中最重要的目錄,

總用量 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 1123 2013 restorecond.conf

-rw-r--r--. 1 root root   76 1123 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 1123 2013 restorecond.conf

-rw-r--r--. 1 root root   76 1123 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-consolesetools-libs軟件包,而後才能使用seinfo命令查看。

(1) 安裝裝setools-consolesetools-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_transitiontype_membertype_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修改和查詢布爾值的一套工具組。

當值設置爲1ontrue是標識啓用布爾值,當值爲0falseoff時爲禁用布爾值。使用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:狀態

image.png 

2:布爾值

3:文本標記

4:用戶映射

5SELinux用戶

6:網絡端口

7:策略模塊

8:進程域

相關文章
相關標籤/搜索