Mongodb集成LDAP授權

一、環境簡介

Mongodb enterprise v4.0.16

OpenLDAP v2.4.44

二、Mongodb集成LDAP的授權過程

  1. 客戶端指定某種外部驗證方式鏈接Mongodb;
  2. Mongodb根據配置中設置的ip、用戶、密碼等來綁定LDAP伺服器;
  3. Mongodb根據配置的查詢模板構建查詢語句,並向LDAP伺服器發送請求獲得驗證用戶所屬的用戶組資訊;
  4. LDAP伺服器執行查詢並返回用戶組的資訊;
  5. Mongodb在admin資料庫中查找跟用戶組對應的role,並對應的許可權授權給當前用戶;
  6. 客戶端在授權的資料庫上進行操作;

三、配置過程

在LDAP伺服器新建用戶mongodb

image

在LDAP伺服器中新建dbrole組,並通過memberUid進行關聯,這裡需要填寫用戶的全限定名

image

在mongod.conf中新增LDAP的配置

security:
    ldap:
        servers: "192.168.32.15:389"
        authz:
            queryTemplate: "dc=mango,dc=com?cn?sub?(&(objectClass=posixGroup)(memberUid={USER}))"
        bind:
            queryUser: "cn=root,dc=mango,dc=com"
            queryPassword: "mango"
            method: "simple"

重啟mongdb服務

systemctl restart mongod

在mongodb的admin資料庫中新建角色

use admin
 
db.createRole({
  "role" : "dbrole",
  "privileges" : [],
  "roles" : [{
      "role" : "dbOwner",
      "db" : "test"
    }]
})

使用mongodb shell連接資料庫

 mongo --username uid=mongodb,ou=db,dc=mango,dc=com --password mangodb --authenticationMechanism PLAIN --authenticationDatabase  '$external'

四、security.ldap.authz.queryTemplate查詢語法

首先這個查詢模板是LDAP server執行的,所以其最終是滿足LDAP的查詢語法;

[ dn  [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ]

dn:定義查詢開始的基點對象;

attributes:定義返回命中的條目的哪個欄位;如果不定義則返回條目對應的dn;

scope:進一步控制相對基點的搜索範圍,可以取值one、sub、base;

filter:定義過濾條件,LDAP有自己的一套語法;

具體的查詢語法,網上已經比較多,這裡只簡單介紹一下mongod.config里配置的查詢語句

dc=mango,dc=com?cn?sub?(&(objectClass=posixGroup)(memberUid={USER}))

在dc=mango,dc=com的節點下,查找objectClass=posixGroup,同時memberUid=當前登錄用戶的節並返回節點的cn欄位;

這裡的{USER}在查詢之前,mongodb會將它替換為登錄的用戶id;基於當前版本的mongodb的實現機制,這裡是不能直接使用常量值;

Tags: