SELinux 是 Security Enhanced Linux 缩写,采用委任式存取控制,是在进行程序、文件等细节权限设置依据的一个核心模块
当程序要操作文件时,系统根据程序的Owner/Group,对比文件的权限,若通过权限检查,则可操作文件,但可能造成问题:
也即是SELinux所采用的方式,可针对特定程序与特定文件来进行权限的控制
主要组成部分为Subject、Object、Policy和security context
Subject即是要管理的程序,Object即是要操作的文件系统,Policy为基本的存取安全性策略,分别为
Subject与Object的security context要一致才能顺序存取,其分为3个部分
Ubuntu不自带SELinux,需要自行安装
systemctl stop apparmor
apt purge apparmor
apt update && sudo apt upgrade -yuf
apt install policycoreutils selinux-utils selinux-basics
命令 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
在Policy为targeted时,Subject和Object是否具有读写权限,最重要的是security context的Type
如上,可用命令 ps -eZ 和 ls -Z 查看程序和文件的security context
并非所有程序都会被SELinux限制,Type为unconfined_t的程序可直接判断rwx
命令 getsebool 可查询SELinux的规则开启与否,-a列出所有
命令 setsebool 可打开/关闭SELinux规则,-P 将设置同时写入文件
命令 seinfo 可查询规则信息,–all列出所有信息,-u仅列出user,-r仅列出role,-t仅列出type,-b仅列出规则布尔值
如上列出统计信息,如下加上-u和-r 列出所有Identity 和Role
命令 sesearch 可查询domain可存取的Type,-A列出后面资料中允许存取的相关资料,-s指定domain,-t指定Type,-b指定规则
如上查询crond_t,可查到 system_cron_spool_t 的dir和file
命令 chcon 手动修改security context,-R目录递归修改,-t 指定type,-u指定role,-v显示变更结果,–reference=file 根据某个文件为模板进行修改
命令 restorecon 可让文件恢复正确的type,-R递归修改,-v显示修改过程
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恢复