Unifi 控制器与 Mongo DB 容器

问题描述 投票:0回答:1

我决定在 Linux 容器上运行 Unifi 控制器,所以据我阅读和谷歌搜索,它仅适用于 MongoDB。 下面是完美运行的 compose-docker 代码片段,它运行 Unifi 控制器以及 MongoDB 容器...但仅在 MongoDB 端没有任何类型的身份验证时才有效....好吧,这很好,但是从安全角度来看,这不太好......所以我想在 MongoDB 数据库上打开身份验证,并使 Unifi 控制器对其进行身份验证。

  1. 我通过 portainer 运行这个片段,你可以看到我在 unifi-controller 中唯一的环境是这个 >>>> “DB_URI: mongodb://unifi:12345678@test_mongo/unifi STATDB_URI: mongodb://unifi:12345678@test_mongo/unifi_stat DB_NAME:unifi

  2. 运行此代码片段后,unifi_controller 尝试使用这些帐户登录 mongo db,但它不能并且

    这是正常的,因为我已经尚未在 mongo db 中创建这些帐户.....mongo db 可以正常工作,无需此时我已经通过 Compass 测试了任何身份验证,并且我可以登录 DB

  3. 要在运行 docker-compose 时创建在 unifi_controller 环境中指示的那些帐户....首先我在“admin”中创建了一个 root 帐户,之后我为“unifi”数据库创建了两个帐户,第二个为“ unifi_stat”....

################################################## ###################

db.createUser({ user: "root", pwd: "12345678", // Replace with a strong passwordd roles: [{ role: "root", db: "admin" }] }); " db.createUser({ user: "unifi", pwd: "12345678", // Replace with a strong password roles: [ { role: "dbOwner", db: "unifi" }, { role: "readWrite", db: "unifi" } { role: "userAdmin", db: "unifi" }, { role: "listCollectionsRole", db: "unifi" }, #custom role ] }); db.createUser({ user: "unifi", pwd: "12345678", // Replace with a strong password roles: [ { role: "dbOwner", db: "unifi_stat" }, { role: "readWrite", db: "unifi_stat" } { role: "userAdmin", db: "unifi" }, { role: "listCollectionsRole", db: "unifi" }, #custom role ] });
################################################## ###################

  1. 好吧,此时一切都很好,unifi_controller 设法使用这些凭据登录并自动创建“unifi”和“unifi stats”数据库......但我

    “身份验证此时仍处于关闭状态”

  2. 进入 portainer 进入“mongo”容器,并在命令字段中添加“--auth”,现在看起来像“mongod”“--auth”……

  3. 重新启动了 mongo 容器,unifi 控制器可以登录并成功进行身份验证,我可以在 Mongo 日志中看到。

**但问题就在这里**

Caused by: com.mongodb.MongoCommandException: Command failed with error 13 (Unauthorized): 'not authorized on unifi_stat to execute command { listCollections: 1, cursor: {}, nameOnly: true, $db: "unifi_stat", lsid: { id: UUID("ae95edea-70d5-4427-9780-3549e80deecb") } }' on server test_mongo:27017. The full response is {"ok": 0.0, "errmsg": "not authorized on unifi_stat to execute command { listCollections: 1, cursor: {}, nameOnly: true, $db: \"unifi_stat\", lsid: { id: UUID(\"ae95edea-70d5-4427-9780-3549e80deecb\") } }", "code": 13, "codeName": "Unauthorized"}


[conn105] Unauthorized: not authorized on unifi_stat to execute command { listCollections: 1, cursor: {}, nameOnly: true, $db: "unifi_stat", lsid: { id: UUID("0461caa4-467a-4234-bb71-07d41a1218ad") } }


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

version: '2.3' services: mongo: image: mongo:3.6 container_name: ${COMPOSE_PROJECT_NAME}_mongo restart: always volumes: - db:/data/db - dbcfg:/data/configdb controller: image: "jacobalberty/unifi:${TAG:-latest}" container_name: ${COMPOSE_PROJECT_NAME}_controller depends_on: - mongo init: true restart: always volumes: - dir:/unifi - data:/unifi/data - log:/unifi/log - cert:/unifi/cert - init:/unifi/init.d - run:/var/run/unifi # Mount local folder for backups and autobackups - ./backup:/unifi/data/backup user: unifi sysctls: net.ipv4.ip_unprivileged_port_start: 0 environment: DB_URI: mongodb://unifi:12345678@test_mongo/unifi?authSource=unifi STATDB_URI: mongodb://unifi:12345678@test_mongo/unifi_stat?authSource=unifi_stat DB_NAME: unifi ports: - "3478:3478/udp" # STUN - "6789:6789/tcp" # Speed test - "8080:8080/tcp" # Device/ controller comm. - "8443:8443/tcp" # Controller GUI/API as seen in a web browser - "8880:8880/tcp" # HTTP portal redirection - "8843:8843/tcp" # HTTPS portal redirection - "10001:10001/udp" # AP discovery logs: image: bash container_name: ${COMPOSE_PROJECT_NAME}_logs depends_on: - controller command: bash -c 'tail -F /unifi/log/*.log' restart: always volumes: - log:/unifi/log volumes: db: dbcfg: data: log: cert: init: dir: run:
我不知道我到底应该尝试什么

linux database mongodb authentication containers
1个回答
0
投票
Unifi 期望有两个数据库(

unifi

unifi_stats
),它们在连接字符串变量 
DB_URI
STATDB_URI
 中引用。仅使用一个数据库作为认证数据库,参考
DB_NAME

您将创建帐户

unifi

 两次,这是行不通的,因为 Unifi 预计仅使用一个身份验证数据库。确保 
DB_NAME
 指向活动数据库,即在创建帐户之前运行 
use unifi
。然后创建两个单独的帐户或一个具有两个数据库权限的帐户。

我正在研究与你类似的设置。这是我用来配置

unifi

 数据库中现有 
unifi
 用户以连接到两个数据库的方法。服务启动没有错误,我可以使用 GUI,但这就是我迄今为止测试的范围。

unifi_db = db.getSiblingDB('unifi'); // Switch to the 'unifi' database unifi_db.updateUser("unifi", { roles: [ { role: "readWrite", db: "unifi" }, { role: "dbAdmin", db: "unifi" }, { role: "readWrite", db: "unifi_stat" }, { role: "dbAdmin", db: "unifi_stat" }, { role: "clusterMonitor", db: "admin" } ] });
    
© www.soinside.com 2019 - 2024. All rights reserved.