赞
踩
一、基本概念
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)查询主体的山下文和目标的上下文的类型是否匹配
四、实验
(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:只是单纯将原有文件移动过去 不改变文件本身的属性
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。