selinux基本使用

7cmb a nobody

部署web服务的时候遇到关于读写的问题,debug半天在selinux发现了端倪。本来应该更早记录的,现在属于是回忆+再看一遍文档了

PS:又得回忆一遍细节,还得开机验证有没有记错,好痛苦

中间的时间作者玩洋垃圾去了

概述

遇到该问题的场景是在nginx部署php应用,DAC配置为777的情况下依旧无法读写。首先排除是php-fpm的问题。如果php-fpm配置错误,nginx直接访问php文件会404,而遇到的场景是php读写时才会404

虽然将selinux设置为宽松模式或者干脆关闭selinux将不用思考这个问题,但是还是想不关闭selinux的情况下实现目标

目的

需要在selinux在enforcing模式下修改上下文以实现php后端对文件的修改

先决条件

nginx和php-fpm配置正确,DAC权限配置正确。且所有进程均以正确身份运行,如果有NFS服务则需要配置匿名客户映射到共享目录的所有者

流程

查看nginx或者说web服务目录需要配置的selinux上下文,为web应用实例所在目录配置该上下文,可按需临时更改或者永久更改。之后配置web服务布尔值(selinux策略)

实操

1-修改web实例目录上下文

首先查看目标上下文是什么,以nginx的示例文件夹作为参考:

1
2
[baka@test1-web-sql lib]$ sudo semanage fcontext --list |grep /usr/share/nginx/html
/usr/share/nginx/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

可以看到,web实例需要type的上下文为httpd_sys_content_t

假设我需要一个discuz应用,实例文件夹在/usr/share/discuz:

1
2
3
[baka@test1-web-sql lib]$ ls -Z /usr/share/nginx
system_u:object_r:usr_t:s0 discuz system_u:object_r:usr_t:s0 modules
system_u:object_r:httpd_sys_content_t:s0 html

可以看到默认type上下文默认是usr_t

使用chcon临时修改上下文:

1
sudo chcon -R -t httpd_sys_content_t /usr/share/nginx/discuz

临时指的是restorecon能够将这个方法修改的上下文给恢复过来,将其变为默认状态

如果需要永久记录则使用semanage fcontext命令并配合restorecon刷新上下文:

1
2
sudo semanage fcontext -a -t httpd_sys_content_t '/usr/share/nginx/discuz(/.*)?'
sudo restorecon -R /usr/share/nginx/discuz/

以上两种方法二选一皆能达到下面效果:

1
2
3
[baka@test1-web-sql lib]$ ls -Z /usr/share/nginx
system_u:object_r:httpd_sys_content_t:s0 discuz system_u:object_r:usr_t:s0 modules
system_u:object_r:httpd_sys_content_t:s0 html

可以看到目标上下文已经应用

2-修改selinux布尔值(策略)

这时候按道理来说依旧无法使用cgi(该例子为php-fpm)读写该目录,所以需要修改策略

查看并筛选当前httpd策略:

1
sudo semanage boolean -l | grep httpd

这时候需要找到httpd_unifiedhttpd_enable_cgi并永久设置为1:

1
2
sudo setsebool -P httpd_unified on
sudo setsebool -P httpd_enable_cgi 1

httpd_unified启用后,此布尔值允许 httpd_t 完全访问所有 httpd 类型(即执行、读取或写入 sys_content_t)。禁用后,将区分只读、可写入或可执行的 Web 内容。禁用此布尔值可确保额外的安全级别,但增加了管理开销,即必须根据每个布尔值应具有的文件访问权限单独标记脚本和其他 Web 内容。

引用自——13.3. 布尔值 Red Hat Enterprise Linux 7 | Red Hat Customer Portal

这时web实例就能正常使用了

参考:

使用 SELinux Red Hat Enterprise Linux 8 | Red Hat Customer Portal

部分 I. SELinux Red Hat Enterprise Linux 7 | Red Hat Customer Portal

  • 标题: selinux基本使用
  • 作者: 7cmb
  • 创建于 : 2024-03-22 16:54:10
  • 更新于 : 2024-10-12 23:07:35
  • 链接: https://7cmb.com/selinux基本使用/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。