LDAPAdmin Directory Browser

LDAPAdmin LDAPAdmin ist ein nettes Tool, was ich nun bereits seit längerer Zeit für mich und für Kunden verwende und ich kann es mittlerweile nur uneingeschränkt weiterempfehlen. Bei LDAPAdmin handelt es sich um ein Windows Tool, das die eher lästige Arbeit bei der Anbindung von Systemen an eine (Windows) LDAP-Authentifizierung etwas vereinfacht.

Es handelt es sich schlicht um einen recht einfach gehaltenen Browser für LDAP Verzeichnise. Man kann sich durch seine gewohnte Windows DC/OU-Struktur klicken und sich die DN zu Computer, User oder Group Objekten direkt in die Zwischenablage kopieren um Sie anschließend direkt für seinen LDAP Filter verwenden zu können. Jedem der schon einmal mit LDAP zu tun hatte, sollte hier zumindest die BaseDN ein Begriff sein.

Der Zugriff LDAP Objekte ist sowohl lesend als auch schreibend möglich. Dadurch geht z.B. auch das setzen von neuen AD-Attributen (z.B. Unix Attribute: UID, HomeDirectory usw.) deutlich schneller, als über die (versteckten?) Bordmittel von Microsoft. Auch das zurücksetzen von Usern Kennwörtern ist selbstverständlich möglich.

LDAPAdmin ist OpenSource und kann hier heruntergeladen werden.

Puppet: Node spezifische Module

Leider immer wieder nötig: Puppet Module bzw. Klassen, die explizit für eine Node benötigt werden. In der Regel wird dabei ein Modul ala “funktion_server21″ gestrikt. Dieses Modul wird dann explizit dem einen Server via Node Definition, ENC oder Hiera zugewiesen. Das bläht Hiera, den ENC oder die Node Definition unnötig auf, obwohl man sich das eigentlich auch sparen könnte.

Hier mein aktuelles Konzept zu diesem Thema, was wirklich extrem simpel ist, dennoch aber wunderbar funktioniert.

# modules/nodes/manifests/init.pp
class nodes {
  if defined("nodes::node::${hostname}") {
    include "nodes::node::${hostname}"
  }
}

Ich habe mir ein Modul “nodes” geschrieben, das prinzipiell auf jedem Host includiert wird. Das Modul hat als einzige Funktion zu prüfen ob z.B. die Klasse node::node::server21 auf dem Puppet Master vorhanden ist. Wenn ja, wird das Modul includiert.

Wichtig an dieser Stelle ist es unbedingt defined() statt defined(Class['nodes::node::nodename']) zu verwenden. Das reine “define()” prüft ob die Klasse grundsätzlich auf dem Puppetmaster vorhanden ist, während die Erweiterte Form mit Class[] prüft, ob die Klasse bereits im Katalog eingebunden ist. Letztes würde natürlich immer ins leere laufen, da die Klasse noch nicht includiert wurde.

Dazu beispielhaft die Klasse für den “server21″.

# modules/nodes/manifests/node/server21.pp
class nodes::node::server21 {
  file { '/etc/apache2/conf.d/deflate.conf':
    ensure => absent,
  }
}

Sollte in der Umgebung ein Overlapping bei den Hostnamen bestehen, lässt sich dieses Prinzip natürlich mit etwas mehr Logik auch mit dem Fact $::fqdn o.ä. (echo $fqdn | sed 's/\.//_//g') realisieren.

Damit hat man nun alle “Sonderkonstrukte” auf einem Blick, zentral an einer Stelle in einem Modul. Diese Klasse kann man nun pauschal auf alle Nodes einbinden lassen.

node default {
        # Include des Moduls
        include 'nodes'

        # Oder alternativ auch via Hiera
        hiera_include('classes')
}

Das ganze kann natürlich auch in jeder Hinsicht erweitert werden. Denkbar wäre auch nicht den Namespace nodes::node, sondern direkt nodes::$hostname zu verwenden und darunter ein komplettes Submodul zu bauen.

XenMobile 9.0: MTC Deployment Script

Bei der Citrix XenMobile MTC (Abkürzung für “Multi-Tentant Console”) handelt es sich um ein XenMobile Deployment-Tool, mit dem man XenMobile DeviceManager (XDM) Instanzen automatisiert ausrollen und mit mehreren Tentants austatten kann.

Um das Deployment der MTC etwas zu erleichtern, habe ich mir erlaubt ein kleines Script zu schreiben. Mit diesem Script ist es nicht länger nötig das Google Web Toolkit, GWT und die Sysinternals nur zum starten des Deployments der MTC extra im Windows Environment bzw. $PATH zu haben. Das Script setzt das korrekte Environment und startet die zdm_mtc.bat.

:: Deployment Script for XenMobile MTC
:: @author: Simon Lauger <simon@lauger.name>
:: @date:   20.08.2014
::
:: Example of C:\xenmobile
:: ##############################################################
:: 18.08.2014  12:47    <DIR>          .
:: 18.08.2014  12:47    <DIR>          ..
:: 18.08.2014  12:21    <DIR>          grails-1.3.7
:: 18.08.2014  12:21    <DIR>          gwt-windows-1.5.3
:: 18.08.2014  11:37    <DIR>          SysinternalsSuite
:: 18.08.2014  12:23    <DIR>          XenMobile_MTC-9.0.0.35278
:: ##############################################################
:: 
@echo off

:: Setting grails and gwt environment 
SET GWT_HOME=C:\xenmobile\gwt-windows-1.5.3
SET GRAILS_HOME=C:\xenmobile\grails-1.3.7
SET SYSINTERNALS=C:\xenmobile\SysinternalsSuite

:: Specify JAVA_HOME (change, if needed)
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_67

:: Include Java and sysinternals in %PATH%
SET PATH=%PATH%;%JAVA_HOME%\bin;%SYSINTERNALS%

:: Change directory 
cd C:\xenmobile\XenMobile_MTC*

:: Start Deployment
zdm_mtc.bat

Für die MTC werden folgende Tools/Pakete benötigt (die Versionen sind zu beachten). Sämtliche Tools sind herunterzuladen und zusammen mit dem Script im Ordner C:\xenmobile zu entpacken.

Aus den Sysinternals werden grundsätzlich nur psexec.exe und psservice.exe benötigt, jedoch sollte es keine Schmerzen bereiten das komplette Archiv herunterzuladen. Achtung: hier unbedingt vorher Lizenz/EULA aktzeptieren (dazu die Files manuell einmalig öffnen)!

Die MTC wird von Citrix leider etwas “stiefmütterlich” behandelt. Bis gestern gab es in der Download Sektion für XenMobile 9.0 keinen Download für den “Device Manager for Multi-Tentant”. Erst nachdem ich im Citrix Forum einen Topic eröffnet hatte wurde der Download nun nachgereicht. Beim “Device Manager for Multi-Tentant” handelt es sich u nahezu die identische Installationsroutine wie für den “normalen” XenMobile DeviceManager. Einzger Unterschied: es wird ein leerer Tomcat, ohne mitgelieferte XDM Instanz (Deployment-File/War-File) installiert.

Ein Deploymentversuch unter dem aktuellen Java 8x JDK brach bei mir im übrigen mit diversen Exceptions (u.a. ClassNotFoundException) ab und scheint derzeit wohl nicht möglich zu sein. Eine Info hierzu seitens Citrix konnte ich nicht finden.

Citrix Receiver 5.9 for iOS released

Receiver 5.9 for iOS

Receiver 5.9 for iOS im AppStore

Vor einigen Wochen hatte ich über das SHA2 Problem mit dem Citrix Receiver unter iOS (sowohl iPhone als auch iPad) berichtet. Dieses Problem ist nun glücklicherweise mit der Receiver Version 5.9 gelöst, die am Montag dieser Woche (16.06.2014) released wurde.

Neben dem Support von SHA2 wird nun auch iOS 7.1 offiziell supported. Eine weitere Neuerung ist die Unterstützung von SmartCards auf iPad Devices.

Neue Funktionen von Version 5.9
iOS 7.1 support
SHA2 Certificate support
Support for single FQDN access implementation
Local proxy support
Receiver now offers smartcard support. The following products and configurations are supported
– Supported readers:
– Precise Biometrics Tactivo for iPad Mini
– Precise Biometrics Tactivo for iPad (4th generation) and Tactivo for iPad (3rd generation) and iPad 2
– Thursby TSS-PK7 and PK8 Smart Card Readers
– Supported smartcards:
– PIV cards
– Common Access Card (CAC)
– Supported configurations:
– Smartcard authentication to NetScaler Gateway with StoreFront 2.x and XenDesktop 5.6 and above or XenApp 6.5 and above.

PHP Man-Pages

Gerade wieder in meinen alten Entwürfen für neue Beiträge gefunden: die PHP Doku im Linux Man-Page Stil. Ich finde das ganze immer wieder sehr hilfreich und praktikabel, gerade beim PHP Coden auf der Shell mit vim.

Die Doku wird als PEAR-Paket bereitgestellt und kann folgendermaßen nachinstalliert werden:

-bash# pear install doc.php.net/pman

Anschließend kann die Doku ähnlich wie bei den Man-Pages über pman nachgeschlagen werden.

-bash# pman recode_string
RECODE_STRING(3)                                                                                                   1                                                                                                   RECODE_STRING(3)

recode_string - Recode a string according to a recode request

SYNOPSIS
       string recode_string (string  $request, string  $string)

DESCRIPTION
        Recode the string $string according to the recode request $request.

...

Eine Integration in vim ist folgendermaßen möglich:

set keywordprg=pman

Dann nur noch über eine Funktion fahren und die K-Taste drücken.