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:进程域