一、selinux的定义
1 SElinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
2 SElinux对系统的影响
SELinux插件开启时会为系统中开启的每一个程序和每一个文件加载一个标签,特定标签的程序只能读取或者操作特定标签的文件,如果标签不配套,该访问就会被禁止,这种在文件上的标签被称为 安全上下文,在程序上的标签为sebool
值
二、selinux的状态及其影响
1 selinux的状态
selinux的配置文件: /etc/sysconfig/selinux
状态 | 含义 |
---|---|
SELINUX=enforcing | selinux开启,级别为强制 |
SELINUX=permissive | selinux开启,级别为警告 |
SELINUX=disable | selinux关闭 |
注意:enforceing
与permissive
二者可以直接进行切换,但是二者与disable
(关闭selinux
)进行切换时要重启reboot
setenforce=0切换为警告模式
setenforce=1切换为强制模式
getenforce :查看selinux的状态
2 在selinux开启和关闭的情况下对安全上下文的影响
selinux对文件的影响: selinux给每个文件加标签
标签匹配才能被访问,每个程序安全上下文要匹配(在/var/ftp/
下看mv
过去的能不能看到)
selinux关闭的情况下:
selinux开启的情况:
当selinux对文件有影响时,是因为文件上面的标签不一样,因此当selinux开启时在默认发布目录下就不能看到刚才mv的文件,因为/var/ftp/这个默认发布目录与mv进去的文件标签不一样
三、解决安全上下文不一致问题
1 临时更改
临时更改适用于更该文件 chcon -t 安全上下文 文件
,selinux
重启之后就不会再生效
2 永久更改
注意:不管selinux
是开启还是关闭,永久设置都会生效
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/ 刷新
3 selinux设置为enforceing仍然可以上传文件
sebool
会限制服务的不安全功能,如果需要用此功能,必须调整sebool
值sebool
值是控制服务功能的开关
getsebool -a | grep ftp 查看匿名用户的能力
getsebool -P | grep 服务名称 查看指定服务布尔值
setsebool -P bool值 on |off 在这里on=1 off=0
在设置bool值之前使用本地用户无法上传文件,设置后可以上传
注意:bool值是selinux
给系统附加的一个开关,要实现功能必须保证功能本身是开启的,再设定bool值,功能才能正常使用
getsebool | grep ftp
setsebool -P(永久设置) ftpd_anon_write 1(on) 让匿名用户可以上传
chcon -t public_content _rw_t /var/ftp/pub/ 让匿名用户具有读写这个目录的权力(必须设置)
还要结合之前在配置文件里写的东西和给予pub的权限等,这样,即使在selinux为enforcing的情况下仍然能够上传文件
四、与selinux相关的两个日志
/var/log/messages 系统日志,提供解决方案,需要安装服务才能提供解决方案
/var/audit/audit.log为selinux真正的日志,不提供解决方案
五、selinux的排错
1 软件安装
1 | yum install setroubleshoot-server -y ##这个软件会提供解决策略
2 | cat /var/log/messages ##查看日志(日志中有解决策略)
setroubleshoot-server
侦听 /var/log/audit/audit.log
中的审核信息并将简短摘要发送至 /var/log/messages
/var/log/audit/audit.log
用于在该文件中生成所有事件的报告
2 测试
1 | touch /mnt/file
2 | mv /mnt/file /var/ftp/pub
3 | > /var/log/audit/audit.log ##清空该日志文件中的内容
4 | > /var/log/messages ##清空该日志文件中的内容
5 | lftp ip ##查看pub目录下的文件没有看到file
6 | cat /var/log/audit/audit.log ##可以看到查看mnt被拒绝的记录
7 | cat /var/log/messages ##可以看到解决策略
3 解决
1 | restorecon -v /var/ftp/pub/file
再进入lftp就可以看到file
注意:必须安装 setroubleshoot-server
软件包 , 才能将SELinux
消息发送至 /var/log/messages