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恢复
今天的文章LInux基础——SELinux分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/8539.html