CentOS7 SELinux阻止MongoDB启动的问题

问题描述:

在新装的CentOS7上,安装了MongoDB3.4,挂载了一个大的数据盘后,修改/etc/mongo.conf,将配置文件中的log和data目录放在新的数据盘下,并修改文件的访问权限。改完后的mongo.conf:

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/log/mongod.log

# Where and how to store data.
storage:
  dbPath: /data/mongodb/data
.....

文件权限:

# ls -alh
drwxr-xr-x.  5 mongod mongod 4.0K 11月  1 14:53 mongodb

# cd mongodb
# ls -alh
drwxr-xr-x. 3 mongod mongod 4.0K 11月  9 19:08 data
drwxr-xr-x. 2 mongod mongod 4.0K 11月  9 19:06 log
drwxr-xr-x. 2 mongod mongod 4.0K 11月  1 14:54 run

执行systemctl start mongod命令后,查看状态发现并没有启动,查看/var/log/message,发现以下错误

Nov  9 06:06:44 [localhost] setroubleshoot: failed to retrieve rpm info for /data/mongodb/run/mongod.pid
Nov  9 06:06:44 [localhost] setroubleshoot: SELinux is preventing /usr/bin/mongod from write access on the file /data/mongodb/run/mongod.pid. For complete SELinux messages run: sealert -l f7148e11-b126-401e-ba9f-a9a87c1e54ae
Nov  9 06:06:44 [localhost] python: SELinux is preventing /usr/bin/mongod from write access on the file /data/mongodb/run/mongod.pid.#012#012*****  Plugin restorecon (94.8 confidence) suggests   ************************#012#012If you want to fix the label. #012/data/mongodb/run/mongod.pid default label should be default_t.#012Then you can run restorecon.#012Do#012# /sbin/restorecon -v /data/mongodb/run/mongod.pid#012#012*****  Plugin catchall_labels (5.21 confidence) suggests   *******************#012#012If you want to allow mongod to have write access on the mongod.pid file#012Then you need to change the label on /data/mongodb/run/mongod.pid#012Do#012# semanage fcontext -a -t FILE_TYPE ‘/data/mongodb/run/mongod.pid‘#012where FILE_TYPE is one of the following: afs_cache_t, initrc_tmp_t, mongod_log_t, mongod_tmp_t, mongod_var_lib_t, mongod_var_run_t, puppet_tmp_t, user_cron_spool_t.#012Then execute:#012restorecon -v ‘/data/mongodb/run/mongod.pid‘#012#012#012*****  Plugin catchall (1.44 confidence) suggests   **************************#012#012If you believe that mongod should be allowed write access on the mongod.pid file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c ‘mongod‘ --raw | audit2allow -M my-mongod#012# semodule -i my-mongod.pp#012

从提示中可以看出是SELinux的防护功能,阻止了访问。

解决过程:

/var/log/message中的信息看起来比较费劲,里面有一句提示:

For complete SELinux messages run: sealert -l e73ba9e8-f74d-4835-9b53-85667546b28c

根据提示执行:

# sealert -l e73ba9e8-f74d-4835-9b53-85667546b28c
SELinux is preventing /usr/bin/mongod from write access on the directory /data/mongodb/log.

*****  Plugin catchall_labels (83.8 confidence) suggests   *******************

If you want to allow mongod to have write access on the log directory
Then 必须更改 /data/mongodb/log 中的标签
Do
# semanage fcontext -a -t FILE_TYPE ‘/data/mongodb/log‘
其中 FILE_TYPE 为以下内容之一:mongod_log_t, mongod_tmp_t, mongod_var_lib_t, mongod_var_run_t, tmp_t, var_lib_t, var_log_t, var_run_t。
然后执行:
restorecon -v ‘/data/mongodb/log‘

*****  Plugin catchall (17.1 confidence) suggests   **************************
......

上面提示输出中已经包含了,解决方法:

# semanage fcontext -a -t mongo_log_t ‘/data/mongodb/log‘
# restorecon -v ‘/data/mongodb/log‘
restorecon reset /data/mongodb/log context unconfined_u:object_r:unlabeled_t:s0->unconfined_u:object_r:mongod_log_t:s0

上面命令执行完毕后,就解决了/data/mongodb/log目录的文件权限问题。

同样的方法,再解决/data/mongodb/data和/data/mongodb/run目录的问题。

启动mongod,问题解决。

Nov  9 06:08:51 [localhost] systemd: Starting High-performance, schema-free document-oriented database...
Nov  9 06:08:51 [localhost] systemd: Started High-performance, schema-free document-oriented database.
Nov  9 06:08:51 [localhost] mongod: about to fork child process, waiting until server is ready for connections.
Nov  9 06:08:51 [localhost] mongod: forked process: 18218
Nov  9 06:08:51 [localhost] mongod: child process started successfully, parent exiting

P.S. 除了上面通过提示信息解决问题外,还有一个比较暴力的方法,直接关闭SELinux,但是不太建议。

# setenforce 0
# getenforce
Permissive

上面是临时关闭,如果是永久关闭,就需要编辑/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled,但是只有重启后才会发挥作用。

时间: 2024-10-06 03:06:21

CentOS7 SELinux阻止MongoDB启动的问题的相关文章

(转)在 CentOS7 上安装 MongoDB

在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录: cd /usr/local 3 在当前目录下创建 tools 目录: mkdir -p tools 4 进入到 tools 目录中: cd tools 5 下载与 CentOS 系统匹配的 mongodb-linux-x86_64-rhel70-3.2.4.tgz 文件: wget https://fastdl.mongodb.org/linux

Linux7/Centos7 Selinux介绍

SELinux的全称是Security Enhanced Linux, 就是安全加强的Linux.在SELinux之前,root账号能够任意的访问所有文档和服务:如果某个文件设为777,那么任何用户都可以访问甚至删除:这种方式称为DAC(主动访问机制),很不安全. DAC 自主访问控制: 用户根据自己的文件权限来决定对文件的操作,也就是依据文件的own,group,other/r,w,x权限进行限制.Root有最高权限无法限制.r,w,x权限划分太粗糙.无法针对不同的进程实现限制. SELinu

mongodb 启动步骤

mongodb启动步骤 1.在对应的目录下创建一个data的文件夹 2.打开cmd 跳转到bin路径下运行 (启动服务 运行 http://localhost:27017) D:\>cd D:\MongoDB\Server\3.0\bin D:\MongoDB\Server\3.0\bin>mongod --dbpath D:\MongoDB\Server\3.0\data 3.重新打开一个cmd 跳转到bin路径下运行 mongo D:\>cd D:\MongoDB\Server\3.

1. MONGODB启动&关闭

[前记]  最近由于公司系统改造:借用内存库来达到快速响应.公司借用mongodb数据库.下面是学习整理的note 从启动&关闭开始:至于安装这个太简单了. mongodb启动 mongodb服务器启动(跟postgresql数据库启动方式有点类似):是使用mongod命令.至于启动参数:可以使用mongod --help.mongod常用参数如下: --dbpath:指定数据目录.例如E:\mongodb\date\db.要确定该目录存在:不存在则创建.不然启动时会报目录不存在错误. --po

centOS7服务管理与启动流程

centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 unit段的常用选项 Service段的常用选项 Install段的常用选项 管理服务 管理系统服务 服务查看 chkconfig命令的对应关系 其他命令 服务状态 systemctl示例 运行级别 运行级别与target的对照 运行级别的切换 CentOS7引导顺序 设置简单的内核参数 简单的启

MongoDB启动配置等

目录: 一.mongoDB 启动配置 二.导出,导入,运行时备份 三.Fsync锁,数据修复 四.用户管理,安全认证 一.启动项 mongod --help C:\Windows\system32>mongod --help 1.常用配置项 --dbpath 指定数据库的目录,默认在window下是c:\data\db\ --port 指定服务器监听的端口号码,默认是27017 --fork 用守护进程的方式启动mongoDB --logpath 指定日志的输出路径,默认是控制台 --confi

mongodb启动出现问题解决方法。

之前MongoDB启动的时候是蛮正常的,不知道后来启动报错了,就把粘贴出来查询了.最后才知道是由于自己不正常的关闭导致的这个情况. --摘录:MongoDB非正常关闭后修复记录 mongod没有后台执行,在终端连接非正常断开后,再次执行mongod报错,如下所示: [[email protected] mongodb]# ./bin/mongod ./bin/mongod --help for help and startup options Thu Nov 17 22:42:49 Thu No

MongoDB启动及用户名密码设置

1.服务启动 下载后的安装步骤,请参见mongoDB安装详细教程 启动服务NET START MongoDB 关闭服务NET STOP MongoDB 启动客户端mongo MongoDB shell version v3.6.0 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.6.0 2.设置密码与用户权限 2.1 开启安全验证 方式一:在命令行输入mongod --auth --logpath "D:\Pr

ubuntu虚拟机mongodb启动和端口映射

环境: ubuntu 14.04.1 mongodb v3.4.1 虚拟机连接模式为nat连接 一.mongodb启动问题 更新了一下内核之后,在运行mongodb的时候出现了29 Data directory /data/db not found.的错误,时间久了不记得安装的配置了orz 查了一些资料,这里是因为mongodb默认的dbpath是/data/db,这个目录只能用root用户创建,创建后在权限上也比较麻烦,所以这里采用 sudo mongod --dbpath /var/lib/