【Linux】DAC、MAC和SElinux基本了解

参考文章:
1. 一文彻底明白linux中的selinux到底是什么 - 知乎 (zhihu.com)


一、DAC

在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行),只要访问这个资源的进程符合以上的条件就可以被访问。

而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。

这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

二、MAC

在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,

还需要判断每一类进程是否拥有对某一类资源的访问权限

这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。

这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。

MAC 分类:类别安全模式(MCS)、多级安全模式(MLS)

Q:DAC和MAC区别

A:在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。

三、SElinux

3.1 基本概念介绍等

1.简述

Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块(所以改了配置文件,要重启才可以生效),也是 Linux 的一个安全子系统

SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)

2.相关概念

(1)主体subject

可以完全等同于进程

(2)对象object

被主体访问的资源。可以是文件、目录、端口、设备等。

(3)政策和规则policy & rule

系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。

而哪些进程需要管制、要怎么管制是由政策决定的。

一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。

规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。

(4)安全上下文(Security Context)

安全上下文是 SELinux 的核心。

安全上下文把它分为「进程安全上下文」和「文件安全上下文」。

一个「进程安全上下文」一般对应多个「文件安全上下文」。

只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。

文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。

需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

安全上下文的结构及含义

安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。

3.关于政策(或者称策略)

(1)targeted

对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。

(2)minimum

以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。

(3)ukmls

多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。

(4)ukmcs

后续补充!!!

4.SElinux模式

(1)disabled

关闭 SELinux。

(2)permissive

宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。

(3)enforcing

强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。

ps: enforcing和permissive可以快速切换,setenforce=0/1即可,重启失效

5.SElinux配置文件

在配置文件中,可以设置安全模式和策略
下述为 /etc/selinux/config 的大致内容(版本间可能存在区别)

[root@localhost home]# 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=disabled
#SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     ukmls - Multi Level Security protection.
#     ukmcs -ukmcs variants of the SELinux policy.
#SELINUXTYPE=targeted
SELINUXTYPE=targeted

# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0

3.2 SElinux的使用

(1)查询文件或目录的安全上下文

# 查看/etc/hosts的安全上下文
ls -Z /etc/hosts

[root@localhost ~]# ls -Z /etc/hosts 
system_u:object_r:net_conf_t:s0 /etc/hosts

(2)手动修改文件或目录的安全上下文

# 修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0 
chcon -u aaa_u -r bbb_r -t ccc_t test

# 把文件.目录的安全上下文恢复到默认值 restorecon
restorecon -R /usr/share/nginx/html/
[secadm@localhost ~]$ chcon --help
用法:  chcon [选项]... 上下文 文件...
 或:  chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
 或:  chcon [选项]... --reference=参考文件 文件...
将每个指定<文件>的安全上下文变更至指定<上下文>。
使用 --reference 选项时,把指定<文件>的安全上下文设置为与<参考文件>相同。

必选参数对长短选项同时适用。
      --dereference      影响每个符号链接的原始引用文件(这是默认行为),而非
                         符号链接本身
  -h, --no-dereference   只影响符号链接,而非被引用的任何文件
  -u, --user=用户        设置指定<用户>的目标安全上下文
  -r, --role=角色        设置指定<角色>的目标安全上下文
  -t, --type=类型        设置指定 <类型>的目标安全上下文
  -l, --range=范围      设置安全上下文的<级别>

      --no-preserve-root  不特殊对待“/”(默认行为)
      --preserve-root    不允许在“/”上递归操作
      --reference=参考文件  使用指定<参考文件>的安全上下文,而非指定<环境>值
  -R, --recursive        递归操作文件和目录
  -v, --verbose          为每个处理的文件输出诊断信息

以下选项是在指定了 -R 选项时被用于设置如何遍历目录结构体系。
如果您指定了多于一个选项,那么只有最后一个会生效。

  -H                     如果命令行参数是一个指向目录的符号链接,则对其
                         进行遍历
  -L                     遍历每一个遇到的指向目录的符号链接
  -P                     不遍历任何符号链接(默认)

      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/chcon>
或者在本地使用:info '(coreutils) chcon invocation'

(3)SElinux的日志

SELinux 违规日志保存在 /var/log/audit/audit.log 中

我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。

基本命令:sealert -a /var/log/audit/audit.log

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值