Linux基础命令(二十三)Selinux

一、基本概念

   1.1)回顾

         程序被触发的时候,会将它定义为进程,并给予一个这个进程一个PID,同时根据触发这个进程的用户和相关属性关系,系统给予这个PID一组有效的权限设置,这个PID能够在系统上执行的操作就与这个PID的权限有关!

         核心:所有的系统资源都是通过进程来读写的!

  1.2)SElinux

        Security Enhanced Linux -->安全强化的linux,是一个嵌到内核中的模块,在进行进程、文件等详细权限配置时依据的内核模块,用于针对进程系统资源的访问加强安全防护。以网络服务来说,启动网络服务也是进程,SELinx便可以控制网络服务是否能访问系统资源

        自己的理解:如果管理员不小心设置错误,开启selinux功能会加强某些特殊权限的控制

  1.3)DAC

    自主访问权限(Discretionary Access Control),依据进程的拥有者和用户组文件资源的rwx权限来决定有无读写的权限!

    明确一点:各种权限设置对root无效,如果某个进程被有心人获取,而该进程属于root权限,这个进程就可以操作任何的资源

    目前防火墙的趋势:国内硬件级防火墙,国外软件级的防火墙!

    说明:selinux的状态如果是disabled,就是传统DAC!

  1.4)MAC

    强制访问控制(Mandatory Access Control),改变控制主体,利用策略安全上下文的匹配控制进程对文件资源的访问!

    核心控制的主体变成了进程而不是用户;举例,即使你是root用户来触发程序,产生进程,获取的权限也不一定是root,而要根据当时该进程的设置而定,此外主体进程能不能使用系统文件资源,要看该文件资源针对该主体进程的设置!

    两种模式的对比

  1.5)为什么会用SElinux

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

二、核心概念

         策略(Policy)

         由于进程与文件数量庞大,因此SELinux会依据某些服务来制定基本的访问安全性策略。这些策略内还会有详细的规则(rule)来指定不同的服务开放某些资源的访问与否。目前RHEL7里面提供三种策略,分别是:

targeted:针对网络服务限制较多,针对本机限制少,是默认策略(掌握对网络服务的限制)

minimum:由target修订下来,仅针对选择的程序来保护

mls:完整的SELinux限制,限制方面较为严格(这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求)

         安全上下文(security context)

        主体能不能访问目标除了策略指定之外,主体目标安全上下文必须一致才能顺利访问,这个安全上下文有点类似文件系统中的rwx,安全上下文设置错误,某些服务就无法访问文件系统(目标资源)。

                                                                                   SELinux运行的各组件相关性

         后续:如何查看主体和目标的安全上下文?

三、安全上下文

      说明:必须启动selinux,才能查看安全上下文,否则看到的是

      环境的配置:仍然以vsftp为说明

vim /etc/sysconfig/selinux   #修改为enforcing,或者/etc/sysconfig/selinux

reboot

       注意:如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文,重启时间比较慢,不要以为死机了!

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

      

         一个进程安全上下文一般对应多个文件安全上下文,只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由策略中的规则决定。文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。

        id -Z 显示了你的shell的安全上下文

        分析安全上下文字段的含义

        安全上下文用(Security context):分为三个字段

Identify:Role:Type

#身份标识:角色:类型

#说明:默认以:分割开来

        身份标识(Identity)

        相当于账号身份识别(user),主要有以下常见的类型

unconfined_u:不受限制的用户,该文件来自于不首限的进程,大部分是用户通过bash创建的文件;

system_u:系统用户,大部分是系统自己产生的文件。

场景

基本上系统或者软件本身所提供的文件,大多数是system_u这个身份名称;

bash自己建立的文件大多数是不受限的unconfined_u身份,从网络上下载的文件大多数是unconfined_u身份标识;

如果是网络服务所产生的文件或是系统运行过程中产生的文件,则大部分的识别就是system_u

       角色(Role)

       通过角色字段,我们可以知道这个数据是属于程序、文件资源还是代表用户。常见的角色有:

object_r:代表的是文件或目录等文件资源;

system_r:代表的是进程,一般用户也会被指定成system_r

      类型(Type最重要)

      基本上,一个主体进程能不能读取到这个目标文件资源与类型字段有关。类型字段文件进程的定义不大相同:

type:在文件资源(Object)上面称为类型(Type);

domain:在主体程序(Subject)中则称为域(domain)

说明:domain需要与type搭配,则该程序才能够顺利读取文件资源。

说明:主体与目标之间是否具有可以读写的权限,与进程的domain及文件的type有关,以vsftpd作为讲解

明确:vsftpd服务的自动开启,实际上是/usr/sbin/vsftpd命令(二进制的文件)在执行!

1)触发一个可执行的目标文件,即具有ftpd_exec_t这个类型的/usr/sbin/vsftpd文件;

2)该文件的类型会让这个文件所造成的主体进程(ps -Z)具有ftpd_t这个域,针对这个域,target策略指定了许多规则,包括这个域可以读取的目标文件的类型(上下文)

3)由于target策略中的一条规则指定了ftpd_t这个(进程)域可以读取etc_t这个类型的目标文件,因此配置文件放到/etc/vsftpd/目录下,能够被vsftpd这个进程所读取

4)最终能不能读取数据,还是要看rwx是否符合LInux权限的规范(DAC)

crond、httpd类同

需求1:查看系统中指定进程的SELinux的上下文

ps -eZ |grep vsftpd

需求2:查看selinux对某些服务的策略规则

yum search sesearch                #说明:通过命令来查找相应的安装包!
  
yum install setools-console.x86_64 #安装软件

#################################

     (1)查看针对指定服务所有规则的名称

seinfo 是 SELinux 策略的查询工具

补充:getsebool -a |grep ftp 也是查看策略的工具

    (2)通过规则名字,查看规则具体内容

sesearch [选项] [规则类型] [表达式]

规则类型:

    --allow:显示允许的规则
    --neverallow:显示从不允许的规则
    --all:显示所有的规则;

表达式:

 -s 主体类型:显示和指定主体的类型相关的规则(主体是访问的发起者,这个s是source的意思,也就是源类型);
 -t 目标类型:显示和指定目标的类型相关的规则(目标是被访问者,这个t是target 的意思,也就是目标类型);
 -b 规则名:显示规则的具体内容(b是bool,也就是布尔值的意思,这里是指规则名);

    (3)查询主体的山下文和目标的上下文的类型是否匹配

查看selinux对某些服务的策略规则

不错

四、实验

(1)匿名用户登陆的问题

思考

(1)通过-Z 查看上下文的参数,发现/mnt/file的类型和/var/ftp/file不一致,为什么?

(2)通过mv发现/var/ftp/file和/var/ftp/file1的类型不一样,匿名用户登陆看到的内容也不一样,为什么?

(3)通过setenforce 0 临时设置selinux的状态,为什么匿名用户登陆可以看到/var/ftp/file1,为什么?

(4)cat /var/log/messages 有关于ftp的解决方案,为什么?

    (2)本地用户登陆的问题

说明:selinux的状态影响了本地用户的上传和下载的功能

setenforce 0 表示临时将selinux的状态临时设置成Permissive,看服务的功能是不是由于SENLinux的开启所导致,排错!

需求1:想在selinux开启的状态下进行本地用户的上传和下载

getsebool -a |grep ftp                   #查看ftp的某些功能是否被selinux禁止!

setsebool -P ftp_home_dir on|1  #将修改写进内核中的selinux中,永久开启ftp的某些功能(Permanent),会持续等待一会!

说明:最好查看是否设置成功!

需求2:改变文件的上下文类型,让vsftpd进程可以访问到

策略:临时生效

需求3:改变匿名用户的家目录,查看文件

说明:注意此步的完成建立在,上面已经设置了允许进入家目录!

说明1:两次的reboot中的selinux不同,selinux为disabled表示默认,selinux为enforcing是会对文件重新建立上下文类型!

说明2:chcon(change context)是临时生效!

需求4永久改变上下文类型

(1)使用正则表达式去指定一个范围(/.*)?,表示当前目录、目录里面的内容、以及未来添加的内容(需要重启或再执行一次)!

semanger fcontext -a -t 上下文的类型  "目录(/.*)?" #不会及时生效

-l:查询(list)
-a:增加(add),你可以增加一些目录的默认安全上下文类型设置
-m:修改(modify)
-d:删除(delete)
-t:指定改变的上下文类型(type)

说明:由于有特殊字符,所以需要加上单引号或者双引号!

restorecon命令:用来恢复SELinux文件属性即恢复文件的安全上下文

-R/-r:递归处理目录

-v:将过程显示到屏幕上

semanage命令 是用来查询与修改SELinux默认目录的安全上下文

SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令

四、SENLinux的日志记录

yum install -y setroubleshoot-server.x86_64  #selinux排错日志必须安装软件,否则没有解决方案的提示

systemctl start auditd.service               #selinux的服务

cat /var/log/audit/audit.log                 #此服务对应的日志

cat /var/log/message                         #错误信息写入(解决方案)

说明:当selinux为enforcing,touch文件,然后mv 无法ls查看,setenforce 1(访问);查看/var/log/message日志

cp:会重新生成符合目录本身的安全上下文
mv:只是单纯将原有文件移动过去 不改变文件本身的属性

Linux之SElinux安全上下文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值