selinux限制linux程序运行,如何正确配置SELinux使程序正常运行(targeted模式)

本文主要是介绍selinux限制linux程序运行,如何正确配置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相关命令、文件和工具:

ls -Z   # 查看文件或目录的安全上下文(security context)

ps -efZ   # 查看主体(进程)的安全上下文

sestatus    # 查看当前SELinux的状态

getenforce    # 查看当前SELinux工作模式

setenforce 0|1    # 设置SELinux工作模式

/etc/selinux/config    # SELinux配置文件,修改重启后生效

seinfo    # SELinux相关信息查询,可查询用户、角色、类型、bool规则等,具体可用-h查看help

sesearch    # SELinux详细规则查询,具体可用-h查看help

chcon    # 修改对象的安全上下文,具体可用-h查看help

getsebool    # 查询某个bool规则的开关状态

setsebool    # 开关某个bool规则

restorecon    # 恢复默认的安全上下文

semanage    # 丰富的管理功能呢

其他相关工具:setroubleshoot、auditd

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

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

三、配置过程

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

3.0 确认当前SELinux工作状态

sestatus

7d1d20254d308f8b0a2ef33d0dc7cd5c.png

3.1 查看进程的类型

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

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

e9bb886f3eed97641feaac64d8c53d57.png

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'要有创建文件权限

7efe602c9a69a93adcc1b1477faf3e0b.png

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

3.3 配置目标类型

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

sudo chcon -R -u system_u -t mongod_var_lib_t mongo

d77b8f7f3e458530e5ddabda6ebf2ac5.png

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

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

00c144642ea8d4b0f6c22a5dd0adef34.png

四、参考资料

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

这篇关于selinux限制linux程序运行,如何正确配置SELinux使程序正常运行(targeted模式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327009

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q