为Apache Web服务器配置SELinux策略
时间:2020-01-09 10:37:49 来源:igfitidea点击:
说明
当在Red Hat上部署Web应用程序而不使用默认的Apache目录(内容或者日志)时,SELinux可能会非常麻烦。
如果想将Apache内容放置在其他位置。在这些情况下,SELinux将不允许Apache访问内容或者日志文件。
应用程序目录结构
在为我们的Web应用程序设计SELinux策略之前,我们需要了解我们的应用程序将使用的目录结构。此结构仅是一个示例。由于环境要求,结构很有可能会有所不同。
我们的应用程序在Web服务器上具有以下目录树。
/webapps |---/apps | |---/app1 | |---/public_html | |---/wp-content | |---/uploads | |---/index.php | |---/wp-config.php | |---/logs | |---/app1 | |---/cache |---/app1
创建SELinux策略
安装必需的软件包
在创建自己的策略之前,我们需要确保已安装SEMANAGE。该应用程序使我们能够浏览现有的默认上下文策略,并创建自己的策略。
- 以root权限打开控制台
- 安装包含SEMANAGE的policycoreutils-python软件包。
yum install -y policycoreutils-python
- 要解决SELinux问题,请下载setroubleshooting软件包。该步骤实际上是可选的,但是当我们能够快速诊断出SELinux问题时,我们将为此感到感激。
yum install -y setroubleshoot
Apache上下文类型
在开始创建自己的策略以应用Apache的上下文类型之前,我们需要先了解一下哪些可用的方法。下表显示了我们最感兴趣的那些,但是还有其他几种可用的。
系统内容 |
---|
Apache使用的只读目录和文件 |
Apache使用的可读写目录和文件。将其分配给应用程序可以在其中创建或者修改文件的目录,或者将其分配给文件目录以允许应用程序修改它们 |
Apache用于生成并添加到web应用程序日志文件 |
如果我们使用的是mod\u cache,请指定给Apache用于缓存的目录 |
有关Apache上下文类型的完整列表,请打开Apache和SELinux的手册页。
man httpd_selinux
如果要查看现有策略,则可以使用semanage命令列出默认策略,以更好地理解为什么将默认上下文应用于目录和文件。
semanage fcontext -l
建立政策
- 创建一个策略,将httpd_sys_content_t上下文分配给/ webapps目录以及所有子目录和文件。
semanage fcontext -a -t httpd_sys_content_t "/webapps(/.*)?"
- 创建一个策略,将httpd_log_t上下文分配给日志目录。
semanage fcontext -a -t httpd_log_t "/webapps/logs(/.*)?"
- 创建一个策略,将httpd_cache_t上下文分配给我们的缓存目录。
semanage fcontext -a -t httpd_cache_t "/webapps/cache(/.*)?"
允许读写访问
现在,Apache有权使用我们的自定义应用程序目录。但是,它没有对任何内容的读写访问权限,这可能是需要的。如果应用程序确实像WordPress一样具有需要这种访问权限的文件或者目录,那么我们还需要应用允许它的上下文,但仅适用于需要它的文件或者目录。
将为以下文件分配Apache读写上下文,以便可以将其写入或者修改。
上传/ |
---|
目录 |
文件 |
- 创建一个策略,将httpd_sys_rw_content_t上下文分配给上载目录以及所有子文件。
semanage fcontext -a httpd_sys_rw_content_t "/webapps/app1/public_html/uploads(/.*)?"
- 创建一个策略,将httpd_sys_rw_content_t上下文分配给WordPress配置文件wp-config.php。
semanage fcontext -a httpd_sys_rw_content_t "/webapps/app1/public_html/wp-config.php"
应用SELinux 策略
我们的策略已创建,可以随时应用于我们的目录结构。我们将使用restorecon命令应用它们。如果上下文由于某种原因被删除或者损坏,则使用同一命令将上下文重新应用到应用程序目录。
- 应用SELinux政策
restorecon -Rv /webapps
- 现在,我们的目录结构应应用以下SELinux上下文。
/webapps (httpd_sys_content_t) |---/apps (httpd_sys_content_t) | |---/app1 (httpd_sys_content_t) | |---/public_html (httpd_sys_content_t) | |---/wp-content (httpd_sys_content_t) | |---/uploads (httpd_sys_rw_content_t) | |---/index.php (httpd_sys_content_t) | |---/wp-config.php (httpd_sys_rw_content_t) | |---/logs (httpd_log_t) | |---/app1 (httpd_log_t) | |---/cache (httpd_cache_t) |---/app1 (httpd_cache_t)
- 我们可以在每个目录上使用带-Z开关的ls命令来验证是否应用了上下文类型。作为示例,我们将检查webapps根目录。
ls -lZ /webapps
- 输出将显示上下文类型。注意突出显示的上下文类型。
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 apps drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 logs drwxr-xr-x. root root unconfined_u:object_r:httpd_cache_t:s0 cache