SELinux 应用实例
1. 实验介绍
1.1 实验内容
本节实验主要是对 SELinux 的策略和规则管理做进一步的深入与实践。通过案例的实际运用掌握 SELinux 的相关策略内容和规则管理的运用。
1.2 实验知识点
- SELinux 安全策略实例
1.3 推荐阅读
2. SELinux 安全策略实例
2.1 实例一
搭建一个 Web 服务器,其中 www 服务器默认网页存放位置是在 /var/www/html ,然后新建一个 index.html 测试页面,启动 www 服务器,刷新查看其内容,这时再在 /home 目录下建立一个 index.html 页面,然后将其移动到 /var/www/html 下,再次刷新页面,查看页面的变化。步骤如下:
- 首先,安装并启动 httpd 服务:
sudo yum install httpd -y
sudo service httpd start
- 然后打开浏览器,输入 127.0.0.1 进行访问,此时是 Apache 的测试界面:
- 查看 /var/www/html/ 目录下的状况
ll /var/www/html/
设置 SELinux 的运行模式为 Enforcing,使用如下命令(如已设置则不需修改):
$ sudo setenforce 1
- 在 /home 目录下新建一个 index.html 的页面,然后将其复制到 /var/www/html 目录下
$ cd /home
$ sudo vim index.html
$ cat index.html
$ sudo cp index.html /var/www/html/
$ cd /var/www/html/
$ ls
此时如果刷新浏览器页面,应该会跳转到 index.html 页面,但是事实发现,页面还是停留在这个测试页面,其中的原因就是和 SELinux 的安全策略有关系。
- 寻找错误信息,可以在 /var/log/audit 这个目录下查看 audit.log 这个文件。
$ sudo tail /var/log/audit/audit.log
从这个日志文件中,可以看到刷新页面不出来 index.html 的原因就是因为 SELinux 安全策略所导致的。
- 通过 ls -Z 命令先来看看 index.html 的上下文信息。
从输出信息可以发现第三个字段的类型是 home_root_t,因为在 /home 目录下创建的文件,会默认继承上一层目录的 SELinux 的类型信息,可以再查看一下 /home 这个目录的上下文信息:
$ ls -Z -d /home/
$ ls -Z -d /var/www/html/
发现 /var/www/html 这个目录的上下文类型是 httpd_sys_content_t, 而刚才移动过来的 index.html 的类型却是 home_root_t,因为此时的 SELinux 的工作模式是 Enforcing,所以对于违反策略的行动是被禁止的,所以刷新页面并不会出现 index.html 里面的信息。
常见的解决办法有两种:
直接将 SELinux 的工作模式设置成 disabled 或 permissive,这样就不会出现策略拦截问题了,但是这样的话系统就没有 SELinux 安全防护
- 通过 restorecon 或者 chcon 命令来修复文件上下文信息
命令 restorecon 可以用来恢复文件默认的上下文:
$ cd /var/www/html
$ sudo restorecon -R -v /var/www/html/index.html // -R 表示递归,如果是目录,则该目录下的所有子目录、文件都会得到修复
ls -Z
- 打开桌面上的 Firefox 浏览器访问主页
http://127.0.0.1
SELinux 安全示例操作视频:
2.2 示例二
启用 SELinux 策略和 httpd 服务,改变网站的默认目录为 /website,添加 SELinux 文件标签规则,使网站可访问。
- 新建目录 /website 并给其目录添加规则
sudo mkdir /website
ls -Z -d /website
- 修改配置主配置文件。
主要是将 DocumentRoot 对应的路径和 Direcotry 标签目录改为 /website。
sudo vim /etc/httpd/conf/httpd.conf
- 查看目录和目录下文件的 SELinux 上下文
sudo semange fcontext -l | grep '/var/www(/.*)?'
如果没有安装,则使用 sudo yum install -y policycoreutils-python 安装。
- 新建 index2.html 文件并写入 'this is the second index',然后移动到 /website 目录下。
sudo vim index2.html
sudo mv index2.html /website
- 参考目录的默认规则给 /website 及其下文件设置文件规则类型
sudo chcon -R --reference='/var/www/html/' /website/
ls -Z /website
- 启用 selinux 功能
sudo setenforce 1
- 重启 httpd 服务
service httpd restart
- 打开桌面上的 Firefox 浏览器访问主页
http://localhost/index2.html
- 此时访问之前创建的 index.html 页面,会出现 NOT Found。
因为此时我们已经修改了配置文件的路径以及标签目录。
SELinux 示例操作视频:
3. 总结
通过本节实验的学习,大家可以对 SELinux 策略与规则管理的学习有进一步的认识和理解,认识到 SELinux 作为一套强大的标签系统在安全系统中的重要性。