zoukankan      html  css  js  c++  java
  • mongodb复制集开启安全认证

    之前我有一篇博客写的是“node.js通过权限验证连接MongoDB”,这篇博客上提到如何在启动文件中通过配置auth参数来开启权限认证,但这种认证方式只适合单机节点,当我们使用复制集时应该怎么开启权限认证来保证复制集的安全捏? 
    先给大家看一下我在centos虚拟机上搭建的复制集 
    这里写图片描述 
    这和我之前的那篇博客上展示的不是同一个复制集,因为昨天我在原来那台虚拟机上瞎几把搞的时候改错了一个配置文件然后系统就GG了。。。。。于是今天我又重新装了一遍。 
    上面展示的五个文件夹分别是五个数据库的安装路径,文件夹名后面的数字是端口号。27017是priority最高的一个,27018、27019为普普通通的节点,27020为延时300秒的从节点,27021为投票节点。 
    那么要开启复制集的安全认证首先需要关闭全部节点,而且在此之前不应该对某个节点使用单机节点的认证方式,即不可以在某个节点的启动文件中配置auth=true且在该节点里创建用户。因为这样子做只适合单机节点,在复制集中这样做会导致该节点发现不了复制集中的其他节点,因为没有权限访问。复制集的安全认证需要通过配置keyfile文件的方式进行。 
    接下来我们需要在每个节点的安装路径下新建一个keyFile文件,文件中的具体内容其实就是一行字符串,但复制集对keyFile文件有所要求 
    1.内容:以base64编码集中中的字符进行编写,即字符串只能包含a-z、A-Z、+、/ 
    2.长度不能超过1000字节 
    3.权限最多到600 
    那么如何高效且高逼格生成一个合适的keyFile文件呢? 
    有这样一个方法分享给大家,我们在mongo27017中执行下面的操作 
    这里写图片描述 
    这里需要注意一下在第一次输出的时候我们需要检查它输出的字符串中是否有不是baase64的字符。第二行命令是把上面生成的字符串输入到keyFile中。由于之前所说,复制集对keyFile的权限有要求,最多到600,所以我们需要

    chmod 600 keyFile
    • 1

    然后我们把这个文件复制到其他节点的安装路径中。 
    然后我们到启动文件中配置参数 
    这里写图片描述 
    这里我们需要注意最后一个参数keyFile,其值为之前我们生成的keyFile文件的地址。由于我们配置了keyFile参数相当于就开启了安全认证,所以就不必在配置auth参数了。 
    最后我们再启动复制集,在主节点中创建用户,第一个创建的用户必须在admin库中创建,创建方式如下 
    这里写图片描述 
    之后不管在主节点还是从节点中,我们都需要在admin库中通过db.auth()进行认证 
    这里写图片描述 
    以上就是配置复制集安全认证的全部过程,后面我将为大家介绍如何通过nodejs连接复制集。

    =================================================================================

    四、     增加安全认证机制KeyFile

    4.1 集群之间的安全认证

    集群之间的复制增加keyFile认证

    #生成key

    openssl rand -base64 745 > /data/mongo_set/usercenter/30010/mongodb-keyfile

    chmod 600 /data/mongo_set/usercenter/30010/mon-keyfile

    # 该key的权限必须是600

    将该key放到集群中机器的每一台上,记住必须保持一致,权限设置成600;

    4.2 修改配置

    在mongodb.conf启动配置文件中增加配置项

    #安全认证机制

    keyFile=/data/mongo_set/test_set/30010/mon-keyfile

    4.3 主库配置用户

    也可后面配置,开启keyfile认证就默认开启了auth认证了,为了保证后面可以登录,我提前创建了用户:

    先创建管理员账户

    db.createUser( 

        user:"admin",  

        pwd:"xxxxxx", 

        roles:[{role:"userAdminAnyDatabase",db:"admin"}] 

    ); 

    db.createUser( {

     user: "root",

     pwd: "xxxxxxx",

     roles: [ { role: "root", db: "admin" } ]

     });

    #认证用户

    db.auth("admin","xxxxxxx")

    db.auth("root","xxxxxxx")

    4.4 重启进入

    重新启动mongodb,记住重新启动时候,keyfile的指定如果没有在配置文件中配置,就必须启动时候使用参数keyfile指定,关闭顺序注意下,mongodb集群有自动切换主库功能,如果先关主库,主库就切换到其它上面去了,这里预防主库变更,从库关闭后再关闭主库。

    mongo 10.10.1.163:30010/admin -u root –p

    2017-03-10T20:08:32.116+0800 I CONTROL  [initandlisten]

    test_set:PRIMARY> use admin

    switched to db admin

    重新查看从库和集群状态都是正常。

    五、     创建用户和用户数据库

    5.1 启动认证

    开启了安全认证就可以开始对每个数据库进行安全认证了,首先给用户创建一个数据库:

    test_set:PRIMARY> use user_test

    switched to db user_test

    mongodb创建数据库直接use即可,此时show dbs是看不到该库的,需要插入一条数据才会现实出来,这里不演示;

    创建用户数据库的用户:

    db.createUser(

      {

        user: “test_user",

        pwd: "xxxxxx",

        roles: [ { role: "readWrite", db: "user_test" } ]

      }

    );

    创建完成会显示成功,可以用db.system.users.find()查看所有用户验证用户是否存在;

    5.2 验证用户登录

    #client操作

    mongo 10.10.1.163:30010/user_test –u user_test –p

    MongoDB shell version v3.4.2

    Enter password:

    connecting to: mongodb://192.168.1.163:30010/user_center

    MongoDB server version: 3.4.2

    user_test:PRIMARY>

    转自:https://blog.csdn.net/wopelo/article/details/73004216

  • 相关阅读:
    2017 多校联合训练 8 题解
    2017 多校联合训练 7 题解
    2017 多校联合训练 6 题解
    2017 多校联合训练 5 题解
    2017 多校联合训练 4 题解
    windows 安装python
    pygame 使用
    python 发布
    面向对象的思维方法
    python 基础
  • 原文地址:https://www.cnblogs.com/panchanggui/p/9641488.html
Copyright © 2011-2022 走看看