PDNS Manager

Benutzer & Rollen

Der PDNS Manager kennt bewusst nur zwei Rollen: Admin und User. Keine fein granulare Permission-Matrix, weil das in 95 % der DNS-Anwendungsfälle reine Komplexität ohne Mehrwert ist. Die feinere Steuerung passiert über Zonen-Zuordnungen.

Die Rollen

RolleWas sie darf
Admin Sieht und ändert alles: alle Server, alle Zonen, alle Records, alle User, alle Settings, das Audit-Log, die Templates, Branding, ACME-Tokens.
User Sieht nur die ihm zugewiesenen Zonen. Innerhalb der Zone hat er entweder Lese- oder Vollzugriff. Er sieht keine anderen Zonen, keine Server-Admin-Settings, kein Audit-Log und kann keine User verwalten.

User anlegen

Benutzer → Neuer Benutzer. Felder: Username, E-Mail, Passwort (oder leer lassen → Passwort-Reset-Mail wird verschickt, sofern SMTP konfiguriert ist), Rolle.

Zonen-Zuordnung mit Berechtigungs-Level

Bei einem User: Zonen zuweisen. Pro Zone wählst du:

  • Lesen – User sieht die Zone und ihre Records, kann aber nichts ändern. Schreibende API-Calls werden serverseitig mit HTTP 403 abgelehnt – das gilt auch für Records, DNSSEC-Schalter und NOTIFY.
  • Voll – User darf alles innerhalb dieser Zone. Keine Server- oder Setting-Rechte, das bleibt Admin.

Im DB-Modell sieht das so aus (user_zone_access):

user_id  zone_name        permission
17       example.com.     manage
17       intern.example.  read
23       kunde-a.de.      manage

Zwei-Faktor-Auth (TOTP)

Jeder User kann unter Einstellungen → API & Sicherheit → 2FA aktivieren ein TOTP-Verfahren einschalten:

  1. Backend generiert ein Secret und einen QR-Code (über das qrcode-Paket).
  2. User scannt mit seiner App (Aegis, Google Authenticator, 1Password, …).
  3. User gibt einen aktuellen 6-stelligen Code ein → 2FA aktiv.

Beim nächsten Login fragt das Panel nach Username/Passwort und im zweiten Schritt nach dem TOTP-Code. Im Backend läuft das über POST /api/v1/auth/login + POST /api/v1/auth/login/2fa.

Passwort-Reset

Drei Wege:

  1. User selbst: /forgot-password → Mail mit Reset-Link → neues Passwort.
  2. Admin: in der Benutzer-Liste auf einen User klicken → „Passwort zurücksetzen". Setzt entweder ein neues Passwort manuell oder schickt einen Reset-Link.
  3. Notfall (Konsole) – wenn alles weg ist:
docker compose exec backend python -c "
from app.core.database import async_session
from app.models.models import User
from app.core.auth import hash_password
import asyncio

async def reset():
    async with async_session() as db:
        admin = await db.get(User, 1)   # User-ID 1 = erster Admin
        admin.hashed_password = hash_password('neues-passwort')
        await db.commit()
        print('Passwort zurueckgesetzt.')

asyncio.run(reset())
"

Login-Rate-Limit

Seit v2.3.7 sperrt das Backend eine IP nach mehreren fehlgeschlagenen Logins für ein paar Minuten (HTTP 429 mit Retry-After-Header). Brute-Force gegen schwache Passwörter wird damit unattraktiv – legitime User merken davon nichts, weil das Fenster gleitend ist und sich nach erfolgreichem Login zurücksetzt.

Hier ist noch kein Bild hinterlegt. Lege es unter src/assets/screenshots/<dateiname> ab und trage es in der Galerie-Liste ein.