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 Kubestronaut and Platform Engineer at iits-consulting, specializes in GitOps and Kubernetes scalability. He's a published author of the book "Implementing GitOps with Kubernetes", co-founder of connectii.io, and IT freelancer, writing for ITNEXT on Medium. Dedicated to Open Source, Artem helps companies select suitable products, promoting tech adoption and innovation.