Hem Eget projekt

MongoDB Access Admin — behörigheter i MongoDB utan krångel

Ett webbverktyg för att skapa användare, dela ut roller och hålla koll på vem som har tillgång till vad i MongoDB. Installeras på en Linux-server med ett enda kommando, antingen som systemd-tjänst eller med Docker.

Projekt 2026 Node.js · systemd · Docker Adam Halvars 9 min läsning

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.

2
Sätt att installera
systemd + Docker
8443
HTTPS-porten
appen lyssnar på
3
App-roller
Admin, Operator, Viewer
Hur fungerar det?
Arkitektur i ett nötskal

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.

🌐 Webbläsare
du och kollegor
→
HTTPS :8443
inloggning + roller
→
🖥 Access Admin
på din server
→
🍃 MongoDB
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).

VadKrav
OperativsystemDebian 12+ eller Ubuntu 22.04+ för alternativ 1. Valfri Linux med Docker för alternativ 2
Node.js20.19 eller nyare. Installeraren lägger till Node.js 22 om det saknas eller är för gammalt
DockerDocker Engine med Compose-pluginet (bara alternativ 2)
MongoDB4.4 till 9.0, egen drift. MongoDB Atlas stöds inte (Atlas blockerar användarhantering via databasanslutningen)
Nätverk inPort 8443/tcp från användarnas datorer till servern
Nätverk utMongoDB-porten (oftast 27017) från servern till varje MongoDB-server
MongoDB-kontoEtt konto per anslutning med userAdminAnyDatabase (eller root) i databasen admin
DiskUnder 200 MB för appen. Datakatalogen växer långsamt med audit-loggen

Innan du börjar:

  1. Kopiera mongo-access-admin.zip till servern, till exempel med scp mongo-access-admin.zip user@server:~.
  2. 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.
  3. 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.

INSTALLERA SOM SYSTEMD-TJÄNST
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"
FlaggaStandardBetydelse
--hostnamesingenExtra värdnamn och IP-adresser i det självsignerade certifikatet
--port8443HTTPS-port. Används bara vid första installationen

Skriptet gör följande:

  1. Installerar paketen som behövs, och Node.js 22 från NodeSource om systemets version är äldre än 20.19.
  2. Skapar tjänstanvändaren mongoadmin, som saknar skal och andra rättigheter.
  3. Kopierar appen till /opt/mongo-access-admin och installerar dess beroenden.
  4. Skapar datakatalogen /var/lib/mongo-access-admin och inställningsfilen /etc/mongo-access-admin/env.
  5. Installerar en härdad systemd-unit som bara får skriva i sin datakatalog, och aktiverar och startar den.
  6. Skriver ut adressen, certifikatets SHA-256-fingeravtryck och engångskoden för setup.

Här hamnar allt:

VadVar
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
Loggjournalctl -u mongo-access-admin -f
Status / omstartsudo systemctl status mongo-access-admin / sudo systemctl restart mongo-access-admin
💡 Tips: Starta om tjänsten när du har ändrat i inställningsfilen, annars slår ändringen inte igenom. Funkar utmärkt i en LXC-container på Proxmox.

Alternativ 2: Docker

Bygg och starta containern med Docker Compose. Datan ligger i volymen data, som monteras på /data.

  1. Packa upp zip-filen på servern och gå in i mappen.
  2. Öppna docker-compose.yml och skriv in dina värdnamn och IP-adresser i TLS_HOSTNAMES, till exempel "mongoadmin.lab.local,10.0.0.50".
  3. Bygg och starta:
DOCKER COMPOSE
docker compose up -d --build
docker compose logs        # visar adressen, fingeravtrycket och setup-koden
UppgiftKommando
Loggdocker compose logs -f
Stoppa / startadocker compose stop / docker compose start
Kontokommandondocker compose exec app node manage.js <kommando>
UppdateraPacka 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.

Steg 1
Öppna sidan
Gå till https://<server>:8443. Certifikatet är självsignerat, så webbläsaren varnar första gången.
Steg 2
Kontrollera fingeravtrycket
Öppna certifikatdetaljerna i webbläsaren och jämför SHA-256-fingeravtrycket med det som installeraren eller loggen skrev ut. Fortsätt bara om de stämmer.
Steg 3
Skapa första admin
Ange engångskoden och välj användarnamn och lösenord. Lösenordet måste vara minst 12 tecken och får inte innehålla användarnamnet.
Steg 4
Lägg till en anslutning
Bara Admin: namn, miljö (prod, test, dev) och MongoDB-anslutningssträngen.
Steg 5
Bjud in kollegor
Klicka på ditt namn uppe till höger och välj Manage app accounts. Varje nytt konto får ett tillfälligt lösenord som måste bytas vid första inloggningen.
RollKan
AdminAllt, inklusive anslutningar och app-konton
OperatorSkapa och ta bort MongoDB-användare, ge och ta bort behörigheter, hantera roller, exportera rapporter
ViewerBara 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.

💡 Tappat setup-koden? Kör 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.

KONTOKOMMANDON — TJÄNST (ALTERNATIV 1)
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
KONTOKOMMANDON — DOCKER (ALTERNATIV 2)
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ällningStandard på serverVad den gör
HOST0.0.0.0Adress att lyssna på. 127.0.0.1 = bara den här maskinen
PORT8443Port
DATA_DIR/var/lib/mongo-access-admin (Docker: /data)Var datan sparas
AUTHonInloggning. Kan bara stängas av när HOST är 127.0.0.1
TLSselfsignedselfsigned, files (eget certifikat) eller off (bara bakom en proxy som sköter HTTPS)
TLS_HOSTNAMEStomExtra namn och IP-adresser i det självsignerade certifikatet
TLS_CERT_FILE, TLS_KEY_FILEtomEget certifikat och nyckel (PEM) när TLS=files
SESSION_IDLE_MINUTES60Loggar ut efter så här lång tid utan aktivitet
SESSION_MAX_HOURS12Måste logga in igen efter så här lång tid oavsett
TRUST_PROXYtomSätt till 1 bakom en reverse proxy, så att klientens riktiga adress loggas och används för låsning
NODE_OPTIONStomSätt till --use-system-ca om en proxy byter ut certifikat på vägen till MongoDB
EGET CERTIFIKAT — TJÄNST
# 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.

UppgiftTjänst (alternativ 1)Docker (alternativ 2)
UppdateraPacka upp nya versionen och kör sudo ./deploy/install.sh därifrånPacka upp nya versionen och kör docker compose up -d --build
Säkerhetskopierasudo tar czf mongo-access-admin-backup.tgz -C /var/lib mongo-access-admindocker compose cp app:/data ./mongo-access-admin-backup
Avinstallera, behåll datasudo ./deploy/uninstall.shdocker compose down
Avinstallera, radera datasudo ./deploy/uninstall.sh --purgedocker compose down -v
⚠ Behandla säkerhetskopian som hemlig. Den innehåller 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:

  1. Kopiera connections.json och audit-log.jsonl från app-mappen på din dator till servern.
  2. Tjänst: sudo cp connections.json audit-log.jsonl /var/lib/mongo-access-admin/ och sedan sudo chown mongoadmin: /var/lib/mongo-access-admin/*.json*. Docker: docker compose cp connections.json app:/data/ och samma sak för audit-log.jsonl.
  3. 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).

SymptomTrolig orsakLösning
Sidan laddar inteBrandvägg eller fel portsudo ufw allow 8443/tcp. Kontrollera med sudo ss -tlnp | grep 8443 på servern
"The service did not start" från installerarenPorten upptagen eller felaktig inställningLäs loggraderna som installeraren skriver ut, rätta /etc/mongo-access-admin/env och starta om
Webbläsaren säger att namnet inte matchar certifikatetDu öppnade ett namn eller en IP som inte finns i certifikatetLägg till det i TLS_HOSTNAMES, ta bort mappen tls i datakatalogen och starta om
Fingeravtrycket stämmer inteDu pratar inte med din serverStopp. Kontrollera DNS och adressen innan du loggar in
"Too many failed sign-ins"5 felaktiga lösenord från den adressenVänta 15 minuter, eller återställ lösenordet från kommandoraden
Alla är utelåstaIngen admin kan logga insudo mongo-access-admin reset-password <admin>
"Could not connect" till en anslutningMongoDB nås inte från servern, eller fel lösenordTesta med nc -zv <mongo-host> 27017 från servern och kontrollera anslutningssträngen
"not authorized" när du skapar användareMongoDB-kontot saknar rättigheterGe det userAdminAnyDatabase eller root i admin
UNABLE_TO_VERIFY_LEAF_SIGNATUREEn proxy byter ut certifikatSätt NODE_OPTIONS=--use-system-ca och starta om
Blir utloggad oftaTimeout vid inaktivitetHöj SESSION_IDLE_MINUTES
Ett ställe att se vem som har tillgång till vad, med inloggning, roller och en audit-logg över varje ändring.

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.

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