如何正确配置SELinux使程序正常运行(targeted模式)

一、背景介绍

       近期在安装配置MongoDB的时候,用自己配置的数据目录始终无法正常运行,报错为ERROR: child process failed, exited with error Number 100,启动日志记录“Attempt to create a lock file on a read-only directory: /mnt/disk1/mongo, terminating”,检查目录归属都为mongod用户,目录权限为755,按理来说权限是没问题的。网上找了半天原因,都说只要删除数据目录中的mongod.lock,显然都是不适合我的解决办法。

        纠结了半天,终于想起可以看看是不是SELinux的原因。因为SELinux用的少,所以一开始没意识到这点。最终稍微学习了一下SELinux并配置完成,MongoDB成功启动。

        这篇文章主要记录一下如何进行SELinux的相关配置(targeted模式)以确保程序主体(进程)拥有对象资源(目录、文件、设备等)的正确权限,主要为配置的步骤,不多介绍相关的知识。

二、SELinux相关命令

        我用的系统是CentOS 7 1804,以下为SELinux相关命令、文件和工具:

  1. ls -Z    # 查看文件或目录的安全上下文(security context)
  2. ps -efZ    # 查看主体(进程)的安全上下文
  3. sestatus    # 查看当前SELinux的状态
  4. getenforce    # 查看当前SELinux工作模式
  5. setenforce 0|1    # 设置SELinux工作模式
  6. /etc/selinux/config    # SELinux配置文件,修改重启后生效
  7. seinfo    # SELinux相关信息查询,可查询用户、角色、类型、bool规则等,具体可用-h查看help
  8. sesearch    # SELinux详细规则查询,具体可用-h查看help
  9. chcon    # 修改对象的安全上下文,具体可用-h查看help
  10. getsebool    # 查询某个bool规则的开关状态
  11. setsebool    # 开关某个bool规则
  12. restorecon    # 恢复默认的安全上下文
  13. semanage    # 丰富的管理功能呢
  14. 其他相关工具:setroubleshoot、auditd

标黑的为本次所用主要命令。

如果没有相关命令,yum install setools

三、配置过程

        SELinux最常用的模式为targeted,在targeted模式下最主要的就是确保主体(subject,一般为进程)的安全上下文和对象(object)的安全上下文满足已生效的策略即可,targeted模式下主要关注源(进程)类型和目标(对象)类型的匹配。

3.0 确认当前SELinux工作状态

sestatus

如何正确配置SELinux使程序正常运行(targeted模式)_第1张图片

3.1 查看进程的类型

我这里的进程为mongod,进程的类型一般称为域(domain)。

语法:ps -efZ | grep -v grep | grep 进程名称

system_u:system_r:mongod_t,分别为用户身份(indentify)、角色(role)、类型(type),targeted模式下主要关注类型(type)。

可以看到mongod的type为mongod_t

3.2 查看指定源类型的相关规则

语法:sesearch -s 源类型 -t 目标类型    # 这里不知道目标类型,所以使用grep匹配

sesearch -A -s mongod_t | grep 'mongod_t.* \\(file\\|dir\\) .*write.*create'     # (注意里面的双反斜杠实际为单反斜杠)'-A'为查看allow的规则,' (file|dir) '为匹配文件和目录资源,还有两个需要的关键权限:'write'要有写权限,'create'要有创建文件权限

如何正确配置SELinux使程序正常运行(targeted模式)_第2张图片

可以看到有三个同时有dir和file的配置,且权限完整。根据目标类型名称基本可以判断用途,这里选择mongod_var_lib_t作为目标类型。

3.3 配置目标类型

语法:chcon [-R] -t 类型名称 文件或目录

sudo chcon -R -u system_u -t mongod_var_lib_t mongo

再运行ls -Z可以查看已设置成功。

运行 mongod,可以成功运行,配置完毕。

如何正确配置SELinux使程序正常运行(targeted模式)_第3张图片

四、参考资料

鸟哥的Linux私房菜:http://cn.linux.vbird.org/linux_basic/0440processcontrol_5.php

你可能感兴趣的:(Linux,SELinux,MongoDB)