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