RHCE第0章:RHCE开始前的准备
RHCE第1章:Web服务器(上)
RHCE第1章:Web服务器(下)
RHCE第2章:DNS服务
RHCE第3章:DHCP服务器
RHCE第4章:Firewall服务
RHCE第5章:SELinux
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
简单来说就是一个负责安全的操作系统,之前我们做实验都是关闭SELinux,在此之后我们的虚拟机都要打开SELinux
vim /etc/selinux/config
将其参数设置为enforcing,两台虚拟机都要修改。
然后reboot,打开selinux第一次重启需要打标,可能会慢一点。
确认selinux打开后,抓快照,以后的实验都在selinux打开的情况下做。
sestatus
这里简单说一下Current mode这个参数表示selnux的状态,我们可以用配置文件看以下
这个参数共有以上几种状态简单说一下啊。
enforcing 强制禁止,在你的计算机中有服务违反了相关安全策略,selinux会给你直接禁止。
permissive 警告代替禁止,在你的计算机中有服务违反了相关安全策略,selinux会给你通过,但是会给你发个警告信息,然后记录到日志里。
disabled 关闭 selinux安全策略关闭。
selinux还有第四中模式,这里没有,selinux的配置读取是在计算机启动时先加载到内核里,然后读取配置文件,我们可以通过修改内核直接阻止selinux加载到内核。
setenforce 0
ls -Z / #以根目录为例
结果会为每一个目录展示一段信息,每一段信息用三个:分成四个部分,我们主要看第三个部分,可以理解为文件类型。
现在我们在根目录下建立一个测试文件夹。
我们建的文件夹啊不属于任何系统类型,会变成default。
再举个例子,现在安装一个apache。
ls -Z /var/www/
红帽7开始的selinux就已经包含了所有服务,基本上计算机能安装的服务,他都有一个默认的类型。
我们在默认文件夹下建立一个测试也,查看他的类型,可以发现它默认继承了父文件夹的类型。
之前做apache实验有一种情况,当网页文件不在默认文件夹下时,可以通过修改配置文件或者软连接的方式访问,现在关闭selinux进行软连接测试。
过程不说了,不会的自己复习。
现在我们把selinux打开再次访问。
访问被拒绝。
这就是selinux的安全策略才拦截。
由于这个两个文件不在同一个文件夹下,所以继承了不同的文件类型,selinux认为软连接目标不是html的文件类型,这不安全,所以进行拦截。
知道了问题所在就要解决问题。
这里说三种修改方法。
chcon -R -t httpd_sys_content_t /chaogetest/
R递归所有文件
t 目标类型
最后加要修改的目录。
现在可以正常访问了,我们在把他改回去说第二种方法。
chcon -R -t default_t /chaogetest/
chcon -R --reference=/var/www/html/ /chaogetest/
–reference+参考目录
把目标目录按参考目录设置。
现在又通了。
在弄回去,现在说第三种方法。
前边两种都不是直接内核,或者说都是零时生效,所以官方并不推荐,仅作了解,官方推荐使用semange命令
semanage fcontext -a -t httpd_sys_content_t '/chaogetest(/.*)?'
fcontext 修改上下文
a 添加
httpd_sys_content_t 文件类型
‘/chaogetest(/.*)?’ 目标文件这里运用了正则表达式意思是/chaogetest以及目录下的所有文件
这条命令的意思是 为/chaogetest以及目录下的所有文件添加httpd_sys_content_t 为上下文类型,这个要等几秒,因为他要把信息写到内核里边。
restorecon -RFv /chaogetest/
我们再用restorecon 命令使目标文件夹从新变换类型,有点类似于重读配置文件。
现在又通了。
现在做一个多端口的apache的网页,前边不演示了,因为selinux打开,最后一步重启时会发生错误。
我们通过以下命令查看日志。
journalctl -xe
可以看到就是端口问题。
这是因为8899不是apache服务的常用端口selinux认为他不安全,所以我们需要命令添加端口上下文。并且他也直接给出了命令,就是我框住的地方。
semanage port -a -t PORT_TYPE -p tcp 8899,注意这里的PORT_TYPE 代指端口类型,不是实际的代码。
我们要先查看apache的端口类型。
semanage port -a -t PORT_TYPE -p tcp 8899
semanage port -a -t http_port_t -p tcp 8899
p 协议类型
再次查看可以看到我们需要的端口出现了。
此时apache服务就可以重新启动了。
单独说SElinux没什么意思,还是要结合具体服务具体分析,建议把防火墙和SELinux打开把前边的一些实验都做一下。