被SElinux坑的一点收获
in 各种姿势 with 0 comment

被SElinux坑的一点收获

in 各种姿势 with 0 comment

坑点

之前在实验文件守护脚本的时候,用的阿里云Centos镜像装了虚拟机。后来发现CMS一直装不上去,每次在验证权限的时候都一直显示没有写入权限,在用Chmod修改权限以及更改了用户组之后依然显示没有写入权限。后来我直接改掉了CMS的安装代码饶过权限检测,发现文件确实是写不进去的。

后来在论坛中找到一条命令:

chcon -R -t httpd_sys_rw_content_t 路径

发现写进去之后确实好使,有了写入权限。当时因为急着测试脚本,就没有深究为什么。后来打比赛的时候,@hebic又被坑了一次,vsftp一直弄不好,最近参看关于SElinux的时候才知道和vsftp也有些冲突。所以来了解一下。

SElinux

SElinux是一个基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,总之就是一个访问控制体系,集成在了Linux的系统内核中。

SELinux对系统用户(system users)是透明的,只有系统管理员才能在系统中对策略进行修改,有着比较高的安全性,但是因为与很多常用软件有冲突,如vsftp、LAMP等,所以为了避免踩坑,很多人喜欢关掉它。

关掉方法:

  1. 修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启。
  2. setenforce 0临时关闭。

chcon

chcon命令是用来修改文件的安全上下文的,比如:用户、角色、类型、安全级别。

chcon [选项]... 环境 文件... 
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件... 
chcon [选项]... --reference=参考文件 文件...

-h, --no-dereference:影响符号连接而非引用的文件。 
    --reference=参考文件:使用指定参考文件的安全环境,而非指定值。 
-R, --recursive:递归处理所有的文件及子目录。 
-v, --verbose:为处理的所有文件显示诊断信息。 
-u, --user=用户:设置指定用户的目标安全环境。 
-r, --role=角色:设置指定角色的目标安全环境。 
-t, --type=类型:设置指定类型的目标安全环境。 
-l, --range=范围:设置指定范围的目标安全环境。

一个文件在创建的时候会带上当前目录的安全上下文,所以在根目录的创建的文件放到Web目录是没办法从外网访问的(真坑。。。)

查看文件夹下文件的安全上下文的命令:

ls -Z

一点小实验

由于如何具体设置各个用户的安全上下文现在还不太懂,所以偷懒直接在根目录建了个test.txt,放到Web目录下,从图片可以看到安全上下文的区别.

1

ls -l这些文件基本看不出什么区别.

2

测试的时候写了一个远程命令执行的漏洞:

<?php
    $a = $_POST['cmd'];
    system($a)
?>

然后测试,直接访问test.txt会显示Forbidden,用远程命令执行无论是直接cat 还是带外信道的方法都会返回空。修改403 Forbidden之后,部署了这个防御的情况下攻击者甚至无法判断这个文件是否真的是空(真能坑人)。

最后说一下,如果真的有命令执行的话,以Web用户执行ls -Z是可以看到用户安全上下文的,但是只能看到有权限查看的文件的安全上下文(和ls -l的回显同理)。

Responses