Ht-Manager - etwas Komfort beim Bearbeiten von htpasswd und htgroup
Um ein Web oder ein Verzeichnis mit Username und Passwort zu schützen, kann man mit Basic Authentication arbeiten. Man kann Benutzer oder Gruppen berechtigen, eine Seite zu öffnen.
Dazu hatte ich kürzlich 2 PHP Klassen zum Verwalten von htpasswd- und htgroup-Dateien veröffentlicht. Diese kann man in Programmierprojekten einsetzen.
Nun habe ich mit jenen Klassen ein Konsolen-Werkzeug in PHP geschrieben, um Benutzer und Gruppen auf etwas bequemere Art und interaktiv im Terminal zu verwalten. Das Tool benötigt keinerlei fremde Werkzeuge, wie openssl oder htpasswd, um die Benutzerpasswörter zu erstellen.
Und so sieht das Ganze aus:
Mit -h oder –help sieht man die unterstützten Parameter. Man wählt mit –folder ein Verzeichnis (Default ist das das aktuelle Verzeichnis) und darin wird eine Datei mit Benutzern und eine für Gruppen verwaltet.
Es gibt ein wenig Comfort.
- Beim Löschen von Benutzern wird gewarnt, wenn dieser in Gruppen ist.
- Bei der Eingabe von Benutzernamen oder Gruppen gibt es eine Vervollständigung: mit der Tab-Taste kommt man schneller ans Ziel.
- Das Auflisten von Benutzern zeigt deren Gruppenzugehörigkit an - das Listing der Gruppen die Mitglieder.
- Eine Check-Funktion zeigt nicht existierende Gruppenmitglieder, User ohne Gruppen.
Dieses lässt sich mit SPC zu einem Binary compilieren. Für Linux werden vorcompilierte 64-Bit Binaries bereitgestellt. Im Projekt-Quellcode ist ein ./compiler/ Verzeichnis in dem der Download und Installation von SPC und das Compilieren zur ausfühtbaren Datei mitgeliefert wird.
Euer Hosting oder lokaler Rechner läuft mit Linux? Dann könnt ihr das Binary dorthin kopieren - nach Möglichkeit in ein Verzeichnis von $PATH. Und (nach SSH-Login) in der Konsole htpasswd- und htgroup-Dateien bearbeiten.
Euer Rechner/ Hosting hat PHP bereits an Bord? Dann kann man auch die gemergte PHP-Datei auf das Zielsystem kopieren und jenes auf der Konsole starten (per
Das Tool ist Freie Software unter GNU GPL 3 und kann kostenlos eingesetzt werden.
Weiterführende Links:
- Github: Sourcecode von htman
- Releases - vorcompiliertes Linux-Binary und gemergte PHP-Datei für Endanwender
- static-php.dev - SPC compiler - macht aus einem PHP-Skript eine ausführbare Datei
- Github: Sourcecode der htpasswd-Klassen
Meine PHP-Klasse zum Verwalten von .htpasswd und .htgroup Dateien
Ich habe so diverse Applikationen, die einen Passwortzugang für ein Backend benötigen.
Für so kleinere Sachen reicht eine .htpasswd-Datei und Basic Authentication. Um diese per PHP zu erzeugen und zu bearbeiten, habe ich keine geeignete Klassen gefunden … ergo schrieb ich sie mal selbst :-)
Das Projekt besteht aus je einer Klasse für die Verwaltung einer .htpasswd Datei und einer für die .htgroups. Sie können diese Dateien auslesen, Gruppen oder User hinzufügen oder aber löschen. Mit diesen PHP-Klassen kann man eine Benutzerverwaltung mit reinen PHP-Mitteln und ohne ein exec() der htpasswd Datei umsetzen.
Die Dokumentation enhält zudem Konfigurationsbeispiele verschiedener Szenarien für .htaccess Dateien.
Ich hoffe, der ein oder andere findet diese Klassen nützlich.
Weiterführende Links:
IML Artikel: IT-Monitoring mit “Freier Software” ist online
Es hat 1.5 Jahre gebraucht vom ersten Entwurf bis zur Veröffentlichung. Scheinbar ist es komplizierter, als gedacht. Aber nun ist es vollbracht: der Artikel ist online.
Ich bin seit 12 Jahren am IML angestellt und erstmals sind Worte wie “Open source” oder “Freie Software” in einem Artikel unserer Instituts-Webseite aufgetaucht. Und das, obwohl seit über 10 Jahren in der Server-IT ausschliesslich Linux und Freie Software zum Einsatz kommt.
Was braucht es, um im Blick zu halten, ob die Infrastruktur rund läuft? Wir verwenden mehrere Monitoring-Werkzeuge für
- Logging
- Cronjobs
- System-Monitoring und
- Applikations-Monitoring
Das System-Monitoring Icinga2 ist unser zentraler Sammelpunkt, bei der Störungsinformationen zusammenfliessen - so hat man alles im Blick, ohne zwischen verschiedenen Fenstern (Tabs) hin- und herspringen zu müssen.
Wir setzen auf Freie Software und stellen im Umkehrzug Eigenentwicklungen als Freie Software zur Verfügung.
Am konkreten Beispiel unseres IT Monitorings wird das gelebte Prinzip von Nehmen und Geben beleuchtet.
JS-Snippet: Http-Request
Hier ein weiterer Javascript-Schnipsel…
Manchmal möchte ich in einer webbasierten Admin eine Schaltfläche haben, die etwas löscht oder eine Aktion auslöst, die aber nicht mit einem GET Request ausgelöst werden können soll. Also mein A-Tag oder Button-Tag soll beispielsweise einen POST request auslösen und Parameter mitgeben können. Aber auch PUT oder DELETE Requests sind möglich.
Die nachfolgende Funktion führt einen Http-Request aus und zeigt den Output in einer DOM-ID oder aber bei Fehlen der ID im gesamten Browser-Fenster. Wobei Letzteres noch den schönen Effekt hat, dass ein F5 im Browser-Fenster den POST request nicht wiederholt.
/** * Make an http request with given method, url, form data. * The response can be shown in a given dom id or in the full browser window. * * @param {string} method http method; eg. GET, POST, PUT, ... * @param {string} url url to request * @param {json} data request body as key -> value in a JSON * @param {string} idOut optional: id of output element in DOM; default: write response in browser * @return void */ async function httprequest(method="GET", url = "", data = {}, idOut = null) { // console.log("httprequest("+method+", "+url+", "+data+", "+idOut+")"); if (method == "POST" || method == "PUT") { var fd = new FormData(); for (var key in data) { fd.append(key, data[key]); } } else { var fd = null; } // Default options are marked with * const response = await fetch(url, { method: method, // *GET, POST, PUT, DELETE, etc. mode: "cors", // no-cors, *cors, same-origin cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached credentials: "same-origin", // include, *same-origin, omit headers: { // "Content-Type": "application/json", // 'Content-Type': 'application/x-www-form-urlencoded', // 'Content-Type': 'multipart/form-data', }, redirect: "follow", // manual, *follow, error referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url body: fd, // body data type must match "Content-Type" header }); // return response.json(); // parses JSON response into native JavaScript objects var responsebody = await response.text(); if (idOut) { document.getElementById(idOut).innerHTML = responsebody; } else { document.open(); document.write(responsebody); document.close(); } }
Und so wird sie verwendet:
Nachfolgendes HTML-Snippet zeigt einen Button. Beim onclick-Event sehen wir die obige Funktion einmal eingebunden.
Man sieht
- die Http-Methode: POST
- die aufzurufende URL: die aktuelle - mittels location.href
- POST-Parameter: als JSON wird die Variable “action” mit dem Wert “backup” übergeben. Mit PHP liesse sich dies mit $_POST['’action’] lesen.
<button class="btn" onclick="httprequest('POST', location.href , {'action': 'backup'})" >Create new backup</button>
Die Funktion ist noch nicht featurecomplete. Sie kann noch erweitert werden, um Http-Request-Header mit zu übergeben. Aber ich hoffe, für den ein oder anderen ist sie bereits in dieser Form nützlich.
Weiterführende Links: