介绍

SELinux(security Enhanced Linux)是由美国国家安全部领导开发的GPL项目,拥有一个灵活而强制性的访问控制结构,目的是让Linux系统更为安全。**
安全拓展的linux ,保护增强的linux,工作在linux内核中

DAC

在传统的Linux权限中,使用的是自由访问控制(Discretionary Access Control)机制。
在DAC机制中,使用所有者加权限的方式控制用户或进程对文件的访问,其带来的问题是自主性太强,即资源的安全性在很大程度上取决于所有者的意志。
DAC机制中还有一种特殊的权限SUID、SGID和Sticky
SGID允许二进制文件运行的时候拥有文件所有者相应的权限

MAC

强制访问控制(Mandatory Access Control)
MAC最早用于军事用途,可以大幅度提高安全性。
在MAC机制中,系统将强制主体(主体通常是用户或由用户发起的进程等)服从访问控制策略。
具体方法是为主体和客体(客体是信息的载体或从其他主体或客体接收的信息实体,可以简单理解为要访问的资源)添加一个安全标记,且用户发起的进程无法修改自身和客体的安全标记。系统通过比较主体和客体的安全标记来判断主体是否能访问其要操作的客体。

seliunx实际上就是MAC理论最重要的实现之一,selinux从架构上允许MAC和DAC两种机制都可以发挥作用,通过两种机制共同过滤达到更佳的访问控制效果。

LSM

LSM(Linux Security Module Linux安全模块)是一种轻量级的访问控制框架,最大的特点是允许其他安全模型以内核模块的形式加载到内核中。
selinux就是通过模块的方式加载到内核中的。
image.png
LSM架构中,用户的访问通过一系列内核操作进行,selinux模块将在LSM钩子中加载。如果返回允许访问的话,则内核将返回数据,否则,将会被直接拒绝。

selinux架构

selinux架构实际上反映了Flask架构。Flask架构是一个庞大而复杂的结构,包括三个重要组件:访问向量缓存、安全服务器和客体管理器。

image.png
在实际决策的时候,策略强制服务负责将要访问的主客体上下文发送给负责做决策的安全服务器,接下来就进入权限检测流程。
在权限检测过程中,首先会检查访问向量缓存(Access Vector Cache,AVC),在AVC中通常会缓存有主客体的权限。如果在AVC存在策略决策就会返回策略强制服务,如果没有策略决策,就会转向安全服务器。安全服务器会根据预设的规则做出决策,并将决策返回策略强制服务,同时将决策放到AVC缓存起来。
在最后的判断中,如果最终决策允许访问,则主体可以完成对客体的操作,如果拒绝访问,则会将记录写入日志中。

ps:通常selinx选择关闭
**

相关的配置文件和命令

相关的文件

/etc/selinux/config ,/etc/sysconfig/selinux 主要用于打开和关闭selinux
/etc/selinux/targeted/contexts:主要用于对contexts的配置。contexts是SElinux实现安全访问的重要功能
/etc/selinux/targeted/policy selinux策略文件

  1. - SELINUX=enforcing |permissive |disabled 需要重启才会生效
  2. - 从配置文件修改selinux的状态,会永久生效
[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.    # 关闭的时候修改此处为disabled
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

selinux的状态

  • enforcing 强制模式,表示在selinux中所有违法预设规则的操作都将被拒绝
  • permissive 宽容模式,表示在selinux中不会拒绝违反预设规则的操作,但会被记录到日志中
  • disabled 关闭

    相关命令

    getenforce :获取selinux当前状态
    setenforce 0 | 1: 设置当前selinux状态
    0:设置为permissive
    1:设置为enforcing
    ps:此设定,重启后无效
    sestatus 查看selinux运行状态

    selinux的安全上下文

    selinux contents通常称为安全上下文,主要用来控制进程对文件的访问
    在运行selinux的系统上所有的进程和文件都被标记上安全有关的信息,就是安全上下文
    查看用户、进程、文件的命令都有 “-Z”选项
    #查看当前用户的上下文
    id -Z
    #查看文件的上下文
    ls -Zl
    #查看进程的上下文
    ps -Z
    
    系统安装的时候,selinux会为系统中每个文件打上安全上下文。可以用semanage查看系统默认使用的上下文 ``` [root@lhuan ~]# semanage fcontext -l | head -20 SELinux fcontext type Context

/. all files system_u:object_r:default_t:s0 /[^/]+ regular file system_u:object_r:etc_runtime_t:s0 /a?quota.(user|group) regular file system_u:object_r:quota_db_t:s0 /nsr(/.)? all files system_u:object_r:var_t:s0 /sys(/.)? all files system_u:object_r:sysfs_t:s0 /xen(/.)? all files system_u:object_r:xen_image_t:s0 /mnt(/[^/])? directory system_u:object_r:mnt_t:s0 /mnt(/[^/])? symbolic link system_u:object_r:mnt_t:s0 /bin/. all files system_u:object_r:bin_t:s0 /dev/. all files system_u:object_r:device_t:s0 /run/. all files system_u:object_r:var_run_t:s0 /var/. all files system_u:object_r:var_t:s0 /tmp/. all files <> /usr/. all files system_u:object_r:usr_t:s0 /srv/. all files system_u:object_r:var_t:s0 /opt/. all files system_u:object_r:usr_t:s0 /etc/. all files system_u:object_r:etc_t:s0 /lib/. all files system_u:object_r:lib_t:s0 IOError: [Errno 32] Broken pipe

<a name="x31Mg"></a>
### chcon命令<br />
 chcon命令用于修改文件的上下文。

[root@localhost ~]# chcon —help Usage: chcon [OPTION]… CONTEXT FILE… or: chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE… or: chcon [OPTION]… —reference=RFILE FILE… Change the SELinux security context of each FILE to CONTEXT. With —reference, change the security context of each FILE to that of RFILE.

Mandatory arguments to long options are mandatory for short options too. —dereference affect the referent of each symbolic link (this is the default), rather than the symbolic link itself

使用规则:

      -  -h, --no-dereference   affect symbolic links instead of any referenced file  
      - -u, --user=USER        set user USER in the target security context
      - -r, --role=ROLE        set role ROLE in the target security context
      - -t, --type=TYPE        set type TYPE in the target security context
      - -l, --range=RANGE      set range RANGE in the target security context
      - -R :递归打标签

chcon -t httpd_cache_t acc ls -zl acc

<a name="crva9"></a>
### restorecon
restorecon会自动查询该文件应该具备的安全上下文,然后恢复文件的安全上下文

restorecon -v acc ls -zl acc

<a name="RcJs3"></a>
## selinux管理布尔值
selinux管理布尔值用来实现对网络服务的访问控制。<br />管理布尔值是一个针对服务的访问策略。针对不同的网络服务,管理布尔值为其设置了一个开关,用于精确地对服务的某个选项进行保护。

查看系统中所有管理布尔值设置

getsebool -a :获取所有

修改某个挂你布尔值的设置

[root@localhost ~]# setsebool abrt_aron_write=on ```

故障排查

1.利用日志进行故障排查

在selinux运行过程中,如果发生了拒绝时间,事件会被setroubleshoot工具捕获,并生成一条日志保存在/var/log/messages,日志中含有事件的说明、解决方法等内容

2.宽容模式

selinux的特殊模式:宽容模式。
selinux不会拒绝主体的请求,但同样会产生日志。
宽容模式通常用在调试软件的过程中,额可以减少故障点的检测。