#################
selinux
#################
内核级加强型防火墙
要做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 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。 [1]
大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian或 Centos。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。SELinux提供了比传统的UNIX权限更好的访问控制。
* selinux的开关
> vim /etc/sysconfig/selinux
> SELINUX=enforcing ##selinux开启,级别为强制
> SELINUX=permissive ##selinux开启,级别为警告
> SELINUX=disabled ##selinux关闭,
> setenforce 0|1 ##更改selinux当前的级别0警告1标示强制
> getenforce ##查看selinux的状态
注意:当selinux从关到开,或者从开到关,需要重启系统
1.现在先看看在selinux开启和关闭的情况下对安全上下文的影响
在selinux开启的时候,可以看到当将一个文件移到/var/ftp/pub时,查看不到那个文件
当seliux关闭的时候,就可以看得到
其实yyh这个文件确实已经到pub底下了,只是安全上下文不匹配,它不显示
2.怎样解决安全上下文不一致的问题?
当selinux对文件有影响时,是因为文件上面的标签不一样
因此当selinux开启时在默认发布目录下就不能看到刚才mv的文件
因为/var/ftp/这个默认发布目录与mv进去的文件标签不一样
查看文件或者目录的标签:ls -Zd /var/ftp/
办法一:
#临时更改适用于更改文件
chcon -t 安全上下文 文件
chcon -t public_content_t 文件
将mv进去的文件的标签改成与发布目录一致的就可以了,但是chcon这个更改标签的方式是临时的,selinux重启之后就不会再生效
selinux这个插件被禁用又被启用
如下图所示,当我将aaa的标签改了之后,再将aaa移动到pub下,就可以看到了,因为安全上下文匹配成功了
办法二:
#永久更改文件安全上下文
semanage fcontext -l | grep /var/ftp
查看系统已经为默认发布目录设置的标签
semanage fcontext -a -t public_context_t '/ftpdir(/.*)?'
将自己建立的发布目录加上标签(目录里面的内容)
semanage fcontext -l | grep /ftpdir
这此查看就可以看到我们自己新建的ftp发布目录标签也是public了
restorecon -RvvF /ftpdir/ 对目标进行刷新
ls -Zd /ftpdir/
查看标签
不管selinux是开启还是关闭,永久设置都会生效
这个实验主要的目的就是永久将mv进去的由default改为public以及自己新建的默认发布目录改为public
3.使selinux设置为enforceing仍然可以上传文件
系统服务上设定sebool开关
getsebool -a | grep ftp 查看匿名用户的能力
sebool会限制服务的不安全功能,如果需要用此功能,必须调整sebool值
*selinux的bool值的设定
sebool值是控制服务功能开关
getsebool | grep 服务名称
setsebool -P bool值 on |off
getsebool | grep ftp
setsebool -P(永久设置) ftpd_anon_write 1(on)让匿名用户可以上传
chcon -t public_content _rw_t /var/ftp/pub/ 让匿名用户具有读写这个目录的权力(必须设置)
还要结合之前在配置文件里写的东西和给予pub的权限等,这样,即使在selinux为enforcing的情况下仍然能够上传文件
4.与selinux相关的两个日志
/var/log/messages 为系统日志,提供一些解决方案 ,需要安装服务才能提供解决方案
/var/audit/audit.log 为selinux真正的日志,不提供解决方案
yum search selinux
yum install setroubleshoot-server.x86_64 -y
当把setroubleshoot-server.x86_64 删除之后,假如出现报错,那么在/var/log/messages
下看不到任何解决方案,但是如果setroubleshoot-server.x86_64
存在的话,假如出现报错,那么在/var/log/messages下就会看到解决方案