Beheerpagina (admin.euzos.eu)
FAQ › Profielserver › Beheerpagina · English
Wat is het?
De beheerpagina is het webbeheer van de profielserver, naast de CLI. Ze staat op een eigen domein: https://admin.euzos.eu voor productie (de sandbox heeft een eigen beheerdomein); / stuurt door naar /beheer. Alleen accounts met de rol beheerder kunnen inloggen, met e-mailadres en wachtwoord, bevestigd in de EUZOS-app op een telefoon die aan dat beheerdersaccount gekoppeld is (geen TOTP of externe authenticator-app). Het is eigen code (server/profile/src/admin_page/), werkt zonder JavaScript, en is alleen bereikbaar vanaf de IP-whitelist.
Hoe doe ik…?
Hoe maak ik iemand beheerder?
Op de VPS: euzos-profielserver admin-create <email> (een bestaand, actief account). admins toont de beheerders en hoeveel telefoons elk gekoppeld heeft; admin-delete <email> haalt de rol weg. De beheerder koppelt een telefoon in de EUZOS-app zoals elke gebruiker.
Hoe log ik in?
- Open
https://admin.euzos.eu/(vanaf een adres op de whitelist), vul e-mailadres en wachtwoord in (POST /beheer/inloggen). - De pagina toont een QR-code met
https://admin.euzos.eu/b/<id>en een koppelcode van 6 cijfers, en ververst zich elke 2 s. - Scan hem met de EUZOS-app op je gekoppelde telefoon; de app toont "Inloggen op beheer vanaf <IP>" met dezelfde code. Bevestig met Face ID / vingerafdruk.
- De volgende verversing van dezelfde browser logt je in.
Zonder gekoppelde telefoon kun je niet inloggen (de pagina zegt dat na het juiste wachtwoord). Annuleren op de pagina (POST /beheer/annuleer) of Weigeren in de app breekt af.
Hoe log ik uit?
Met de knop Uitloggen (POST /beheer/uit). Een sessie eindigt ook na 15 minuten zonder klik, na 4 uur hoe dan ook, na een herstart van de server, of als het account geen actieve beheerder meer is.
Wat kan ik op de beheerpagina?
Pagina (pad onder /beheer/) | Wat | Tegenhanger in de CLI |
|---|---|---|
Dashboard (/beheer) | aantallen: accounts per status, beheerders, telefoons, pc-sessies, apps, beheerlogboek in 24 uur | users, devices, pc-sessions, apps |
Accounts (accounts, accounts?q=) | zoeken, maken (accounts/nieuw) | users, user-create |
Account (accounts/<id>) | gegevens; blokkeren/deblokkeren, wachtwoord (optioneel telefoons intrekken), adres wijzigen, het beheerbeleid beheer= zetten/weghalen, telefoons intrekken, pc's afmelden, kluisinformatie en kluislogboek, wissen (AVG, twee stappen) | user-block, user-unblock, password, user-email, admin-policy, vault, user-delete |
Pc-sessies (pcsessies) | alle ingelogde pc's, afmelden (pcsessies/afmelden) | pc-sessions |
Telefoons (telefoons) | alle gekoppelde telefoons, intrekken (telefoons/intrek) | devices, device-revoke |
Appcatalogus (apps) | tonen, zetten (apps/zet), wissen (apps/wis) | apps, app-set, app-delete |
Downloadtokens (downloadtokens) | een verzoek tot intrekken vastleggen (downloadtokens/intrek); tokens en intrekkingen uit het beheerlogboek | download-token |
Beheerlogboek (log) | de laatste 500 regels, met wie het deed | admin-log |
Serverstatus (status) | omgeving, domein, versie, schema, ondertekensleutel, kluis, mail, schakelaars, sessies | key |
Waarom kan ik mijn eigen account niet blokkeren of wissen?
Op zijn eigen account kan een beheerder niet blokkeren, deblokkeren, het wachtwoord of het adres wijzigen, of wissen. Zo sluit niemand zichzelf per ongeluk buiten; gebruik de CLI of een andere beheerder.
Hoe wis ik een account (AVG) op de pagina?
Op de accountpagina: typ het adres opnieuw, en daarna op een aparte pagina "Ja, definitief wissen" (een eenmalig token, 5 minuten geldig). Dan gebeurt precies wat user-delete doet.
Hoe trek ik een downloadtoken in vanaf de pagina?
De pagina legt het verzoek vast in het beheerlogboek (downloadtoken-intrek …) en toont de opdracht voor de pakketserver: sudo euzos-download revoke <jti> [opmerking]. De zwarte lijst staat op de pakketserver, niet op de profielserver. (Een direct eindpunt om in te trekken op de pakketserver is een voorstel voor later, gepland.)
Waarom krijg ik 404 op het beheerdomein?
Je staat niet op de whitelist (Caddy antwoordt van buiten de lijst 404 voor het hele beheerdomein, behalve de twee bestanden voor app-links), of admin_page = no (de standaard in productie tot hij aangezet wordt), of admin_domain is niet ingesteld.
Details
Regels bij inloggen: één foutmelding voor alles (geen opsomming); afremmen op 10 pogingen per netwerk (IPv6 per /64 en /48) en 5 per account per kwartier; Argon2 via dezelfde poort als de rest van de server. Het wachtende verzoek is hoogstens 2 minuten geldig, eenmalig, gebonden aan de browser (cookie __Host-euzos_beheer_wacht, alleen de hash op de server) en het IP-adres. Alleen telefoons van datzelfde account tellen; een andere telefoon krijgt 410. Het ondertekende bericht is EUZOS-beheer-v1, zodat een handtekening voor een pc-login nooit telt voor beheer en omgekeerd.
Sessie: token van 256 bits in de cookie __Host-euzos_beheer (Secure, HttpOnly, SameSite=Strict), alleen de hash in het geheugen, gebonden aan het IP; hoogstens 64 sessies tegelijk.
CSRF: elke POST onder /beheer/ heeft Sec-Fetch-Site: same-origin of een Origin van het beheerdomein nodig, en het CSRF-token van de sessie in het formulier. Het inlogformulier gebruikt een double-submit-cookie (__Host-euzos_beheer_inlog). Doorsturen gaat alleen naar paden onder /beheer. Strikte CSP (script-src 'none').
Domeinen: op het beheerdomein antwoorden alleen /beheer…, /b/<id> en de twee bestanden onder /.well-known/; op het profieldomein geeft GET /beheer… een 308 naar het beheerdomein (tot 26-10-2027, daarna 404). De app-API om te bevestigen (/api/app/v2/admin/…) blijft op het profieldomein, omdat de app alleen met zijn eigen vastgepinde server praat.
Beheerlogboek: elke actie komt in de tabel admin_log met dezelfde (Nederlandse) actienamen als de CLI (gebruiker-blokkeer, wachtwoord, app-zet, …), plus beheer-inloggen, beheer-inloggen mislukt, beheer-uitloggen, pc-afmelden <ref>, apparaat-intrek <id>, downloadtoken-intrek …. De kolom admin_id is het account-id van de beheerder (NULL = de CLI).
Gepland (plan B): een aparte beheer-VPS voor admin.euzos.eu die een afgeschermde beheer-API op de profielserver aanroept (docs/ADMIN-PAGE.md, "Plan B").
Naslag
CLI-opdrachten
| Opdracht | Argumenten | Wat het doet |
|---|---|---|
admin-create | <email> | een actief account de rol beheerder geven |
admin-delete | <email> | de rol weghalen |
admins | — | accounts met de rol, en hun aantal gekoppelde telefoons |
admin-log | — | wat de beheeropdrachten en de beheerpagina veranderden |
Oude namen: beheerder-maak, beheerder-wis, beheerders, beheerlog.
Functies en modules
| Functie / module | Rol |
|---|---|
euzos_profileserver::admin_page::router, gate | routes en de domeinpoort (admin_domain) |
euzos_profileserver::admin_page::login (login, cancel, link_page) | wachtwoordstap, wachtend verzoek, de pagina /b/<id> |
euzos_profileserver::admin_page::pages (show, action) | de GET-pagina's en POST-acties |
euzos_profileserver::admin_page::app (request, confirm, reject) | de app-API om te bevestigen |
euzos_profileserver::admin_page::db (role, set_role, admin_log_by, admin_log_last, search_accounts, counts, schema; ADMIN_ROLE) | databasehulpfuncties |
libs/qr | de QR-code (eigen encoder, als SVG) |
Configuratiebestanden
| Sleutel (serverconfiguratie) | Standaard | Betekenis |
|---|---|---|
admin_page (oud beheerpagina) | aan in lokaal en sandbox, uit in productie | de beheerpagina aan- of uitzetten |
admin_domain (oud beheer_domein) | — | het beheerdomein; zonder nergens een beheerpagina |
apple_app_id, android_package | — | nodig om de app-linkbestanden met /b/* te leveren |
Op de VPS: de whitelist voor het beheerdomein wordt door euzos-whitelist in een Caddy-fragment geschreven; zie Omgevingen en uitrol.
Configuratiesleutels op schijf en getypte bevestigingswoorden zijn sinds 27-10-2026 Engels (bijvoorbeeld
WIS-…→WIPE-…,omgeving=→environment=; docs/ENGLISH.md); de Nederlandse namen blijven geaccepteerd. De draadformaten van de profielserver (pc-regelprotocol, ondertekend profiel, ondertekende telefoonberichten, instellingssleutels) blijven Nederlands.
API-eindpunten
| Methode | Pad | Oud Nederlands pad | Doel |
|---|---|---|---|
| GET | /beheer, /beheer/<pagina> | — (zichtbare paden) | de pagina's |
| POST | /beheer/inloggen, /beheer/annuleer, /beheer/uit, /beheer/<actie> | — | inloggen, annuleren, uitloggen, acties |
| GET | /b/<id> | — | het doel van de QR-link (uitleg zonder de app) |
| GET | /api/app/v2/admin/<id> | /api/app/v1/beheer/<id> | de app haalt het verzoek op |
| POST | /api/app/v2/admin/<id>/confirm | /api/app/v1/beheer/<id>/bevestig | bevestigen ({time, signature}) |
| POST | /api/app/v2/admin/<id>/reject | /api/app/v1/beheer/<id>/weiger | weigeren |
Protocolberichten en formaten
GET /api/app/v2/admin/<id> → {kind: "beheer", session, environment, server, user, admin_ip, phone_ip, same_network, text, code, created, expires, challenge, device}; fouten 401 niet_aangemeld, 410 verlopen, 429, 404 (beheerpagina uit).
Ondertekend met de chipsleutel (ECDSA P-256, SHA-256, DER, base64); de sleutels blijven Nederlands:
EUZOS-beheer-v1
omgeving=<omgeving>
server=<server>
sessie=<id>
beheerip=<admin_ip>
gebruiker=<gebruiker>
tijd=<Unix-tijd van de telefoon>
uitdaging=<uitdaging>
apparaat=<apparaat>
Bevestigen → 200 {ok: true, admin_ip}; 401 (handtekening), 409 (eerst ophalen), 400 (klok wijkt meer dan 2 minuten af), 410, 429.
Zie ook
- docs/ADMIN-PAGE.md
- docs/PROFILE-PROTOCOL.md, "Administration"
- Telefoon-app · CLI · Omgevingen en uitrol
EUZOS