Skip to main content
Ein niedlicher, verzweifelter Roboter, der das Admin-Passwort vergisst - erstellt mit DALLE-2
Ein niedlicher, verzweifelter Roboter, der das Admin-Passwort vergisst – erstellt mit DALLE-2

Was ist PowerDNS-Admin?

PowerDNS-Admin ist eine webbasierte Schnittstelle zur Verwaltung des PowerDNS DNS-Servers. Es ermöglicht Benutzern, DNS-Zonen und -Einträge über eine benutzerfreundliche Weboberfläche zu verwalten. Es ist in Python geschrieben, verwendet das Flask-Framework und eine SQL-Datenbank, um Daten zu speichern. In einer Kubernetes-Umgebung kann PowerDNS-Admin verwendet werden, um die DNS-Einträge für einen Cluster und seine Ressourcen über ExternalDNS zu verwalten.

Beziehung zwischen PowerDNS-Admin und PowerDNS Server

Im folgenden Diagramm seht Ihr, dass der PowerDNS-Admin die API vom PowerDNS-Server über einen geheimen Schlüssel aufruft (siehe roter Kasten). Der geheime Schlüssel wird in der PowerDNS-Serverkonfiguration definiert.

Stellt die Beziehung zwischen PowerDNS-Admin und PowerDNS Server dar
Beziehung zwischen PowerDNS-Admin und PowerDNS Server

Als Docker-Container ausgeführen

Wenn Ihr PowerDNS-Admin als Docker-Container ausführt, erstellt Docker ein Volume auf dem Hostsystem und erstellt eine Sqlite3-Datenbank. Wenn Ihr euch dann zum ersten Mal in der PowerDNS-Admin-UI anmeldet, müsst Ihr einen neuen Benutzer erstellen, dieser Benutzer erhält die Admin-Rolle.

Vergessen Sie Ihr Passwort, machen Sie sich keine Sorgen!

Keine Panik, da Sqlite3 eine dateibasierte Datenbank ist und das Linux-Rechtekonzept gilt, können die Daten leicht manipuliert werden.

1. Herstellen einer Verbindung dem System auf dem PowerDNS-Admin-Container wird ausgeführt:

#use ssh to connect to your vm like:
ssh exampleuser@10.0.0.17

2. Dann listet die volumes auf und überprüft sie:

#list the docker volumes
docker volume ls

#Similar output like:
DRIVER    VOLUME NAME
local     1a6bf52ae2edfeaa41d662ec674d026e348a1ed62491742923bf52ae22ec674e
local     17fc48e354723bf52ae2edfe17fc48e354723bf5ec674d026e348a1ed62e2edf
local     powerdns-admin

#inspect the docker volume from the powerdns-admin
docker volume inspect powerdns-admin

#Similar Output like:
[
    {
        "CreatedAt": "2023-01-21T10:39:18+01:00",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "powerdns-admin",
            "com.docker.compose.volume": "pdns-admin"
        },
        "Mountpoint": "/var/lib/docker/volumes/powerdns-admin/_data",
        "Name": "powerdns-admin",
        "Options": null,
        "Scope": "local"
    }
]

3. Verbindung zur Sqlite3-Datenbank herstellen:

#Connect to the sqlite3 powerdns-admin database
sqlite3 /var/lib/docker/volumes/powerdns-admin/_data/powerdns-admin.db

4. Tabelle anzeigen:

sqlite> .tables

#Similar output like:
account                 domain_apikey           history
account_user            domain_setting          role
alembic_version         domain_template         setting
apikey                  domain_template_record  user
domain                  domain_user

5. Schema der Benutzertabelle anzeigen:

sqlite> PRAGMA table_info(user);

#Similar output like:
0|id|INTEGER|1||1
1|username|VARCHAR(64)|0||0
2|password|VARCHAR(64)|0||0
3|firstname|VARCHAR(64)|0||0
4|lastname|VARCHAR(64)|0||0
5|email|VARCHAR(128)|0||0
6|otp_secret|VARCHAR(16)|0||0
7|role_id|INTEGER|0||0
8|confirmed|BOOLEAN|1||0

6. Inhalt der Tabelle role aneigen:

sqlite> select * from role;

#Similar output like:
1|Administrator|Administrator
2|User|User
3|Operator|Operator

7. Einen neuen Benutzer mit bcrypt-Hash erstellen:

sqlite> INSERT INTO user (id, username, password, firstname, lastname, email, otp_secret, role_id, confirmed)
VALUES (50, 'artemla', '$2a$12$hx8Qcuo2vq0xdMhFhzLAY********', 'Artem', 'La', 'artemla@showcase.de', '', 1, 0);

Du kannst sehen, dass ich den Benutzer mit der Rolle ID1 (Administrator|Administrator) eingefügt habe.

8. Überprüfen, ob der neue Benutzer erstellt wurde:

sqlite> select * from user;

#Similar output like:
1|admin|$2b$12$HpYpbwpuqlZ.ixfu/hvbI.Rk********|admin|admin|admin@lab.de||1|0
50|artemla|$2a$12$hx8Qcuo2vq0xdMhFhzLAY********|Artem|La|artemla@showcase.de||1|0

9. Meldet euch mit dem neuen Benutzer bei PowerDNS-Admin an.

Was sollte man auf keinen Fall machen?

PowerDNS-Admin Datenbank löschen löscht alle API-Schlüssel und Domain-Zonen, die von External-DNS verwendet werden.

Referenzen:

PowerDNS — https://www.powerdns.com

ExternalDNS — https://github.com/kubernetes-sigs/external-dns

PowerDNS-Admin — https://github.com/PowerDNS-Admin/PowerDNS-Admin

 

Kontaktinformationen

Wenn du mehr über GitOps erfahren möchtest dann kontaktiere uns hier oder füge mich einfach in dein LinkedIn-Netzwerk hinzu!

 

Artem Lajko

Artem Lajko, certified CNCF Kubestronaut and Head of Platform Engineering, specializes in Kubernetes scalability and GitOps-driven workflows. He is the author of Implementing GitOps with Kubernetes. As a Platform Engineering Ambassador, he supports companies and the community in adopting Platform Engineering, Internal Developer Platforms, and related technologies. Passionate about Open Source, he helps organizations choose the right tools, driving tech adoption and innovation.