linux之内核级加强型火墙SElinux的管理,SElinux怎么排错?
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之内核级加强型火墙SElinux的管理,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. 修改安全上下文
- 临时修改
文件: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初始化文件标签开关文件
目录:
- 永久修改安全上下文
如果需要特殊指定安全上下文需要修改内核安全上下文列表 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怎么排错?的主要内容,如果未能解决你的问题,请参考以下文章