Web-Oberflaeche als Dienst, Anmeldung mit den Proxmox-Benutzern
install.sh --with-webexplorer --port <nummer> richtet pvesnap-web.service ein. Fehlt der Port, bricht das Skript mit einer Erklaerung ab; --port ohne --with-webexplorer, ein Port ausserhalb 1-65535, etwas anderes als eine Zahl und Port 8006 (Proxmox selbst) werden ebenfalls abgefangen - und zwar vor der root-Pruefung, damit ein Tippfehler sofort auffaellt. --help beschreibt jetzt alle Optionen mit Beispielen. Port, Adresse und Anmeldeart stehen in /etc/pvesnap/web.conf und lassen sich dort aendern, ohne die Unit anzufassen. Angemeldet wird mit den Benutzern von Proxmox VE: dieselbe Maske aus Benutzer, Passwort und Realm-Auswahl, geprueft ueber POST /access/ticket auf der lokalen API - also derselbe Weg wie im Proxmox-Webinterface. Alle Realms funktionieren damit automatisch; Zwei-Faktor-Anmeldungen werden abgewiesen statt halb durchgewinkt. Ein gueltiges Passwort allein reicht nicht: zusaetzlich braucht der Benutzer auf dem Gast das Recht VM.Snapshot (geprueft auf /, /vms, /vms/<id> und dem Pool). Sonst koennte jeder Proxmox-Benutzer saemtliche Dateien aller Gaeste lesen. In der Gastliste erscheinen nur erlaubte Gaeste, root@pam sieht wie in Proxmox alles. Anpassbar ueber --require-privilege und --allow-user. Ausserdem: SIGTERM haengt einen offenen Snapshot wieder aus (ohne das bliebe er bei "systemctl stop" eingebunden), und beim Start werden Reste von Prozessen abgeraeumt, die es nicht mehr gibt - parallel laufende Sitzungen bleiben dabei unangetastet. Auf pvetest01 geprueft: Dienststart ueber systemd, Anmeldemaske mit den Realms des Hosts, Abweisung ohne und mit falschen Zugangsdaten (401, protokolliert mit Absender-IP), Zugriff ohne Recht (403 auf Snapshot- Liste und Oeffnen), vollstaendiger Ablauf als Berechtigter bis zum Datei-Download, Abmelden macht die Sitzung ungueltig, und SIGTERM hinterlaesst weder rbd-Maps noch Mountpunkte. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
91bfdea76c
commit
963463a1a1
@@ -68,6 +68,15 @@ button:hover, .button:hover { filter: brightness(1.08); text-decoration: none; }
|
||||
}
|
||||
input[type=checkbox] { width: 1.05rem; height: 1.05rem; }
|
||||
.empty { padding: 2rem 1rem; text-align: center; color: var(--muted); }
|
||||
.login { max-width: 26rem; margin: 3rem auto; }
|
||||
.login .card { padding: 1rem; display: flex; flex-direction: column; gap: .8rem; }
|
||||
.login label { display: flex; flex-direction: column; gap: .3rem; font-size: .9rem;
|
||||
color: var(--muted); }
|
||||
.login input, .login select {
|
||||
font: inherit; color: var(--fg); background: var(--bg);
|
||||
border: 1px solid var(--line); border-radius: 7px; padding: .5rem .6rem;
|
||||
}
|
||||
.login button { margin-top: .3rem; padding: .55rem; }
|
||||
@media (max-width: 640px) {
|
||||
td.when, th.when { display: none; }
|
||||
main { padding: .5rem; }
|
||||
@@ -97,6 +106,29 @@ function pvesnapInit() {
|
||||
document.addEventListener('DOMContentLoaded', pvesnapInit);
|
||||
"""
|
||||
|
||||
LOGIN_FORM = """
|
||||
<div class="login">
|
||||
%(note)s
|
||||
<h2>Anmeldung</h2>
|
||||
<p class="muted">Mit den Benutzern von Proxmox VE - dieselben Zugangsdaten
|
||||
wie im Proxmox-Webinterface.</p>
|
||||
<form method="post" action="/login" class="card" autocomplete="on">
|
||||
<label>Benutzername
|
||||
<input name="username" value="%(username)s" autofocus required
|
||||
autocomplete="username">
|
||||
</label>
|
||||
<label>Passwort
|
||||
<input name="password" type="password" required
|
||||
autocomplete="current-password">
|
||||
</label>
|
||||
<label>Realm
|
||||
<select name="realm">%(realms)s</select>
|
||||
</label>
|
||||
<button class="primary" type="submit">Anmelden</button>
|
||||
</form>
|
||||
</div>
|
||||
"""
|
||||
|
||||
PAGE = """<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
|
||||
Reference in New Issue
Block a user