Jeder Admin (unter Windows) kennt wahrscheinlich das Problem: Windows und die gesamte Microsoft-Software-Schiene bekommt die Updates automatisiert via kostenlosem WSUS (Windows Server Update Services), aber was ist mit Software von anderen Anbietern? Spätestens wenn man an das Java Runtime Environment, den Adobe Flashplayer, oder auch den Adobe Acrobat Reader denkt, vergrößern sich die -ohnehin schon vorhandenen- Sorgenfalten um ein Vielfaches.
Für große Umgebungen gibt es -wie soll es auch anders sein- natürlich entsprechende Programme, um das gesamte System aktuell zu halten. Gerade aber im Bereich der kleineren und mittleren Umgebungen ist soetwas zu teuer.
Die Lösung
…lautet Local Update Publisher (kurz LUP). Obwohl es dieses tolle Tool schon länger gibt, bin ich erst vor ein paar Tagen darüber gestolpert. Damit LUP eingesetzt werden kann, muss ein WSUS Server im Netzwerk aktiv sein und korrekt funktionieren.
LUP kommuniziert mit dem WSUS Server und „checkt“ Pakete in das WSUS-Software-Repository ein, abgesehen davon können mit dem LUP während der Paketerstellung Regeln definiert werden:
a.) Kriterien, ob das Paket auf den Clients schon installiert ist
b.) Auf welchen Rechnern das Paket überhaupt installiert werden soll (z.b. nur auf Clients mit Windows 7, oder nur Clients mit XP Pro SP3)
Signierung
Damit Pakete in den WSUS eingecheckt werden können bzw. die Clients die von uns über den LUP erstellten Pakete überhaupt akzeptieren, müssen die Pakete signiert werden. Dies wiederum setzt voraus, dass ein entsprechendes Zertifikat vorhanden ist.
Auch hier gibt es nun 2 Varianten, wie man dieses Zertifikat erstellen kann:
- Man erstellt eine Kopie des -auf einem Windows Server vorhandenen – Zertifikates für „Code Signing“ (siehe bitte: http://infrablog.escde.net/2011/03/18/deployment-von-msp-updates-uber-wsus-teil-1-konfiguration/) -> Hierfür benötigt man aber die Enterprise Edition der Windows Server!
- Man verwendet das Zertifikat, welches beim Erststart vom LUP automatisch erstellt wird (für Umgebungen mit zb Windows Server STANDARD meiner Meinung nach die empfohlene Methode!)
Ich setze in diesem „How-To“ auf Variante b. -> also auf die Verwendung des „LUP-Zertifikates“.
Installation
Folgende Grundvoraussetzungen sind vor der Installation des LUP zu prüfen:
- WSUS Server 3.0 SP2 vorhanden + einwandfreie Funktion?
- .NET Framework in Version min. 3.5 installiert?
- auf dem Client auf dem man LUP installiert -> WSUS Konsole vorhanden? Hier gibt es dann noch etwas, auf das man unbedingt achten muss. Im August 2012 wurde durch ein Update von MS der WSUS gehärtet (http://support.microsoft.com/kb/2720211). Hat man dieses Update auf dem Server eingespielt, muss man es auch auf dem Client einspielen, von dem aus man den WSUS administriert. (Also dort, wo die WSUS Konsole installiert ist).
- Zuerst müssen wir uns den LUP herunter laden: http://sourceforge.net/projects/localupdatepubl/files/ (hier bitte das MSI File nehmen)
- Dann starten wir die Installation auf einem beliebigen Windows Client (bevorzugt mittlerweile Windows 7!)
- Hierbei kann man die angebotenen Standardwerte einfach übernehmen
Der erste Start des LUP
LUP muss als Administrator (Domänen-Admin) ausgeführt werden.
Im darauffolgenden Fenster muss der Name (Netbiosname) des WSUS Server eingegeben werden. Standard ist ohne SSL. Habt ihr eine sichere Verbindung zum WSUS müsst ihr SSL aktivieren. (Anmerkung: Da LUP mehrere Sprachen beherrscht, kann man ihn – wie man unten sieht- auch auf Deutsch umstellen. Da die deutsche Übersetzung aber teilweise etwas unglücklich ist, rate ich dazu die Einstellung auf Englisch zu belassen bzw. auf Englisch umzustellen).
Habt ihr alles korrekt eingegeben sollte die Verbindung mit dem WSUS Server zustande kommen. Jetzt geht es dann langsam ans Eingemachte. Der LUP versucht nun ein Zertifikat vom WSUS herunter zu laden. Gelingt das nicht, schlägt LUP vor ein eigenes Zertifikat zu erstellen (self signed).
Wir lassen den LUP nun das Zertifikat entsprechend erstellen. Daraufhin öffnet LUP ein Fenster in dem euch das Zertifikat angezeigt wird.Ist das nicht der Fall gehen wir im LUP auf Menü Tools -> Certificate Information.
Unten links in dem nun erscheinenden Fenster klicken wir auf „Export Certificate“ und speichern das Zertifikat unter einem aussagekräftigen Namen ab.
Anmerkung: Wie der Autor von LUP auf seiner Website erwähnt, ist das soeben exportierte Zertifikat in der Standardeinstellung für „all purposes“ –> also für ALLE ZWECKE verwendbar. Dies sollten wir auf „Signature only“ –> also auf „nur signieren“ bzw. in der deutschen Version „Codesignatur“ umstellen.
Umstellen des Zertifikates auf „Codesignatur“
- Unter Windows 7 starten wird die MMC (mit Adminrechten!)
- Wir fügen das Snap-in „Zertifkate“ hinzu (wählen hier dann Computerkonto -> Lokaler Computer -> Fertigstellen -> Ok)
- Wir navigieren in der Zertifikate MMC zu Vertrauenswürdige Herausgeber -> Zertifkate
- Rechtsklick auf Zertifikate -> Alle Aufgaben -> Importieren
- Wir wählen das zuvor exportierte Zertifkat zum Import aus und bestätigen alles mit OK
- Unter Vertrauenswürdige Herausgeber -> Zertifikate sollte nun ein „WSUS Publisher Self signed“ Zertifikat aufscheinen
- Rechtsklick auf das Zertifikat -> Eigenschaften
- Unter Zertifikatszwecke -> Nur für folgende Zwecke aktivieren -> Codesignatur
- Mit Ok bestätigen
- Rechtsklick auf das Zertifikat -> Alle Aufgaben -> Exportieren
- Zertifikat unter einem eindeutigen Namen speichern
- In der Zertifikats MMC das Zertifikat löschen
Das Fenster in der wir auf Codesignatur umstellen (Eigenschaften des Zertifikates) sieht so aus:
Wir verwenden ab hier nur noch das soeben exportierte Zertifikat!
Das Zertifikat auf die Clients bringen
Nachdem ich davon ausgehe, dass in einer Windows Domäne gearbeitet wird, ist der simpelste Weg, das Zertifikat auf die Clients auszubringen, die Verwendung der Gruppenrichtlinien. Wenn man noch Server 2003 bzw. Windows XP Clients einsetzt, müssen die folgenden Schritte von einer Windows 7 Maschine, die sich optimalerweise ebenso in der Domäne befindet, getätigt werden.
Vorarbeiten auf dem Windows 7 Client bzw. WSUS
- RSAT auf Win7 Client installieren (http://www.microsoft.com/en-us/download/details.aspx?id=7887)
- Per Wsus prüfen, dass die CSE (Client Side Extetnsions) auf den Windows XP Clients installiert sind. (KB943729)
- Auf dem Windows 7 Client -> Windows-Funktionen aktivieren deaktivieren -> Tools für die Gruppenrichtlinienverwaltung (unter Remote-Serververwaltungstools -> Featureverwaltungstools) aktivieren -> OK
Eine Gruppenrichtlinie erstellen
Wir starten auf dem Windows 7 Client die MMC (als Domänen-Admin!) und fügen das Snap in „Gruppenrichtlinienverwaltung“ hinzu. Ihr solltet dann soetwas sehen (je nach Komplexität der Domänenstruktur):
In unserem Beispiel, nehmen wir an, dass alle Computer, die über den WSUS versorgt werden in der OU (Gruppenrichtlinie_Computer) enthalten sind. Deshalb passen wir nun diese Richtlinie an:
- Bei Klick auf den Pfeil links neben der Richtlinie klappt dieser Eintrag „auf“ und man sieht die damit Verknüpften Richtlinien.
- Wir klicken die gewünschte Richtlinie mit der rechten Maustaste an an und wählen „Bearbeiten“
Danach sollten wir in etwa soetwas angezeigt bekommen:
- Windows Einstellungen -> Sicherheitseinstellungen -> Richtlinie für öffentliche Schlüssel -> Vertrauenswürdige Herausgeber
- Importieren
- Hier wählen wir dann das zuletzt exportierte Zertifkat (weiter oben nachzulesen)
- Nach dem Importvorgang, klicken wir das Zertifikat mit der rechten Maustaste an und wählen „Eigenschaften“
- Hier prüfen wir nochmals, ob das Zertifikat auf Zweck -> Codesignatur eingestellt ist. Wenn nicht auf Codesignatur umstellen
- Die exakt gleichen Schritte machen wir nochmals für : Windows Einstellungen -> Sicherheitseinstellungen -> Richtlinie für öffentliche Schlüssel -> Vertrauenswürdige Stammzertifizierungsstellen
- Unter Computerkonfiguration -> Richtlinien -> Adminstrative Vorlagen -> Windows Komponenten -> Windows Update -> stellen wir „Signierte Updates aus einem Intranetspeicherort für Microsoft Updatedienste zulassen“ -> AKTIVIERT
Somit haben wir nun also die wichtigen Einstellungen für die Clients erledigt.
Auf dem WSUS Server habe ich die folgenden Schritte manuell erledigt:
- MMC öffnen -> Zertifikate wählen
- Computerkonto
- Lokaler Computer
- Schließen / OK
- Vertrauenswürdige Stammzertifizierungsstellen -> Zertifikate -> Import -> Hier wieder das zuletzt erstelle LUP Zertifikat importieren
- Vertraute Herausgeber -> Zertifikate -> Import -> Abermals das zuletzt erstellte LUP Zertifikat importieren
- Snap in hinzufügen -> Gruppenrichtlinien Objekt Editor -> lokaler Computer
- Einstellen:
- Computerkonfiguration -> administrative Vorlagen -> Windows Komponenten -> Windows Update -> „Signierte Inhalte aus internem Speicherort für Microsoft-Updatedienste zulassen“ aktivieren
Was sollte jetzt funktionieren / geprüft werden
Wir haben in den vergangenen Schritten LUP installiert, alle Anforderungen überprüft und ggf. angepasst, ein Zertifikat erstellen lassen, eine GPO erstellt, die das notwendige Zertifikat für die entsprechende Computer – OU in der Domäne verteilen soll und schließlich auch auf dem Server einige Anpassungen vorgenommen.
Nun gilt es zu prüfen, ob die per GPO verteilten Zertifikate auch den Weg auf die Clients finden, die in der entsprechenden OU abgelegt sind.
Dies lässt sich leicht prüfen, in dem man auf einem beliebigen Client die Zertifikate MMC öffnet und nachschaut, ob unter den vertrauten Herausgebern bzw. auch unter den vertrauenswürdigen Stammzertifizierungsstellen unser Zertifikat auftaucht.
Es muss auf jeden Fall auf den Clients sein, bevor wir weiter machen können.
Anmerkung: Die Gruppenrichtlinien können auf einem Client per Befehl: gpupdate /force zur sofortigen Umsetzung angestoßen werden. Ein gpresult /r liefert u.a. Infos, welche Richtlinien umgesetzt wurden.
LUP starten und Updatepaket erstellen
Ich schicke gleich voraus, dass ich bislang nur mit EXE Paketen gearbeitet habe. Grundsätzlich funktioniert das Deployment mittles LUP so:
- Paket wählen
- Regel definieren, die prüft, ob das Paket auf dem Client schon installiert ist (am besten ging es bis jetzt mit Registrywert DisplayVersion unter Uninstall (genauere Info folgt unten))
- Regel definieren, die festlegt welche Anforderungen an den Client gestellt sind, damit das Paket überhaupt zur Installation angeboten wird (zb. Version von Windows größer oder gleich Win XP SP3)
- Paket für die entsprechende WSUS Gruppe (per LUP Console!!) freigeben (approved)
- Hoffen, dass alles klappt 😉
Detailiertere Vorgangsweise
- LUP starten (als Domänen-Admin!)
- Tools -> Create Update
- Installationsdatei wählen (Zb. Adobe Reader, oder Flashplugin etc.)
- Next
- Ganz wichtig: Unter Command Line können / müssen Parameter eingegeben werden, damit die Installation Silent durchgeführt wird. Dieser Parameter ist bei jedem Programm anders. Bei Flash ist es -install:
- Im nächsten Fenster müssen die Installed Rules angegeben werden. Dies sind die Bedingungen, die festlegen, ob ein Paket auf einem Client bereits vorhanden sind. Es bietet sich an, hier den Regkey (64-Bit Windows!) wobei das HKEY_LOCAL_MACHINE vorgegeben ist:
- SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player ActiveX
- Reg SZ Wert: DisplayVersion
- Equal to
- 11.4.402.287 (natürlich bei neueren Flashplayern anders! bitte Key selbst prüfen!)
zu verwenden.
Wichtig: Für 32-Bit Betriebssyteme muss noch eine zusätzliche Regel definiert werden! Diese sieht sehr ähnlich aus:
- Im nächsten Fenster müssen die Installed Rules angegeben werden. Dies sind die Bedingungen, die festlegen, ob ein Paket auf einem Client bereits vorhanden sind. Es bietet sich an, hier den Regkey (32-Bit Windows!) wobei das HKEY_LOCAL_MACHINE vorgegeben ist:
- SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player ActiveX
- Reg SZ Wert: DisplayVersion
- Equal to
- 11.4.402.287 (natürlich bei neueren Flashplayern anders! bitte Key selbst prüfen!)
Hat man beide Regeln definiert, markiert man beide Regeln (STRG gedrückt halten) , danach klickt man auf Group und wählt „OR“. (Also eine ODER Regel, damit beide Varianten 32 und 64 Bit abgedeckt sind)
Zuletzt muss noch ein weiterer Regelsatz erstellt werden -> „Installable Rules“:
- Hier kann man zb folgendes festlegen:
- Rule Type: Windows Version
- Comparision: Greater than or equal to Windows 7
- Save Rule
Hier würden also nur Windows 7 Clients das Update bekommen.
Ab hier muss man dann eigentlich nichts mehr definieren, sondern kann sich mittels „NEXT“ durchklicken, bis das Paket erstellt wird.
Im LUP klickt man das Paket, welches man „Freigeben“ will mit rechts an und klickt auf „approve“. Schließlich wählt man noch aus, für welche Gruppe von Computern (WSUS Gruppe) das Update freigegeben werden soll und die Sache sollte laufen.
Anmerkung zum Schluss: Die LUP Updates scheinen NICHT im WSUS auf, sondern nur im LUP. Es macht also keinen Sinn, die selbst erstellten Updates im WSUS zu suchen. 🙂
Tips
32 Bit Registry
Bei aktiviertem „32 Bit Registry“ bei den installed rules wurde mir das Update immer wieder angeboten. Lösung: Häkchen nicht setzten
Falls ihr dennoch das Update immer wieder angeboten bekommt, schaut auch eure definierte „Installed rule“ nochmals an. Oft hat man hier einen Schreibfehler (z.b. ein Leerzeichen, wo keines hingehört)
Acrobat Reader
Dem Exe-Installer werden folgende Parameter mitgegeben, damit dieser „silent“ installiert bzw. das EULA automatisch auf „akzeptiert“ gestellt wird:
- /msi EULA_ACCEPT=YES /qn
Adobe Flashplugin ActiveX
Dem Exe-Installer wird folgender Parameter mitgegeben, damit die Installation „silent“ erfolgt:
- -install
Java Runtime Environment
Hier bedienen wir uns folgender Parameter:
- /s /L C:\setup.log
…wobei an sich der Parameter /s hier reicht.
Windows 8
Nachdem ja mit morgigem Tag (26.10.2012) Windows 8 erscheint, habe ich bereits mit der Windows 8 Evalversion getestet. Bevor Ihr von einem WSUS 3.0 SP2 Updates in Richtung Win8 ausbringen könnt, müsst ihr KB2734608 auf dem WSUS Client Rechner (WSUS Konsole) und auf dem WSUS Server installieren. Nachdem das erledigt ist, müssen alle Packages im LUP „resigned“ werden.
Achtung: Das Self signed Serverzertifikat muss eine Schlüssellänge von mindestens 1024Bit haben! (prüfen!).
Bitte achtet darauf, dass ihr genügend Testläufe durchführt, bevor ihr eure Updates in das Produktivnetz ausrollt. Mit wenigen Clients zu testen, die verschiedene Versionen des OS installiert haben, macht hier am meisten Sinn.
Natürlich kann ich keine Verantwortung für eventuelle Probleme/Schäden etc. übernehmen.