SELinux配置
一:SELinux简介在SELinux访问控制体系的限制下,进程只能访问那些在他的任务中所需要的文件,从而实现系统的安全性。1:常见的读取控制机制(1)DAC(Discretionary Access Control,任意式读取控制),每个对象都会记录一个拥有者的信息。只要是对象的拥有,就可以获得该对象的完全控制权限。DAC允许拥有者完全权限。其他需要读取该对象的时候,必须授予适当的权限。但是每个
一:SELinux简介
在SELinux访问控制体系的限制下,进程只能访问那些在他的任务中所需要的文件,从而实现系统的安全性。
1:常见的读取控制机制
(1) DAC
(Discretionary Access Control,任意式读取控制),每个对象都会记录一个拥有者的信息。只要是对象的拥有,就可以获得该对象的完全控制权限。DAC允许拥有者完全权限。其他需要读取该对象的时候,必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用ACL。ACL是DAC的延伸,在ACL环境下,可以为不同的用户设置一组权限,对不同的用户设置不同的权限。
(2) MAC
(Mandatory Access Control,强制性读取控制),为每一个对象添加一个安全的上下文。进程和用户除了具备传统的权限之外,还必须获得SELinux的授权,才能读取对象。
(3) RBAC
(Role-based Access Control,角色基础读取控制),以用户所属的角色进行读取权限判定的动作。
(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:进程域
更多推荐
所有评论(0)