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

相关文章

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

maven私服配置全过程

《maven私服配置全过程》:本文主要介绍maven私服配置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用Nexus作为 公司maven私服maven 私服setttings配置maven项目 pom配置测试效果总结使用Nexus作为 公司maven私

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流