SElinux简介
SELinux是security-Enhanced Linux的缩写,意思是安全强化的linux
SELinux主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用。传统的访问控制在我们开启权限后,系统进程可以直接访问
当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞
在开启SElinux后
会对进程本身部署安全上下文
会对文件部署安全上下文
会对服务使用端口进行限制
会对程序本身的不安全功能做限制
selinux的工作原理
SElinux的工作方式
SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源
主体(subject):就是进程
目标(object):被主体访问的资源,可以是文件、目录、端口等。
策略(policy):由于进程与文件数量庞大,因此SELinux会依据某些服务来制定基本的访问安全策略
otargeted:针对网络服务限制较多,针对本机限制较少,是默认的策略;ostrict:完整的SELinux限制,限制方面较为严格。
SELinux的安全上下文
安全上下文(securitycontext):
主体能不能访问目标除策略指定外,主体与目标的安全上下文必须一致才能够顺利访问。
最终文件的成功访问还是与文件系统的rwx权限设置有关
安全上下文的查看
# ls -Z
进程安全上下文查看
# ps axZ | grep vsftpd
安全上下文用冒号分为四个字段:ldentify:role:type:
身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:root:表示root的账号身份;
systemU:表示程序方面的标识,通常就是进程;
unconfinedu:代表的是一般用户账号相关的身份。
角色(role):通过角色字段,可知这个数据是属于程序、文件资源还是代表用户。
一般角色有:objectr:代表的是文件或目录等文件资源; systemr:代表的是进程。
类型(type):在默认的targeted策略中,ldentify与role字段基本上是不重要的,重要的在于这个类型字段。而类型字段在文件与进程的定义不太相同。
分别是:type:在文件资源上面称为类型。 domain:在主体程序中则称为域
odomain需要与type搭配,则该程序才能够顺利读取文件资源。
代表灵敏度,一般用SO、S1、S2来命名,数字代表灵敏度的分级。数值越大、灵敏度越高
对于SElinux的管理及优化
SElinux的工作模式SElinux有三种工作模式:
oenforcing:强制模式,开始限制domain/type.
opermissive:宽容模式,仅会有警告信息并不会实际限制domain/type的访问。
odisabled:关闭,SELinux并没有实际运行。
对于SElinux状态管理查看SElinux当前状态查看
# setsebool -P ftpd_full_access off
# getenforce 【查看工作模式,1 Enforcing强制模式,0 Permissive警告模式】
临时更改SElinux的工作模式
# setenforce (0/1) 【0表示警告模式(警告但可运行),1表示强制模式(不可运行)】
永久更改SElinux状态
在RHEL9之前的版本中通过文件来永久更改SElinux的状态
# viM/etc/se1inux/config
在RHEL9中需要通过修改内核启动参数来永久更改SElinux的状态
# grubby --update-kernel ALL --args selinux=1 —开
# grubby --update-kernel ALL --args selinux=0 —关
如何开启selinux
# grubby --update-kernel ALL --args selinux=1
# reboot
管理文件的安全上下文
# dnf install nginx -y 【下载】
# systemctl enable --now nginx 【开火墙】
# systemctl disable --now firewalld
# cd /usr/share/nginx/html/
# rm -fr index.html
# echo /mnt/index.html > /mnt/index.html 【输入内容】
# mv /mnt/index.html /usr/share/nginx/html/index.html 【移动文件】
# ls -Z /usr/share/nginx/html/ 运行结果:
临时更改文件的安全上下文
chcon [-R] [-t type] [-u user] [-r role] 文件
-R:连同该目录下的子目录也同时修改
-t:后面接安全上下文的类型字段
# chcon -Rt httpd_sys_content_t index.html
# ls -Z /usr/share/nginx/html/ 运行结果:
-U:后面接身份识别
-r:后面接角色
永久修改安全上下文
semanager fcontext [-a|-d] [-t type] [-s user] [-r range] 文件
-l:列出所有记录
-a:添加记录
-t:添加的类型
# semanage fcontext -a -t httpd_sys_content_t '/lee(/.*)?' 【添加文件】
# semanage fcontext -l | grep /lee 【查看安全上下文】
# restorecon -RvvF /lee/ 【刷新安全上下文】
# ls -Zd /lee 查看结果:
-M:修改记录
-d:删除记录
-P:指定添加的端口是tcp或udp协议的,port子命令下使用
-e:目标路径参考原路径的上下文类型,fcontext子命令下使用
-S:后面接身份识别
-r:后面接角色
服务的端口影响
在系统SElinux开启后会规定服务使用端口
查看服务被允许使用的端口
# semanage port -l | grep ssh
根据需求更改被允许使用的端口
# semanage port -a -t ssh_port_t -p tcp 6666 【更改端口】
# semanage port -l | grep ssh
selinux对linux服务的影响
服务的功能影响
在系统SElinux开启后会为服务添加新的功能开关,我们把这个开关叫做sebool
临时修改bool值
# getsebool -a | grep http 【查看sebool值】
# setsebool httpd_anon_write 1 【修改sebool值】
# getsebool -a | grep http 查看结果:
重启# reboot后查看结果:
永久修改
# setsebool -P httpd_anon_write off
查看结果: