Linux之SELinux-安全上下文

目录

SELinux介绍

五个安全元素

启用SELinux

管理文件安全标签

管理端口标签

管理SELinux布尔值开关

设置SELinux管理日志

查看SELinux帮助


 *******温馨提示:小编认为文中的理论知识点也很重要,请热爱学习的你们也同样耐心阅读完********


SELinux介绍

SELinux:Secure Enhanced Linux,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Courporation)开发的LInux的一个强制控制的安全模块。2000年以GNU GPL发布,Linux内核2.6版本后继承在内核中。

访问控制类别:

DAC:Discretionary Access Control 自由访问控制

MAC:Mandatory Access Control 强制访问控制

 

DAC和MAC的特点:

DAC环境下进程是无束缚的

MAC环境下策略的规则决定控制的严格程度

MAC环境下进程可以被限定的

策略被用来定义被限定的进程能够使用那些资源(文件和端口)

默认情况下,没有被明确允许的行为将被拒绝

 

SElinux安全上下文工作类型:有四种工作类型

  1. strict:centos5,每个进程都受到selinux的控制
  2. targeted:用来保护常见的网络服务,仅有限进程受到 selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务
  3. minimum:centos7,修改过的targeted,只对选择的网络服务。
  4. mls:提供MLS(多级安全)机制的安全性

targeted为默认类型,minimum和mls稳定信不足,未加以应用,strict已不再使用

 

为什么会用SElinux

传统的 Linux中一切皆文件,由用户、组、权限控制访问。而在SELinux中一切皆对象(object),由存放在inde表的扩展属性域的安全元素所控制其访问。

安全上下文基本格式说明

安全上下文有五个元素组成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0

实际上下文存放在文件系统中,进程、文件、已经用户等都有相应的安全上下文:

期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中  (semanage fcontext –l)
例子:

#查看指定文件的安全上下文
ls  -Z

技术分享

#查看进程的安全上下文件
ps  Z

技术分享

#查看用户安全上下文

技术分享

期望(默认)上下文:

存放在二进制的SELinux策略库(映射目录和期望安全上下文)中:

使用命令

semanage  fcontext  -l   #
可以查看所有默认策略

五个安全元素

  1. User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由( unconfined)进程
  2. Role:定义文件,进程和用户的用途:文件:object_r,进程和用户: system_r
  3. Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用: public_content_t
  4. Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级, s0最低,Target策略默认使用s0
  5. Category:对于特定组织划分不分层的分类,如FBI Secret, NSA secret, 一个对象可以有多个categroy, c0-c1023共1024个分类, Target 策略不使用category

 

SELinux策略:

对象(object):所有可以读取的对象,包括文件、目录和进程,端口等

主体:进程称为主体(subject)

SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。domain标签能够执行的操作由安全策略里定义。

当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC(访问矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果运行或拒绝访问。

安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一项对象是允许还是拒绝的,并且定义了那种行为是运行或拒绝。

启用SELinux

配置SELinux:

  • SELinux是否启用
  • 给文件重新打安全标签
  • 给端口设置安全标签
  • 设定某些操作的布尔型开关
  • SELinux的日志管理

SELinux的状态:

  1. enforcing: 强制,每个受限的进程都必然受限
  2. permissive: 允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
  3. disabled: 禁用

配置SELinux—SELinux是否启用

设置SELinux模式及开关使用命令有3个:getenforce ;status ;setenforce

getenforce:#获取selinux的当前状态 

[root@centos7-->14:47:57~]#getenforce 
Disabled                                    ##当前系统的selinux状态为关闭

sestatus:  #查看selinux完整状态

[root@centos7-->14:51:35~]#sestatus
SELinux status:                 enabled            ##当前状态
SELinuxfs mount:                /sys/fs/selinux    
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

setenforce  0|1#开启或关闭

[root@centos7-->14:51:59~]#setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

0:设置为permissive

1:设置为enforcing

注意:如果当前系统的SElinux状态为Disabled时,使用setenforce  0或者1切换时,要想生效,必须reboot重启系统。

如果是enforcing状态和permissive切换时不需要重启系统。 

修改配置文件:

                   /boot/grub/grub.conf在对应的kernel内核参数后面追加    (centos  6中)

                   selinux=1 (启用)   selinux=0(禁用)                           

                   /etc/sysconfig/selinux

                   /etc/selinux/config                                                              (centso 7  中)

                   SELINUX变量有3中参数:

                   SELINUX={disabled|enforcing|permissive}

管理文件安全标签

修改文件的SELinux标签的命令:chcon ;restorecon

chcon 命令

 chcon - change file SELinux security context

 更改文件的selinux安全上下文件

###更改文件标签之前文件的selinux类型为   :admin_home_t:
[root@centos7-->17:00:34~]#ll -Z text.txt 
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 text.txt

选项与用法:

chcon [option]...  CONTXT  /path/to/file...  #直接对指定的文件写完整的安全上下文字段

chcon [option]...  [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...  #根据上下文类型更改

chcon [option]...  --reference=RFILE  FILE....  #参考RFILE的上下文修改FILE的上下文

-R :如果是目录,将同时递归设置该目录下所有文件

##更改后文件text.txt的selinux标签
[root@centos7-->15:32:56~]#chcon -t var_log_t text.txt 
[root@centos7-->15:33:10~]#ll -Z text.txt                
-rw-r--r--. root root unconfined_u:object_r:var_log_t:s0 text.txt

SELinux规则管理工具命令:semanage

semanage - SELinux Policy Management tool

semange 命令  注:此命令来自policycoreutils-python  RPM包

默认安全文件规则的查询和修改:semanage  

semanage  命令

semanage fcontext [-S store] -{a|d|m|l|n|D} [-frstN] file_spec

用法与实例:

查询信息

#查看默认所有安全上下文列表
semanage fcontext  -l
#添加安全上下文
semanage fcontext -a -t httpd_sys_content_t ‘/testdir(/.*)?’
#删除安全上下文
semanage fcontext -d -t httpd_sys_content_t ‘/testdir(/,*)?’

管理端口标签

端口标签的设置

#查询端口标签
semanage port -l

#添加端口

semanage port -a -t port_label -p tcp|udp PORT 例如:

semanage port -a -t http_port_t -p tcp 9527

#删除端口

semanage port -d -t port_label -p tcp|udp PORT 例如:

semanage port -d -t http_port -t -p tcp 9527

#修改现有端口为新标签

semanage port -m -t port_label -p tcp|udp PORT 例如:

semanage port -m -t http_port_t -p tcp 9527

管理SELinux布尔值开关

布尔值规则命令:getsebool  setsebool

SELinux布尔值设置

查看bool命令:

getsebool  -a

[root@centos7-->15:53:18~]#getsebool  -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off

semanage boolean  -l

##查看更为详细的布尔值
[root@centos7-->15:54:36~]#semanage boolean -l
SELinux boolean                State  Default Description

privoxy_connect_any            (on   ,   on)  Determine whether privoxy can connect to all tcp ports.
smartmon_3ware                 (off  ,  off)  Determine whether smartmon can support devices on 3ware controllers.
mpd_enable_homedirs            (off  ,  off)  Determine whether mpd can traverse user home directories.
xdm_sysadm_login               (off  ,  off)  Allow the graphical 

semanage boolean  -l  -C  #查看修改过的布尔值

设置bool值命令:

setsebool  -P value (on,off)

#修改samba_enable_home_dirs 的布尔值为  on  开启状态
[root@centos7-->15:57:58~]#setsebool -P samba_enable_home_dirs on

setsebool [-P] Boolean=value (0,1)

设置SELinux管理日志

SELinux日志管理:setrublesshhoot 命令

yum  install  setrublesshooot*  (重启后生效)

setrub会将错误信息写入/var/log/message,使用下面方式查看:

grep  ‘setroubleshoot’  /var/log/messages

sealert  -l  UUID

查看安全时间日志说明

sealert  -a  /var/log/audit/audit.log

扫描并分析日志

查看SELinux帮助

获取SELinux的相关帮助信息

yum -y install selinux-policy-devel  #centos7下

yum -y install selinux-policy-doc   #centos6下

mandb | makewhatis  #更新man文档数据库

man  -k  _selinux   #列出selinux关键字相关文档

 

你可能感兴趣的:(Linux之SELinux-安全上下文)