Att hantera användare i MongoDB görs normalt med mongosh och db.createUser(), ett kommando i taget och en server i taget. Med flera miljöer (prod, test, dev) blir det snabbt svårt att se vem som har vilka rättigheter. Därför byggde jag MongoDB Access Admin: ett webbgränssnitt där man ser alla användare, roller och behörigheter i en matris och ändrar dem med några klick.
Här går jag igenom hur du installerar det på en server. Vill du läsa på om hur behörigheter fungerar i MongoDB först finns min MongoDB-guide.
systemd + Docker
appen lyssnar på
Admin, Operator, Viewer
Appen körs på en Linux-server och nås via webbläsaren. Den har ett MongoDB-konto per anslutning och sköter användare och roller åt dig. Alla ändringar och inloggningar skrivs till en audit-logg med namnet på den som gjorde dem.
du och kollegor
inloggning + roller
på din server
port 27017
På en server når alla på nätverket appen, och den har admin-lösenorden till varje MongoDB-anslutning. Därför slår serverläget på två skydd som är avstängda när du kör appen på din egen dator:
- Inloggning med app-konton i tre roller: Admin, Operator och Viewer.
- HTTPS med ett självsignerat certifikat som skapas automatiskt, eller med ditt eget certifikat.
⚙️ Alternativ 1: systemd
- Debian eller Ubuntu, även LXC på Proxmox
- Installeras med ett skript
- Kör som tjänstanvändaren
mongoadmin - Härdad systemd-unit
- Installerar Node.js 22 vid behov
- Uppdateras genom att köra skriptet igen
🐳 Alternativ 2: Docker
- Valfri Linux med Docker
- Byggs med
docker compose - Containern
mongo-access-admin - Data i volymen
data(/data) - Bra om Docker redan är din standard
- Volymen sparas vid uppdatering
Båda alternativen använder samma app, samma inställningar och samma dataformat, så du kan byta mellan dem senare. För OpenShift finns ett eget avsnitt i README-filen.
Krav och förberedelser
Du behöver en Linux-server som når dina MongoDB-servrar, och root-behörighet (sudo).
| Vad | Krav |
|---|---|
| Operativsystem | Debian 12+ eller Ubuntu 22.04+ för alternativ 1. Valfri Linux med Docker för alternativ 2 |
| Node.js | 20.19 eller nyare. Installeraren lägger till Node.js 22 om det saknas eller är för gammalt |
| Docker | Docker Engine med Compose-pluginet (bara alternativ 2) |
| MongoDB | 4.4 till 9.0, egen drift. MongoDB Atlas stöds inte (Atlas blockerar användarhantering via databasanslutningen) |
| Nätverk in | Port 8443/tcp från användarnas datorer till servern |
| Nätverk ut | MongoDB-porten (oftast 27017) från servern till varje MongoDB-server |
| MongoDB-konto | Ett konto per anslutning med userAdminAnyDatabase (eller root) i databasen admin |
| Disk | Under 200 MB för appen. Datakatalogen växer långsamt med audit-loggen |
Innan du börjar:
- Kopiera
mongo-access-admin.ziptill servern, till exempel medscp mongo-access-admin.zip user@server:~. - Skriv upp de värdnamn och IP-adresser folk kommer att använda för att nå servern, till exempel
mongoadmin.lab.local,10.0.0.50. De läggs in i certifikatet. - Om du har en brandvägg igång, öppna porten:
sudo ufw allow 8443/tcp. Mer om det i min UFW-guide.
Alternativ 1: systemd-tjänst (Debian/Ubuntu)
Ett skript installerar allt och startar tjänsten. Kör det igen från en nyare version när du vill uppdatera.
sudo apt-get install -y unzip unzip mongo-access-admin.zip cd mongo-admin # eller mongo-access-admin, beroende på zip-filen sudo ./deploy/install.sh --hostnames "mongoadmin.lab.local,10.0.0.50"
| Flagga | Standard | Betydelse |
|---|---|---|
--hostnames | ingen | Extra värdnamn och IP-adresser i det självsignerade certifikatet |
--port | 8443 | HTTPS-port. Används bara vid första installationen |
Skriptet gör följande:
- Installerar paketen som behövs, och Node.js 22 från NodeSource om systemets version är äldre än 20.19.
- Skapar tjänstanvändaren
mongoadmin, som saknar skal och andra rättigheter. - Kopierar appen till
/opt/mongo-access-adminoch installerar dess beroenden. - Skapar datakatalogen
/var/lib/mongo-access-adminoch inställningsfilen/etc/mongo-access-admin/env. - Installerar en härdad systemd-unit som bara får skriva i sin datakatalog, och aktiverar och startar den.
- Skriver ut adressen, certifikatets SHA-256-fingeravtryck och engångskoden för setup.
Här hamnar allt:
| Vad | Var |
|---|---|
| Appen | /opt/mongo-access-admin |
| Data: anslutningar, audit-logg, app-konton, certifikat | /var/lib/mongo-access-admin |
| Inställningar | /etc/mongo-access-admin/env |
| Kontokommando | /usr/local/bin/mongo-access-admin |
| Logg | journalctl -u mongo-access-admin -f |
| Status / omstart | sudo systemctl status mongo-access-admin / sudo systemctl restart mongo-access-admin |
Alternativ 2: Docker
Bygg och starta containern med Docker Compose. Datan ligger i volymen data, som monteras på /data.
- Packa upp zip-filen på servern och gå in i mappen.
- Öppna
docker-compose.ymloch skriv in dina värdnamn och IP-adresser iTLS_HOSTNAMES, till exempel"mongoadmin.lab.local,10.0.0.50". - Bygg och starta:
docker compose up -d --build
docker compose logs # visar adressen, fingeravtrycket och setup-koden| Uppgift | Kommando |
|---|---|
| Logg | docker compose logs -f |
| Stoppa / starta | docker compose stop / docker compose start |
| Kontokommandon | docker compose exec app node manage.js <kommando> |
| Uppdatera | Packa upp nya versionen, sedan docker compose up -d --build (volymen sparas) |
Vill du använda ett eget certifikat: avkommentera raderna TLS, TLS_CERT_FILE och TLS_KEY_FILE och volymen ./certs:/certs:ro i docker-compose.yml. Lägg sedan cert.pem och key.pem i en mapp som heter certs bredvid filen.
Första inloggningen och app-roller
Öppna https://<server>:8443, kontrollera certifikatets fingeravtryck och skapa sedan den första administratören med setup-koden.
https://<server>:8443. Certifikatet är självsignerat, så webbläsaren varnar första gången.| Roll | Kan |
|---|---|
| Admin | Allt, inklusive anslutningar och app-konton |
| Operator | Skapa och ta bort MongoDB-användare, ge och ta bort behörigheter, hantera roller, exportera rapporter |
| Viewer | Bara läsa: användare, roller, matris, rapporter och audit-loggen |
Det är servern som kontrollerar rollerna, och knappar som en roll inte får använda döljs. Efter 5 misslyckade inloggningar låses kontot i 15 minuter från den adressen. Varje ändring och varje inloggning skrivs till audit-loggen med app-användarens namn.
sudo mongo-access-admin setup-code (tjänst) eller docker compose exec app node manage.js setup-code (Docker).
Hantera app-konton från kommandoraden
Använd de här kommandona på servern när ingen kan logga in som admin, eller om du vill skripta konton.
sudo mongo-access-admin list-users # lista konton sudo mongo-access-admin add-user <namn> <roll> # lägg till konto sudo mongo-access-admin reset-password <namn> # återställ lösenord sudo mongo-access-admin set-role <namn> <roll> # byt roll sudo mongo-access-admin delete-user <namn> # ta bort konto sudo mongo-access-admin setup-code # ny setup-kod
docker compose exec app node manage.js list-users docker compose exec app node manage.js add-user <namn> <roll> docker compose exec app node manage.js reset-password <namn> docker compose exec app node manage.js set-role <namn> <roll> docker compose exec app node manage.js delete-user <namn> docker compose exec app node manage.js setup-code
<roll> är admin, operator eller viewer (standard är viewer). Nya och återställda konton får ett tillfälligt lösenord som skrivs ut en gång och måste bytas vid första inloggningen. Den sista administratören kan inte tas bort eller degraderas.
Inställningar
Inställningarna ligger i /etc/mongo-access-admin/env (tjänst) eller under environment: i docker-compose.yml (Docker). Starta om efter en ändring.
| Inställning | Standard på server | Vad den gör |
|---|---|---|
HOST | 0.0.0.0 | Adress att lyssna på. 127.0.0.1 = bara den här maskinen |
PORT | 8443 | Port |
DATA_DIR | /var/lib/mongo-access-admin (Docker: /data) | Var datan sparas |
AUTH | on | Inloggning. Kan bara stängas av när HOST är 127.0.0.1 |
TLS | selfsigned | selfsigned, files (eget certifikat) eller off (bara bakom en proxy som sköter HTTPS) |
TLS_HOSTNAMES | tom | Extra namn och IP-adresser i det självsignerade certifikatet |
TLS_CERT_FILE, TLS_KEY_FILE | tom | Eget certifikat och nyckel (PEM) när TLS=files |
SESSION_IDLE_MINUTES | 60 | Loggar ut efter så här lång tid utan aktivitet |
SESSION_MAX_HOURS | 12 | Måste logga in igen efter så här lång tid oavsett |
TRUST_PROXY | tom | Sätt till 1 bakom en reverse proxy, så att klientens riktiga adress loggas och används för låsning |
NODE_OPTIONS | tom | Sätt till --use-system-ca om en proxy byter ut certifikat på vägen till MongoDB |
# Kopiera cert.pem och key.pem till /etc/mongo-access-admin/ och gör dem läsbara för tjänsten: sudo chgrp mongoadmin /etc/mongo-access-admin/*.pem sudo chmod 640 /etc/mongo-access-admin/*.pem # Lägg till i /etc/mongo-access-admin/env: TLS=files TLS_CERT_FILE=/etc/mongo-access-admin/cert.pem TLS_KEY_FILE=/etc/mongo-access-admin/key.pem
Lägga till namn i det självsignerade certifikatet i efterhand: lägg till dem i TLS_HOSTNAMES, ta bort mappen tls i datakatalogen och starta om. Fingeravtrycket ändras, så dela det nya med dina användare.
Uppdatera, säkerhetskopiera, flytta data och avinstallera
Uppdateringar behåller inställningar och data. Datakatalogen är det enda du behöver säkerhetskopiera.
| Uppgift | Tjänst (alternativ 1) | Docker (alternativ 2) |
|---|---|---|
| Uppdatera | Packa upp nya versionen och kör sudo ./deploy/install.sh därifrån | Packa upp nya versionen och kör docker compose up -d --build |
| Säkerhetskopiera | sudo tar czf mongo-access-admin-backup.tgz -C /var/lib mongo-access-admin | docker compose cp app:/data ./mongo-access-admin-backup |
| Avinstallera, behåll data | sudo ./deploy/uninstall.sh | docker compose down |
| Avinstallera, radera data | sudo ./deploy/uninstall.sh --purge | docker compose down -v |
connections.json med MongoDB-lösenorden, app-users.json med hashade app-lösenord, audit-loggen och certifikatets nyckel. Läs gärna min guide om backup.
Flytta dina anslutningar från din egen dator till servern:
- Kopiera
connections.jsonochaudit-log.jsonlfrån app-mappen på din dator till servern. - Tjänst:
sudo cp connections.json audit-log.jsonl /var/lib/mongo-access-admin/och sedansudo chown mongoadmin: /var/lib/mongo-access-admin/*.json*. Docker:docker compose cp connections.json app:/data/och samma sak föraudit-log.jsonl. - Starta om tjänsten eller containern.
Felsökning
Börja med loggen: journalctl -u mongo-access-admin -n 50 (tjänst) eller docker compose logs --tail 50 (Docker).
| Symptom | Trolig orsak | Lösning |
|---|---|---|
| Sidan laddar inte | Brandvägg eller fel port | sudo ufw allow 8443/tcp. Kontrollera med sudo ss -tlnp | grep 8443 på servern |
| "The service did not start" från installeraren | Porten upptagen eller felaktig inställning | Läs loggraderna som installeraren skriver ut, rätta /etc/mongo-access-admin/env och starta om |
| Webbläsaren säger att namnet inte matchar certifikatet | Du öppnade ett namn eller en IP som inte finns i certifikatet | Lägg till det i TLS_HOSTNAMES, ta bort mappen tls i datakatalogen och starta om |
| Fingeravtrycket stämmer inte | Du pratar inte med din server | Stopp. Kontrollera DNS och adressen innan du loggar in |
| "Too many failed sign-ins" | 5 felaktiga lösenord från den adressen | Vänta 15 minuter, eller återställ lösenordet från kommandoraden |
| Alla är utelåsta | Ingen admin kan logga in | sudo mongo-access-admin reset-password <admin> |
| "Could not connect" till en anslutning | MongoDB nås inte från servern, eller fel lösenord | Testa med nc -zv <mongo-host> 27017 från servern och kontrollera anslutningssträngen |
| "not authorized" när du skapar användare | MongoDB-kontot saknar rättigheter | Ge det userAdminAnyDatabase eller root i admin |
UNABLE_TO_VERIFY_LEAF_SIGNATURE | En proxy byter ut certifikat | Sätt NODE_OPTIONS=--use-system-ca och starta om |
| Blir utloggad ofta | Timeout vid inaktivitet | Höj SESSION_IDLE_MINUTES |
Vad du får med MongoDB Access Admin
- Webbgränssnitt för användare, roller och behörigheter i MongoDB
- Installation med ett kommando, som systemd-tjänst eller med Docker
- Inloggning med tre roller: Admin, Operator och Viewer
- HTTPS med automatiskt självsignerat certifikat, eller ditt eget
- Audit-logg över varje ändring och inloggning
- Stöd för MongoDB 4.4 till 9.0 i egen drift
- Kontohantering från kommandoraden när ingen kan logga in
Bildgalleri
Så här ser verktyget ut i drift, kopplat mot en MongoDB 8 på min egen dator. Klicka på en bild för att se den större.
Matrisen: vem har vilken access i vilken databas
Användare och deras roller per databas
Audit-loggen: vem gjorde vad och när
Egna roller som fungerar som grupper
Inbyggd guide om hur access fungerar i MongoDB
Vill du testa eller veta mer?
Hör av dig, så berättar jag gärna mer om verktyget och hur det kan passa i din miljö.
Kontakta mig