linux下的selinux

本文通过实验环境,探讨了SELinux在Linux系统中的作用,特别是在lftp操作中的表现和安全上下文问题。介绍了如何解决因SELinux导致的文件上传问题,并详细说明了在不同用户权限下设置SELinux为enforcing模式时的处理方法。同时,文章提到了与SELinux相关的日志分析,以帮助读者更好地理解和应对SELinux带来的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是selinux?

selinux是一种控制服务安全,是内核上面的一个插件,也叫做内核加强型火墙
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统
NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件
SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到
SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统
对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的
SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念`

2.实验环境

步骤一:在真机里面reset并且开启server虚拟机
在这里插入图片描述
在这里插入图片描述
步骤二:给server虚拟机配置网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤三:给server虚拟机配置本地yum源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤四:下载ftp服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤五:查看selinux的状态
在这里插入图片描述

3.进行lftp的一些操作以及看清selinux的现象状态,然后知道selinux是什么?

selinux是内核上的插件,改完之后一定要重启才起作用
selinux对服务访问文件以及功能的影响
enforceing与permissive二者可以直接进行切换,但是二者与disable(关闭selinux)进行切换时要reboot
enforceing表示强制
permissive表示警告
disable表示关闭

看selinux关闭和开启对lftp的影响 lftp 172.25.254.111 ls put

selinux对文件的影响:
selinux给每个文件加标签 标签匹配才能被访问,每个程序安全上下文要匹配(在/var/ftp/下看mv过去的能不能看到)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

selinux对功能的影响:
在每不安全的功能上面加功能开关(默认关闭),安全性提高,0关闭,1开启(在/var/ftp/pub/能不能上传文件)
不是服务本身不允许一些东西,而是selinux不允许一些东西

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.怎样解决安全上下文不一致的问题?

当selinux对文件有影响时,是因为文件上面的标签不一样
因此当selinux开启时在默认发布目录下就不能看到刚才mv的文件
因为/var/ftp/这个默认发布目录与mv进去的文件标签不一样
查看文件或者目录的标签:ls -Zd /var/ftp/

在这里插入图片描述
在这里插入图片描述
解决办法一:

chcon -t public_content_t 文件 将mv进去的文件的标签改成与发布目录一致的就可以了
但是chcon这个更改标签的方式是临时的,selinux重启之后就不会再生效
selinux这个插件被禁用又被启用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:我们自己新建一个ftp的默认发布目录时,不能被识别
mkdir /ftpdir/
ls -Zd /ftpdir/ 发现我们自己新建的与默认的发布目录(安全上下文)标签不一样
touch /ftpdir/file{1..2}
vim /etc/vsftpd/vsftpd.conf 改ftp的默认发布目录 anon_root=/ftpdir/
systemctl restart vsftpd
reboot

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决办法二:

semanage fcontext -l | grep /var/ftp 查看系统已经为默认发布目录设置的标签

在这里插入图片描述

semanage fcontext -l | grep /ftpdir 发现我们自己新建的并没有这个标签

在这里插入图片描述

semanage fcontext -a -t public_context_t '/ftpdir(/.*)?' 将自己建立的发布目录加上标签(目录里面的内容)
semanage fcontext -l | grep /ftpdir 这此查看就可以看到我们自己新建的ftp发布目录标签也是public了
ls -Zd /ftpdir/
restorecon -RvvF /ftpdir/ 刷新
不管selinux是开启还是关闭,永久设置都会生效
结合/var/ftp/与/ftpdir/做实验
enforceing改称disable要重启,disable改称enforceing要重启 
永久设置的public标签,mv进去的文件还是不一致,需要用chcon改
永久设置的public标签,touch或者mkdir新建的就与目录的public一样
这个实验解决了两个问题:
将mv进去的由default改为public
将自己新建的默认发布目录改为public

5.使selinux设置为enforceing仍然可以上传文件

匿名用户:

chcon -t public_content _rw_t /var/ftp/pub/ 让匿名用户具有读写这个目录的权力(必须设置)
getsebool -a | grep ftp 查看ftp匿名用户能干的事情的状态为off还是on

在这里插入图片描述
在这里插入图片描述

setsebool -P(永久设置) ftpd_anon_write 1(on)让匿名用户可以上传

在这里插入图片描述

vim /etc/vsftpd/vsftpd.conf
设置匿名用户可以上传
systemctl restart vsftpd
chgrp ftp /var/ftp/pub/
chmod 775 /var/ftp/pub/
还要结合在配置文件里面改的方法,已经讲过
这个设置好之后匿名用户就可以在enforceing下进行上传和删除了

在这里插入图片描述
student用户:

getsebool -a | grep ftp(查看ftp状态)

在这里插入图片描述

setsebool -P ftp_home_dir on (将本地用户的家目录永久开启)
这个设置好之后本地用户就直接可以在enforceing下在自己的家目录下面上传和删除东西了

在这里插入图片描述
在这里插入图片描述

0=off 1=on
之前上传文件需要在disable状态下设置配置文件等等一些操作
现在直接在enforceing状态下设置也可以上传文件
注意:也要注意vsftpd版本与主机版本是否一致的问题
先在enforceing下不设置进行上传 再进行设置上传 看效果

6.与selinux相关的两个日志:

/var/log/messages 为系统日志,提供一些解决方案 ,需要安装服务才能提供解决方案
/var/audit/audit.log 为selinux真正的日志,不提供解决方案
yum search selinux 
yum install setroubleshoot-server.x86_64 -y

实验步骤
(1)有setroubleshoot这个软件服务时:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cd /mnt/
touch /mnt/westosfile
mv /mnt/westosfile /var/ftp/

在这里插入图片描述
> /var/log/messages
在这里插入图片描述

lftp 172.25.254.111
ls 查看并没有mv过来的东西

在这里插入图片描述

cat /var/log/messages 可以看到日志提供的解决办法 然后就能看到mv过去的了
restorecon -vR /var/ftp/ 刷新(-v不行)
ls -Z /var/ftp/ 查看标签是否一致(只有标签一致的时候才能看见mv过去的东西)
再次 lftp 172.25.254.111 ls查看就可以看到mv进去的东西了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ls -Z /var/ftp/ 查看标签是否一致
restorecon -vR /var/ftp/ 刷新 利用这个改标签

(2)没有setroubleshoot 时日志不提供解决办法:

yum search selinux
yum -qa | grep setroubleshoot
yum remove setroubleshoot-server.x86_64  -y
把上面的步骤再来一遍,就看不到messages日志提供的解决办法了
再把它安装好
yum install setroubleshoot-server.x86_64  -y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值