linux之内核级加强型火墙SElinux的管理,SElinux怎么排错?

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之内核级加强型火墙SElinux的管理,SElinux怎么排错?相关的知识,希望对你有一定的参考价值。

什么是SElinux?

SELinux:Security Enhanced Linux
是Linux内核子系统的一个健壮的强制控制访问Mandatory Access Control架构
SELinux主要是红帽Red Hat Linux以及它的衍生发行版上的一个工具
类似地, Ubuntu 和 SUSE(以及它们的衍生发行版)使用的是 AppArmor。
SELinux和AppArmor 有显著的不同。

SELinux工作过程简述:
当一个主体Subject(进程称为主体)尝试访问一个目标Object(所有可以读取的对象,包括文件、目录和进程、端口等),
SELinux安全服务器SELinux Security Server(在内核中)从策略数据库Policy Database中运行一个检查。
基于当前的模式mode,如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。
如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息。

SELinux 的三个模式(可以由用户设置):
Enforcing 强制:SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问。
Permissive 宽容:SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志。(相当于警告模式)
Disabled 禁用: 完全禁用SELinux。

SELinux策略有两种:
Targeted目标: 只有目标网络进程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保护
Strict严格: 对所有进程完全的SELinux保护
可以在/etc/selinux/config文件中修改策略类型。

参考文章:https://www.linuxprobe.com/selinux-introduction.html

SElinux对文件和程序的影响

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SELinux对于文件的影响:
当selinux开启时,内核会对每个文件及每个开启的程序进行标签加载
标签内记录程序和文件的安全上下文(context)

SELinux对于程序功能的影响:
当selinux开启会对程序(比如ftp)的功能(比如rw)加载开关,并设定此开关的状态为关闭
当需要此功能时需要root用户手动开启功能开关
此开关叫做sebool
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SElinux的开启、关闭、级别转换以及状态查看

修改配置文件开启关闭:

修改文件设定开启关闭:
vim /etc/selinux/config或者vim /etc/sysconfig/selinux,/etc/sysconfig/selinux是/etc/selinux/config的链接
在文件中编辑:
1. SELINUX=disabled 			selinux关闭
2. SELINUX=enforcing 			selinux开机设定为强制状态此状态为selinux开启
##不符合条件一定不能被允许,并会收到警告信息
##开启的状态下开机会很慢,因为开启时会给每一个文件加载一个安全上下文,加载完毕后会再次重启
3. SELINUX=permissive 			selinux开机设定为警告状态此状态为selinux开启
##不符合条件被允许,并会收到警告信息

!!!更改完退出保存后要重启主机reboot  !!!

在这里插入图片描述
在这里插入图片描述
查看状态及级别转换:

selinux开启后强制和警告级别的转换:
setenforce 0 			警告,即permissive 
setenforce 1 			强制,即enforcing

查看selinux状态:
getenforce

在这里插入图片描述

实验环境设定

最好用一台比较干净的虚拟机,确保实验顺利进行。
依次执行以下命令,关于ftp可点击看我之前的文章

vim /etc/selinux/config
把SELINUX=enforcing改为SELINUX=disabled
:wq退出保存
reboot

dnf install vsftpd lftp -y
systemctl enable --now vsftpd
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload

vim /etc/vsftpd/vsftpd.conf,在文件中做如图修改
在这里插入图片描述
重启ftpsystemctl restart vsftpd
给权限chmod 777 /var/ftp/pub
在这里插入图片描述
至此,实验环境设定完毕。

SElinux的安全上下文

1. 什么是安全上下文

传统Linux,一切皆文件,由用户,组,权限控制访问
在Selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问
所有文件和端口资源和进程都具备安全标签,即安全上下文(security context)
selinux为enforcing状态(开启状态)下,会给每一个文件、程序、进程加载安全上下文标签

安全上下文由五个元素组成:
user:role:type:sensitivity:category
 1	  2		3		4		 5
例如:user_u:object_r:tmp_t:s0:c0
实际上下文:存放在文件系统中
期望(默认)上下文:存放在二进制的SElinux策略库(映射目录和期望安全上下文)

五个安全元素:
1. User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程
2. Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r
3. Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务公用:public_conten_t
4. Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret,一个对象有且只要一个sensitivity,分0-15级,s0最低,Target策略默认使用s0
5. Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret,一个对象可以有多个catagroy,c0-c1-23共1024个分类,Target策略不适用category

2. 查看安全上下文

ls -Z 							查看文件的安全上下文
ls -Zd 							查看目录的安全上下文
ps axZ 							查看进程的安全上下文
semanage  fcontext  -l			查看期望(默认)上下文/内核安全上下文列表

在访问ftp服务的时候,selinux会查看程序的标签和文件的标签是否匹配
匹配会允许访问,不匹配不允许访问!

在selinux为disabled状态下,创建一个文件并且查看文件的安全上下文为“ ?”
在这里插入图片描述
把刚刚的文件移动到ftp目录下,匿名登录ftp,可以查看文件,也可以上传文件
在这里插入图片描述
在selinux为enforcing状态下,创建一个文件并且查看文件的安全上下文如图,把刚刚的文件移动到ftp目录下,匿名登录ftp,不可以查看文件,也不可以上传文件
##在mnt里创建的文件和ftp程序的标签不匹配,访问被selinux拒绝!
在这里插入图片描述

3. 修改安全上下文

  1. 临时修改
    chcon -t 标签 文件/目录
    chcon -t public_content_t /var/ftp/file3	将/var/ftp/file3的安全上下文改为公用的public_content_t
    chcon -Rt public_content_t /dir				修改目录及目录中的所有子文件的安全上下文
    此方式更改的安全上下文在selinux重启后会还原!!!
    ##如果有/.authrelabel文件selinux会在重启时重新初始化
    ##touch /.autorelabel ,重启系统时selinux初始化文件标签开关文件
    
    文件:
    在这里插入图片描述
    目录:
    在这里插入图片描述
  2. 永久修改安全上下文
    如果需要特殊指定安全上下文需要修改内核安全上下文列表
    semanage fcontext -l 										查看内核安全上下文列表
    
    semanage fcontext -a -t public_content_t '/dir(/.*)?'		将目录及目录里的内容的安全上下文标签写进安全上下文列表
    ##a表示增加,t指定标签
    ##dir是只更改目录本身的安全标签,dir(/.*)?目录和里边的内容都会改,必须用单引号括起来,双引号转义不了问号
    ##只是更改了安全上下文列表,需要对目录进行刷新
    
    restorecon -RvvF /dir/										只把标签添加进列表ls -Zd查看还没变,需要执行这个刷新才会变
    ##F表示刷新,vv表示显示超详细信息,R递归
    
    semanage fcontext -d -t public_content_t '/dir(/.*)?'		删除目录及目录里的内容的安全上下文标签
    
    touch /.autorelabel 										重启系统时selinux初始化文件标签开关文件
    
    在这里插入图片描述

SEBOOL的设定

bool值:比如TURE或者FALSE
getsebool -a 						服务的bool值
setsebool -P ftpd_anon_write on 	更改bool值,打开ftp的写权限
##P永久生效,on意为生效,1也可以

ftp默认访问的pub目录标签public_content_t是只读的,改成读写的public_content_rw_t
chcon -t public_content_rw_t /var/ftp/pub/
在这里插入图片描述
但此时ftp还是不能上传文件,因为匿名用户可写的bool值是off
在这里插入图片描述
修改bool值
在这里插入图片描述
再尝试上传,上传成功!
在这里插入图片描述

selinux排错、日志、对端口的控制

安装selinux排错工具,查看是否有rpm -qa | grep setrouble,如图就是有,没有的话dnf install setrouble -y安装
在这里插入图片描述
更改httpd配置文件vim /etc/httpd/conf/httpd.conf将端口改为8888
在这里插入图片描述
重启systemctl restart httpd失败
查看audit日志cat /var/log/audit/audit.log里边会记录报错信息
##重启失败是因为selinux的端口限制
在这里插入图片描述
查看messages日志,因为有setrouble工具,所以这里会有解决方案!
cat /var/log/messages
如图,告诉我们想解决就要执行画红线的命令!
在这里插入图片描述

selinux限制端口范围:
semanage port -l | grep http					查看http可以用哪些端口
semanage port -a -t http_port_t -p tcp 8888		把端口8888加进去

我们按照他的提示执行命令,注意不是直接执行提示里的命令,要把PORT_TYPE换成http_port_t !!!
在这里插入图片描述
重启成功,排错成功!

以上是关于linux之内核级加强型火墙SElinux的管理,SElinux怎么排错?的主要内容,如果未能解决你的问题,请参考以下文章

Unit9-内核级加强型火墙的管理

selinux初级管理

Linux的selinux的初级管理

linux之selinux

II 第十单元selinux的初级管理

运维学习之selinux初级管理