LInux基础——SELinux

SELinux是什么?

SELinux 是 Security Enhanced Linux 缩写,采用委任式存取控制,是在进行程序、文件等细节权限设置依据的一个核心模块

存取控制

自主式(DAC)

当程序要操作文件时,系统根据程序的Owner/Group,对比文件的权限,若通过权限检查,则可操作文件,但可能造成问题:

  • root 具有最高权限,若某程序属于root,则该程序可操作系统的任何文件
  • 使用者可利用程序来变更文件的权限

委任式(MAC)

也即是SELinux所采用的方式,可针对特定程序与特定文件来进行权限的控制

  • 即使是root,在使用不同程序时所取到的权限也不一定是root,而是根据该程序的设定
  • 程序也不能任意使用系统文件,因为每个文件也有针对该程序可用的权限设定

SELinux组成

主要组成部分为Subject、Object、Policy和security context

Subject即是要管理的程序,Object即是要操作的文件系统,Policy为基本的存取安全性策略,分别为

  • targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策
  • minimum:由target修改而来,仅针对选择的程序来保护
  • mls:完整的权限限制,限制方面较为严格

Subject与Object的security context要一致才能顺序存取,其分为3个部分

  • Identity:unconfined_u 表示文件来自不受限程序产生,system_u 表示文件由系统产生
  • Role:object_r 表示文件,system_r 表示程序或一般使用者,unconfined_r 表示不受限角色
  • Type:在Subject则称为domain,在Object中称为Type,两者需一致

SELinux安装

Ubuntu不自带SELinux,需要自行安装

systemctl stop apparmor
apt purge apparmor
apt update && sudo apt upgrade -yuf
apt install policycoreutils selinux-utils selinux-basics

SELinux开关及模式

  • enforcing:强制模式,表示SELinux运行中,且正在限制domain/type
  • permissive:宽容模式,表示SELinux运行中,但仅有警告信息并未限制domain/type,多用于debug
  • disabled:关闭

命令 getenforce 可获取SELinux的模式,上面安装完后,默认为disabled

在这里插入图片描述

命令 setenforce设置SELinux模式,0为permissive,1为enforcing,但实际上只能在开机状态下切换enforcing和permissive,而不能从disabled直接切换为enforcing或permissive,反之也不行

在这里插入图片描述

故想要打开SELinux,需通过vi将 /etc/selinux/config 的SELIUNX=disabled改为permissive或enforcing

vi /etc/selinux/config

这里需要注意的是,enforcing模式可能会导致无法开机(根据鸟哥的解决方法,需转回permissive下运行restorecon -Rv / 才能转为enforcing,但实际操作还是不行),若出现这种情况,则要在开机时下狂按esc进入GRUB选择界面,如下

在这里插入图片描述

再按e编辑命令,找到selinux,将其改为0,如果没有自行在该行添加,按Ctrl + x 保存并启动,启动完后还是乖乖改为permissive

在这里插入图片描述

命令 sestatus 可查看SELinux的相关信息,如挂载点和Policy

在这里插入图片描述

SELinux运行原理

在Policy为targeted时,Subject和Object是否具有读写权限,最重要的是security context的Type

在这里插入图片描述

如上,可用命令 ps -eZ 和 ls -Z 查看程序和文件的security context

  • 调用一个二进制文件 /usr/sbin/cron,其Type为crond_exec_t
  • crond_exec_t 会让该文件生成的程序(Subject)具有crond这个domain
  • Policy已针对这个domain制定了许多规则,包括这个domain可读取的Object类型
  • 根据Policy可知,crond 可读取 system_cron_spool_t 这个类型的文件(Object),所以将文件放到/etc/cron.d即可被crond程序读取
  • 但最终能否读到,还得看rwx是否符合linux权限

并非所有程序都会被SELinux限制,Type为unconfined_t的程序可直接判断rwx

在这里插入图片描述

SELinux Policy规则

getsebool

命令 getsebool 可查询SELinux的规则开启与否,-a列出所有

在这里插入图片描述

setsebool

命令 setsebool 可打开/关闭SELinux规则,-P 将设置同时写入文件
在这里插入图片描述

seinfo

命令 seinfo 可查询规则信息,–all列出所有信息,-u仅列出user,-r仅列出role,-t仅列出type,-b仅列出规则布尔值

在这里插入图片描述

如上列出统计信息,如下加上-u和-r 列出所有Identity 和Role

在这里插入图片描述

sesearch

命令 sesearch 可查询domain可存取的Type,-A列出后面资料中允许存取的相关资料,-s指定domain,-t指定Type,-b指定规则

在这里插入图片描述

如上查询crond_t,可查到 system_cron_spool_t 的dir和file

修改security context

chcon

命令 chcon 手动修改security context,-R目录递归修改,-t 指定type,-u指定role,-v显示变更结果,–reference=file 根据某个文件为模板进行修改

在这里插入图片描述

restorecon

命令 restorecon 可让文件恢复正确的type,-R递归修改,-v显示修改过程

在这里插入图片描述

semanage

restorecon 能够恢复文件的type,说明有地方记录着每个文件的默认type,而命令 semanage 就是用于操作默认type,-l查询,-a增加,-m修改,-d删除,fcontext表示用于security context

semanage fcontext -l | grep -E '^/etc | ^/etc/cron'

如上查看 /etc 和 /etc/cron的默认type(命令不知道为什么报错/var/lib/selinux/deault/active/policy.kern未找到)

semanage fcontext -a -t system_cron_spool_t "space(/.*)?"
restorecon -Rv space
ls -Z space

如上将 space目录下文件的type预设为system_cron_spool_t,然后通过restorecon恢复

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值