RHCSA-A3.配置调试SELinux

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCSA-A3.配置调试SELinux相关的知识,希望对你有一定的参考价值。

红帽RHCE考试上午-RHCSA(RH134)

servera.example.com 任务

3. 调试SELinux

  • 非标准端口82上运行的web服务器在提供内容时遇到问题,
  • 根据需要调试并解决问题,并使其满足这些条件
    注意:考试的时候全程开启SELinux,不能关闭SELinux

任务要求

  1. 系统上的Web 服务器能够提供/var/www/html 中所有现有的HTML 文件(注:不要删除或以其他方式改动现有的文件内容)
  2. Web 服务器在端口82 上提供此内容
  3. Web 服务器在系统启动时自动启动

注意事项

  • 考试时/var/www/html会有文件,做实验如果没有自己创建
echo a1 > file1
echo a2 > file2
echo a3 > file3
echo `hostname -I` > web.html

完成步骤

1.1 检查httpd服务状态,没装给装上
yum -y install httpd # 考试的时候已经安装好了的
1.2 进入网页目录中检查文件

  • 恢复SELinux文件属性即恢复文件的安全上下文
cd /var/www/html
ll -Z
restorecon -Rv /var/www/html/
  • 使用restorecon恢复权限以后,httpd就可以访问目录下的文件了
  1. web服务通过82端口访问
  • 更改httpd配置文件修改端口号
vim /etc/httpd/conf/httpd.conf
Listen 82 #修改监听端口为82
  • selinux上开放端口
    semanage port -a -t http_port_t -p tcp 82
  1. httpd服务开机启动
systemctl start httpd
systemctl enable httpd
  1. 检查文件是否可访问

curl http://servera:82/web.html

详情介绍

解决httpd服务问题

  1. 确认httpd是否已安装
    考试时默认是装好的,但服务是没有启动的
    systemctl status httpd
  2. 先确认httpd的端口号是否时82
  • 如果不是,修改配置文件改成82
    cat /etc/httpd/conf/httpd.conf | grep 82
  1. 查看semanager port
  • 82在semanager中是非标准端口
    semanage port --list | grep 82
  1. 尝试重启httpd服务
  • 重启服务发现报错
    systemctl restart httpd
  1. 通过系统日志朝朝错误原因
  • 报错没关系,我们去查看系统日志
    tail /var/log/messages
  1. 提取系统日之内配置命令和参数
  • 系统日志详细记述了httpd起不了的原因,并提供了解决方法
    you want to allow httpd to bind to network port 82
    semanag port -a -t PORT_TYPE -p tcp 82
  1. 选择修改正确的PORT_TYPE并执行命令
    semanage port -a -t http_port_t -p tcp 82
  2. 再次重启httpd服务成功,并设为开机启动
    systemctl restart httpd
    systemctl enable httpd

解决web服务文件访问

  • 考试的时候/var/www/html目录中已经有web文件,但是curl访问不了
    curl http://servera:82/web.html
  1. 查看系统日志寻找错误原因
    tail /var/log/messages
  2. 系统日志记录了错误的原因
    SELinux is preventing httpd from detattr access on the file /var/www/html/web.html
  3. 系统日志提示需要给文件设置标签
    /sbin/restorecon -v /var/www/html/web.html
    我们用同样的方法对整个目录进行递归授权
    restorecon -Rv /var/www/html
  4. 再次检查,就管用了
    curl http://servera:82/web.html # 检查管不管用
systemctl start httpd
tail /var/log/messages
semanage port -a -t http_port_t -p tcp 82
restorecon -Rv /var/www/html/
systemctl start httpd
systemctl status httpd
systemctl enable httpd
curl http://servera:82/web.html # 检查管不管用
  • 下面这个作为参考
semanage port -a -t http_port_t -p tcp 82
ls -l /var/www/html/ -Z
semanage fcontext -a -t httpd_sys_content_t "/var/www/html/file1"
semanage fcontext -m -t httpd_sys_content_t "/var/www/html/file1"
restorecon -v /var/www/html/file1
systemctl restart httpd
systemctl enabled httpd
firewall-cmd --permanent --add-port 82/tcp
firewall-cmd --reload

考察的知识点

  • 每个文件都是有标签的,使用ll -Z可以看到

  • getenforce可以查看SELinux状态

  • 关闭后新建文件没有标签

  • 标签就是说明文件的用途,如果改变用途,则会导致出现问题

  • 在开启SELinux的情况下,修改httpd.conf文件中的监端口

  • 重启服务使httpd无法启动,观察日志,发现记录着安全策略禁止

以上是关于RHCSA-A3.配置调试SELinux的主要内容,如果未能解决你的问题,请参考以下文章

RHCSA-A10.配置用户账户

RHCSA-A7.配置NTP时间同步

RHCSA-A2.配置默认软件仓库

RHCSA-A9.配置文件ACL权限

RHCSA-A8.配置文件共享autofs

RHCSA-A5.配置crontab计划任务