i-doit – Webbasierende ITIL-konforme cmdb mit einigen Hindernissen

In der IT ist die Verwaltung der Infrastruktur, Bezüge der Komponenten, Standorte und sonstigen Abhängigkeiten schon immer ein Problem. Je nachdem aus welchem Blichwinkel das Problem betrachtet wird entstehen neue Probleme. Und hier versucht die CMDB des aktuellen ITIL-Modells anzusetzen. Elemente, ob Kontakte, Computer, Standorte oder sogar Kabel und Stecker werden als logische Elemente in einer Datenbank abgebildet. Der sogenannten Configuration Management Data Base. Diese Elemente, oder Configuration Items (CI´s) genannt, bilden, im Bezug zueinander angeordnet, die logische IT-Struktur der Firma ab. Elemente können nach ITIL nicht einfach gelöscht werden, sondern gehen in einen anderen Status über. Wird zum Beispiel ein neues System geliefert, geht es vom Status Bestellt zu geliefert, in Betrieb zu Ausgemustert und schließlich zu verschrottet. Je nach Art des CI´s kann der Lebenszyklus verschiedener Elemente sehr gut abgebildet und Dokumentiert werden.

Aber nun zu i-doit.

Die im PHP geschriebene Anwendung bildet alle wichtigen Elemente einer CMDB ab. Typen wie Standort, Raum, Host, Server, ja sogar Virtueller Server oder SIM-Karte sind vorhanden. Die moderne und schnelle AJAX-Oberfläche ist sehr komfortabel bedienbar und selbst für Einsteiger schnell zu verstehen. Besonders gut gelöst ist das schnelle und einfache Hinzufügen zusätzlicher Kategorien. Erfordert ein Element zusätzliche Attribute (z.B. Skype-Kennung für das Objekt Person oder Teamviewer-ID für Clients) können diese sehr einfach angelegt und zugewiesen werden.

Leider gibt es jedoch in der Open-Version einige Macken. So erscheinen in der aktuell getesteten Version 0.9.7nach einer LDAP-Synchronisierung mit einem ActiveDirectory plötzlich doppelte Kontakte, die Druckansicht ist nur sehr unzureichend umgesetzt oder die Vorlagen zum gleichzeitigen Erstellen mehrerer CI´s funktionieren nicht. Reaktionen im Entwicklerforum können, wenn sie denn überhaupt erfolgen, auch mal mehrere Tage dauern.

Zusammenfassend überwiegen aber die Vorteile der Kernfunktionen gegenüber den Fehlern. Es kann ja schließlich davon ausgegangen werden das die Bugs früher oder später behoben werden.

Mehr über I-Doit auf der Offiziellen Website http://www.i-doit.org

PHP – Shell Scripte mit root-rechten ausführen – sudo

Wie immer steht am Anfang eine Idee. Bei mir war es der Wunsch, vom Smartphone das kopieren der Speicherkarten meiner Kameras zu starten. Das ganze vollständig zu automatisieren war mir zu riskant, da ich schon noch zwischen Mounten (für Samba), Kopieren und Verschieben der Dateien auf der Speicherkarte unterscheiden wollte.

Alles haben diese Befehle gemeinsam, man benötigt root-rechte zum Mounten und Auswerfen der Speicherkarten. Webserver mit root-rechten betreiben? suexec Modul von Apache nutzen? Alles zu riskant und viel zu kompliziert. Der einfachste weg ist es, ein Shellscript mit root-Berechtigungen vom Webserver aus zu starten. Und das geht am besten mit sudo.

Um das Script /usr/local/sbin/webscript.sh unter root rechten zu starten, muss zuerst der Webserver berechtigt werden, das Script unter root Rechten zu starten. Das geht in der Datei /etc/sudoers. Der Eintrag

apache ALL=(ALL) NOPASSWD: /usr/local/sbin/webscript.sh

berechtigt den Benutzer apache von jedem Quellhost ohne zusätzliche Passworteingabe das Script auszuführen. Funktioniert das, sollte der Host auf localhost begrenzt werden.
Anschließend kann das Script aus PHP mittels

system('sudo /usr/local/sbin/webscript.sh');

oder wenn die Ausgabe direkt im Browser ausgegeben werden soll mit

passtruh('sudo /usr/local/sbin/webscript.sh');

ausgeführt werden. erstellt man nun ein Shellscript das eine CF-Karte mountet, je nach Parameter die Dateien kopiert oder verschiebt und startet es per PHP vom webserver, kannd er Kopiervorgang von jedem http fähigen Gerät aufgerufen werden. So ist ein Szenario denkbar, vom Streaming-Radio mit RSS-Reader komplexe Scripte am Webserver auszuführen.

Bilder mit PHP skalieren – image-Funktionen

Nachdem mich nun mehrere Leute nach einem Image Scaler für PHP fragten, und ja finestpics.de so etwas verwendet, habe ich dazu entschlossen ein kleines Script für genau dieses Problem zu veröffentlichen. Das Script lädt ein Bild in den Speicher, ermittelt Länge und Breite und skaliert das Bild auf die lange Seite ohne Verzerrung. Aber mehr dazu sollte jedem beim lesen des Quellcodes klar werden.

Für die ganze Skalierung werden die Image/gd Funktionen von PHP verwendet. Es sollte ab php4 funktionieren.

Hier gehts zum Script.

finestpics.de Umbau fast fertig

So, es ist fast geschafft. Das alte Layout, basierend auf Tabellen in Tabellen in Tabellen in [...] ist nun fast vollständig auf reines CSS umgestellt. Zugegeben, ich musste so gut wie jede Funktion umschreiben, da die neue Engine URLs im Stiel /funktion/parm1/parm2/parm3 und nicht mehr Seite?parm1=y&parm2=y&parm3=z generiert. Auch sind neue Features wie ein dynamischer Fotostreifen als Header oder die automatische Erstellung des Logo-Footers im Bild dazugekommen. Optimistisch gesehen sollte der Umbau bis Weihnachten abgeschlossen sein.

Schaut es euch an, auf finestpics.de/site liegt die überarbeitete Version.

Mit PHP im IIS unter Windows Server via sicheres LDAP auf ActiveDirectory zugreifen

Wer sollte nicht schon immer mal aus PHP auf ActiveDirectory zugreifen. Und das ganze am besten noch SSL-Geschützt über LDAPS (Port 636). Und das gnaze auch noch auf einem Windows Server 2003 mit IIS … wuah … aber in bestimmten Situationen geht es nicht anders.

Wie man PHP im IIS einbindet werde ich hier nicht beschreiben. Allerdings sollte man das LDAP-Modul auch laden. Dazu entfernt man einfach den Kommentar in der Zeile “;extension=php_ldap.dll”. Aber noch nicht genug. In der Standardeinstellung versucht das LDAP-Modul bei einer Verbindung über SSL das Zertifikat zu prüfen. Dies scheitert meistens und man erhält die Fehlermeldung ” ldap_bind(): Unable to bind to server: Can’t contact LDAP server”. Unschön. Um die Zertifikatsprüfung abzuschalten, erstellt man auf Laufwerk C: des Servers den Ordner  “C:\openldap\sysconf” und legt dort eine Datei namens “ldap.conf” ab. Hier können nun Einstellungen für das OpenLDAP-Modul gesetzt werden. Um die Zertifikatsprüfung abzuschalten, reicht es hier die Zeile “TLS_REQCERT never” einzutragen. Anschließend sollte man den IIS “WWW-Publishingdienst” neustarten.

Eine Verbindung zum LDAP-Server stellt man nun mit PHP wie folgt her:


$ldap->user="user@ad.firma.de"; // Benutzername in form LOGON@DOMÄNE
$ldap->password="12345"; // Passwort des Benutzers
$ldap->server="ad.firma.de"; // LDAP-Server, bei AD-Domänen kann einfach der Domänenname angegeben werden
/* Verbindung mit dem LDAP-Server herstellen */
$ldap->conn=ldap_connect("ldaps://".$ldap->server, 636); // Verbinde mit Server über LDAPS auf Port 636
ldap_set_option($ldap->conn, LDAP_OPT_PROTOCOL_VERSION, 3); // Verwende LDAP Protokoll version 3
ldap_set_option($ldap->conn, LDAP_OPT_REFERRALS, 0); // Referenzen nicht folgen
/* Nun melden wir uns am LDAP-Server an (LDAP-BIND)*/
$ldap->bind=ldap_bind($ldap->conn,$ldap->user,$ldap->password); // Verbindung herstellen

Nun könnte man im LDAP Suchanfragen oder andere Dinge unter den Rechten des Bind-Benutzers starten. Viel Spaß.