Apache Rewrite für zwei Domänen, die gemeinsame Datei-Ressourcen nutzen

Gestern wurden wir mit zwei Websites konfrontiert, die wir um einen Blog ergänzen sollten. Die Webserver-Installation, die wir vorfanden, war interessant und hat uns ein wenig beschäftigt:

Zwei Domain-Namen (alpha.de und beta.de) waren beim Hosting-Provider mit ein und demselben Webserver-Verzeichnis verbunden. Dieses wiederum wies zwei Unterverzeichnisse auf, in denen sich vor allem HTML-Seiten zu den verschiedenen Domänen befanden. Die Idee hinter diesem Setup war wohl, von den Webseiten beider Domänen aus gemeinsame Datei-Ressourcen im Hauptverzeichnis zu nutzen.

Setup zur Nutzung gemeinsamer Datei-Ressourcen durch zwei Web-Domänen auf demselben Webserver

Nennen wir das Hauptverzeichnis mal dir_domains und die Subverzeichnisse dir_alpha und dir_beta.

Die Webseiten von alpha.de und beta.de nutzen gleiche Datei-Ressourcen (CSS-Dateien, Javascripts, PHP-Programme, …). Entsprechende Verzeichnisse fanden sich unter dir_domains:

dir_domains (Webserververzeichnis für Domains alpha/beta)
|__css
|__js
|__php
|__index.php
| ….
|
|__dir_alpha
|        |__index.html
|        |…(HTML-Dateien für die Domäne beta.de)
|        | ….
|__dir_beta
         |__index.html
         |… (HTML-Dateien für die Domäne beta.de)
         |…

Die Datei index.php übernahm die Zugangssteuerung für die Startseiten: Je nach Domain-Anforderung (alpha.de oder beta.de) des Users wurde dieser auf die jeweilige Index-Seite unter dir_alpha oder dir_beta umgelenkt. So weit, so gut – oder eher so schlecht ….

Nach Inaugenscheinnahme der beiden Domänen im Internet war mir klar, warum das so aufgesetzt worden war:

Die Webseiten unter alpha.de bzw. beta.de haben einen ganz ähnlichen Aufbau und nutzen gleiche PHP-Programme und Scripts. Da bei der Anforderung von Ressourcen wie CSS-/JS-/PHP-Dateien Domaingrenzen in der Verzeichnisstruktur des Web-Servers normalerweise nicht überschritten werden dürfen, waren die Web-Designer gezwungen gewesen, beiden Domänen dasselbe Hauptverzeichnis des gehosteten Webserver-Accounts zuzuweisen. Zur Kompensation musste eine Art Umlenkung auf die jeweiligen Verzeichnisstrukturen integriert werden. (Anmerkung am Rande: Die Domängrenzen, im Sinne von Verzeichnisgrenzen, gelten übrigens nicht für Include-Dateien, die in PHP-Programmen nachgeladen werden. Solche Include-Dateien kann man ruhig oberhalb des Domainverzeichnisses unterbringen!).

Was war am Setup schlecht?

Während die Nutzung gemeinsamer Ressourcen durchaus zu befürworten ist, war die “Umlenkung” durch das PHP-Skript schlecht gelöst. Sie funktionierte eigentlich nur für den Aufruf einer der beiden Domän-Namen selbst (Umlenkung auf die jeweilige index.html-Seiten). Die Navigation innerhalb der Webseiten einer Domäne war über relative Pfade gelöst; sobald ein User sich einmal innerhalb einer Domäne bewegte, funktionierte deshalb alles aus Nutzersicht alles bestens.

Aber: Der Aufruf einer spezifischen Seite einer Domäne über eine direkte Eingabe in die Adresszeile des Browsers – z.B. http://alpha.de/infos/impressum.html – funktionierte mit dem vorhandenen PHP-Script nicht. Das Script index.php kümmerte sich nur um die Index-Seiten der Domänen. Es wurde als Index-Datei ja nur dann aktiv, wenn eine der Domän-Adressen alpha.de oder beta.de ohne weitere Zusätze im Browser
aufgerufen wurde.

Lösungsansatz über Apache Rewrite

Bei dem gehosteten Webserver handelte es sich um einen Apache-Server. Eine saubere Lösung für den gewünschten Setup-Ansatz mit geteilten Datei-Ressourcen besteht dann natürlich darin, das Apache Rewrite-Modul (mod_rewrite) zu nutzen. Die Servereinstellungen beim Provider waren so, dass die Rewrite Engine über lokale “.htaccess”-Dateien aktiviert und gesteuert werden konnte. Wir haben dann folgenden einfachen Vorschlag umgesetzt:

Inhalt der .htaccess-Datei für das Verzeichnis dir_domains:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /

RewriteRule ^alpha/(.*)$ - [L]
RewriteRule ^beta/(.*)$ - [L]

RewriteRule ^css/(.*)$ - [L]
RewriteRule ^images/(.*)$ - [L]
RewriteRule ^php/(.*)$ - [L]
RewriteRule ^script/(.*)$ - [L]

RewriteCond %{SERVER_NAME} alpha.de [OR]
RewriteCond %{SERVER_NAME} www.alpha.de
RewriteRule ^$ alpha/index.html [L]

RewriteCond %{SERVER_NAME} alpha.de [OR]
RewriteCond %{SERVER_NAME} www.alpha.de
RewriteRule ^(.*)$ alpha/$1 [NC,L]

RewriteCond %{SERVER_NAME} beta.de [OR]
RewriteCond %{SERVER_NAME} www.beta.de
RewriteRule ^$ beta/index.html [L]

RewriteCond %{SERVER_NAME} beta.de [OR]
RewriteCond %{SERVER_NAME} www.beta.de
RewriteRule ^(.*)$ beta/$1 [NC,L]

 
Die ersten 2 Rewrite-Regeln sorgen dafür, dass keine Umlenkung mehr vorgenommen wird, wenn man sich bereits im Verzeichnisbereich der Seite befindet. Dieser Vorspann ist wichtiger, als man meinen möchte: die nachfolgenden Regeln würden für sich allein zu einer unbegrenzten Iteration von Rewrites führen!

Die nächsten 4 Regeln sorgen dann dafür, dass Verweise auf die gemeinsam genutzten Ressourcen-Verzeichnisse und zugehörige GET-Anforderungen an den Server unangetastet bleiben. Diese Verzeichnisse werden ja aus dem HTML-Code der Webseiten unter dem alpha- bzw. dem beta-Sub-Verzeichnis referenziert; z.B. über relative Pfade.

Danach kommen die eigentlichen Umlenkungsregeln. Wir haben hier die Grundregel befolgt, dass eine oder mehrere Rewrite Conditions sich nur und ausschließlich auf die nächste Rewrite Rule beziehen – also auf genau eine Rewrite Rule! Das wird in der hektik oft übersehen; es gibt keine native Klammerung mehrerer Rewrite Rules zu Rewrite Conditions. Allerdings kann man mit Negationen der Bedingungen und Skip-Zusätzen hinter den Rewrite-Regeln tricksen. Um das Verständnis nicht zu erschweren, haben wir hier auf solche Hacks verzichtet.

Wird keine Dateiname angegeben – ist also der Pfad hinter dem Domain-Anteil leer – wird auf die jeweilige Index-Seite umgelenkt. Sind konkrete Webseiten einer Domäne angefordert, wird auf die gewünschte Datei im jeweiligen Unterverzeichnis verwiesen.

Das war es schon; die Datei index.php kann und sollte danach gelöscht werden. Unser Kunde kann nun 2 Domänen im gleichen Webserververzeichnis nutzen und zwischen beiden Implementierungen gemeinsame Ressourcen teilen. Eigentlich eine nette kleine Geschichte, die ich vielleicht auch mal für eigene Sites nutzen werde – Apache sei Dank!

VMware Workstation WS 11 unter Opensuse Leap 42.1

Habe heute ein Upgrade eines Opensuse 13.1-Systems auf Opensuse Leap 42.1 durchgeführt. Das ging – bis auf einige typische OS 42.1-Probleme, die ich bereits an anderer Stelle in diesem Blog beschrieben habe, ganz gut.

Gestolpert bin ich dann allerdings über ein Problem mit der VMware-Workstation. Die auf dem fraglichen System installierte Version war WS 11.1.0.

Da sich der Kernel gegenüber der Version von 13.1 inzwischen natürlich massiv verändert hatte (aktuelle Leap42.1-Kernelversion 4.1.27), führte der Versuch VMware WS zu starten, zu einer automatisch eingeleiteten Neu-Kompilation der wichtigsten VMware-Module. Dieser Kompilationsversuch scheitert aber leider an dem vmnet-Modul; nachfolgend ein Auszug aus der Log-Datei:

2016-09-26T14:13:52.987+02:00| vthread-4| I120: Successfully extracted the vmnet source.
2016-09-26T14:13:52.987+02:00| vthread-4| I120: Building module with command “/usr/bin/make -j8 -C /tmp/modconfig-jZLoM6/vmnet-only auto-build HEADER_DIR=/lib/modules/4.1.31-30-default/build/include CC=/usr/bin/gcc IS_GCC_3=no”
2016-09-26T14:13:54.615+02:00| vthread-4| W110: Failed to build vmnet. Failed to execute the build command.
….
2016-09-26T14:14:12.914+02:00| vthread-4| I120: Read 17587 symbol versions
2016-09-26T14:14:12.914+02:00| vthread-4| I120: Invoking modinfo on “vmmon”.
2016-09-26T14:14:12.919+02:00| vthread-4| I120: “/sbin/modinfo” exited with status 0.
2016-09-26T14:14:12.919+02:00| vthread-4| I120: Invoking modinfo on “vmnet”.
2016-09-26T14:14:12.924+02:00| vthread-4| I120: “/sbin/modinfo” exited with status 256.
2016-09-26T14:14:13.334+02:00| vthread-4| I120: Setting destination path for vmnet to “/lib/modules/4.1.31-30-default/misc/vmnet.ko”.
2016-09-26T14:14:13.334+02:00| vthread-4| I120: Extracting the vmnet source from “/usr/lib/vmware/modules/source/vmnet.tar”.
2016-09-26T14:14:13.344+02:00| vthread-4| I120: Successfully extracted the vmnet source.
2016-09-26T14:14:13.344+02:00| vthread-4| I120: Building module with command “/usr/bin/make -j8 -C /tmp/modconfig-sDUVWe/vmnet-only auto-build HEADER_DIR=/lib/modules/4.1.31-30-default/build/include CC=/usr/bin/gcc IS_GCC_3=no”
2016-09-26T14:14:14.951+02:00| vthread-4| W110: Failed to build vmnet. Failed to execute the build command.

Dieses Problem lässt sich beheben, ohne gleich für teures Geld auf die WS 12 upgraden zu müssen. Es handelt sich nämlich um einen Fehler, der in einer späteren Version behoben wurde.

Kurz gesagt: Version 11.1.4 der WS runterladen => Installieren => VM-Ware WS auch unter Opensuse Leap 42.1 weiter betreiben !

Open Visual Traceroute, Opensuse Leap 42.1 and sudo – howto – II

In the last article
https://linux-blog.anracom.com/2016/08/16/open-visual-traceroute-opensuse-leap-42-1-and-sudo-howto-i/
of this series I discussed basic steps to get OVT running on an Opensuse Leap 42.1 system. All recipes were based on assigning root rights to the Java-execution of the application’s jar. Root rights were required to perform network packet capturing.

Now, on a multiuser system

  • we want to restrict the access rights to OVT to a group of selected users,
  • we want to improve the startup – such that the selected users do not need to provide the root password.

Note that none of the steps below solves any security problems. It only makes things more convenient.

Change access rights to the OVT files

As in the first article we assume that the OVT-files were placed in a directory “/PATH/TO/OVT” – e.g. “/opt/ovt”.

  • Step 1 – Create a group “ovt” : We create a user group named “ovt” (e.g. with “yast2” or at the commandline with “groupadd”). Then we add the users who later on shall get the privilege to execute “ovtr.sh” – even without giving the root password!
  • Step 2 – Change ownership of “/PATH/TO/OVT” and its subdirectories/files:
    chown -R root.ovt /PATH/TO/OVT
  • Step 3 – Change access rights to “/PATH/TO/OVT” and subdirectories/files:
    chmod -R u+rwx,g+rx-w,o-rwx /PATH/TO/OVT

Changes to /etc/sudoers

We change the file “/etc/sudoers” by using the “visudo” command. (Do NOT edit the “/etc/sudoers”-file directly with an editor – get acquainted with elementary vi-commands if necessary!) I only show options which have an impact on the execution of the “ovtr.sh” file, which starts the OVT Java-program. I do not care about other settings and restrictions in comparison to the standard /etc/sudoers file Opensuse delivers.

  • Step 4 – Add a “Default” definition to the sudoers file:
    Below the last line of existing DEFAULT-definitions in the standard “/etc/sudoers”-file of Opensuse add a line
     
    Defaults!/PATH/TO/OVT/ovtr.sh env_keep += “DISPLAY XAUTHORIZATION XAUTHORITY”
     
    (With the double quotation marks! And, of course, you have to replace /PATH/TO/OVT by the path where you actually installed OVT.) This settings will later allow to keep up the named environment variables (DISPLAY, XAUTHORITY, …) when the command “ovtr.sh” is executed.
  • Step 5 – Add a group related definition to the sudoers file:
    Add a line at the end of your settings for users and groups saying
     
    %ovt ALL = (root) NOPASSWD: /PATH/TO/OVT/ovtr.sh

The last rule guarantees that all members of the group “ovt” can execute

sudo /PATH/TO/OVT/ovtr.sh

without providing the root passsword (or their own password depending on whether Opensuse’s default setting “Defaults targetpw” is kept up in your “sudoers”-file). The first rule preserves the present environment settings of user (member of group “ovt”) regarding DISPLAY and XAUTHORITY, thus enabling the access to the presently open X11-screen.

Simplify the contents of “ovtr.sh”

After the changes described above we only need a small modification to ovtr.sh:

#!/bin/bash
java -Djava.awt.headless=false  -Xmx512m -jar org.leo.
traceroute.jar

 
This is now all that is required!

Let us test it

me@mytux:/opt/ovt> sudo ./ovtr.sh 
12:43:54.768 [main] INFO  org.leo.traceroute.Main - Open Visual Traceroute 1.6.3 
12:43:54.776 [main] INFO  org.leo.traceroute.install.Env - Java run-time version: 1.8.0_101
12:43:54.777 [main] INFO  org.leo.traceroute.install.Env - NASA World Wind Java 2.0 2.0.0
12:43:54.777 [main] INFO  org.leo.traceroute.install.Env - /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
12:43:54.777 [main] INFO  org.leo.traceroute.install.Env - OS:Linux / arch:amd64
Locale en_GB
12:43:57.230 [SwingWorker-pool-1-thread-1] INFO  o.leo.traceroute.core.geo.GeoService - Use geoip db /root/ovtr/GeoLiteCity.dat which is 0 day(s) old
12:43:58.818 [pool-2-thread-1] INFO  o.leo.traceroute.core.ServiceFactory - Try using device eth0 null
12:43:59.056 [pool-2-thread-2] INFO  o.leo.traceroute.core.ServiceFactory - Try using device br0 null
12:43:59.251 [pool-2-thread-3] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr_vmw null
12:44:00.389 [pool-2-thread-8] INFO  o.leo.traceroute.core.ServiceFactory - Try using device vmnet1 null
12:44:01.488 [pool-2-thread-9] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr1 null
12:44:02.589 [pool-2-thread-10] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr2 null
12:44:03.691 [pool-2-thread-11] INFO  o.leo.traceroute.core.ServiceFactory - Try using device vmnet3 null
12:44:04.799 [pool-2-thread-12] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr3 null
12:44:05.908 [pool-2-thread-13] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr4 null
12:44:07.027 [pool-2-thread-14] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr5 null
12:44:08.124 [pool-2-thread-15] INFO  o.leo.traceroute.core.ServiceFactory - Try using device virbr6 null
12:44:09.231 [pool-2-thread-17] INFO  o.leo.traceroute.core.ServiceFactory - Try using device lo null
12:44:11.467 [AWT-EventQueue-0] INFO  org.leo.traceroute.Main - Startup completed in 16704ms

 
ovt6

Great !

Final convenience steps

We eventually add the path of our OVT installation to the system path variable or tell the users of group “ovt” to add it to their environment.
Another way for a user to simplify the OVT startup would be to put a small script “ovsh” in his home directory with just the lines :

#!/bin/bash
sudo /opt/ovt/ovtr.sh

Then he/she may start OVT by executing “ovsh”. The only difference is that we do not need to type the “sudo”.

Security?

In this article we have made the startup of OVT more convenient by using the /etc/sudoers” file. We also restricted access to OVT to members of a group. Still: Java is executed with root rights. This is something I, personally, do not like because of security reasons. The next article, therefore, concentrates on the possibility to start OVT in a chroot jail.

Windows 7 Updates – ein erzwungener Blick ins alltägliche Leiden vieler Zeitgenossen …

Es gibt Tage, in die der Ärger schon einprogrammiert ist. Zu solchen Tagen gehören oftmals solche, an denen man sich gezwungenermaßen mit Windows auseinandersetzen muss. Ich war vorgewarnt: Eine gute Bekannte schafft es seit ca. 6 Monaten nicht mehr, ihr WIN 7-System auf den neuesten Stand zu bringen. Nach ihrer Aussage werkelt der PC Ewigkeiten vor sich hin – von 2 CPU-Kernen ihres Laptops sei einer immer ausgelastet. Aus dem Bereich des Windows-Update-Tools kämen zudem laufend Fehlermeldungen … Sie wisse nicht mehr, was sie tun solle … (Den Rat, auf Linux zu setzen, mag sie leider aber immer noch nicht annehmen …). Tja, mir fällt da nur der Satz ein: Drum prüfe, wer sich und seinen PC ewig bindet.

Aber kein Grund zur Schadenfreude: Gestern traf es mich selber. Ich war gezwungen im Zuge von Arbeiten für einen Kunden mal wieder meine 2 Windows 7-Systeme anzuwerfen. Beide laufen unter VMware – eines auf einem Linux-PC, das andere auf einem Linux-Laptop. Das letzte Mal hatte ich das erste Windows-System Anfang März 2016 gestartet – zum Updaten – aber auch da waren schon 2 Monate ohne Benutzung ins Land gegangen. Also habe ich seit Januar dieses Jahres ohne jeglichen Einsatz von Windows gelebt; eigentlich ein Grund zur Freude! Aber Windows wäre nicht Windows, wenn es keine Probleme gäbe – das dicke Ende kam dann prompt.

Im März hatte ich das Windows-System während einer Fernsehsendung sich selbst überlassen und den Update-Prozess nicht so genau verfolgt. Möglicherweise existierte das Problem, das ich jetzt feststellen musste, damals schon. Win 7 benötigte nach dem gestrigen Neustart einige Zeit, um festzustellen, dass es ca. 35 Updates einspielen muss. OK, nicht so verwunderlich. Also: Download und Installation gestartet. Dann vergingen Stunden (!) – ohne dass irgendetwas erkennbar Sinnvolles passierte.

Ein Blick in den Task Manager ergab: Ein “svhost.exe”-Prozess rödelte und rödelte auf dem System vor sich hin. Und wie bei meiner Bekannten ziemlich CPU-intensiv: Von 2 CPU-Kernen, die ich VMware zur Verfügung gestellt hatte, war einer immer zu 100% ausgelastet, manchmal aber auch beide. Die Nutzung des RAMs (4GByte) variierte oberhalb von 80 % bis hin zu 95%. Ohne jede Fortschrittsanzeige. Ein paralleler Blick auf unsere Firewall und unseren Router zeigte währenddessen so gut wie keine Netzaktivität.

Ich habe dann testweise mein anderes (ebenfalls virtualisiertes) Windows-7-System auf dem Laptop gestartet. Das gleiche Chaos – über Stunden. Auf dem PC-System habe ich dann nach 3 Stunden den Update-Prozess abgebrochen; es wurden dann drei kleinere Updates von 5 erfolgreich installiert; für 2 weitere kamen Fehlermeldungen, der Rest der 35 Updates wurde als abgebrochen angezeigt. Ein erneuter Versuch, Updates zu such und zu laden, mündete dann erneut in einen nicht enden wollenden Suchvorgang, erst mit hoher CPU-Auslastung durch einen msinstaller-Prozess, dann wieder svchost.exe – ohne jeden erkennbaren Fortschritt. Ich habe dann entnervt abgeschaltet.

Der einzige Trost: Ich war und bin nicht allein. Offenbar gab und gibt es seit Juli 2015 (!) regelmäßig Probleme mit Windows 7 und automatischen Updates. Ich gebe als Beleg nur 2 Links zu relativ aktuellen Blogs an, die gleichzeitig Hinweise zur Problembehebung enthalten; die Trefferliste von Betroffenen, die sich im Internet zu Schlagwörtern wie “windows 7 updates slow high cpu” äußern, ist aber gigantisch :

https://alexanderschimpf.de/windows-7-update-es-wird-nach-updates-gesucht
http://www.borncity.com/blog/2016/07/17/windows-7-und-die-langsame-update-suche-july-2016/comment-page-1/

Dass es auf manchen Systemen noch zu ganz anderen gravierenden Problemen mit Windows 7 Updates kommen kann, illustrieren folgende Artikel
http://www.computerworld.com/article/3070446/windows-pcs/windows-update-on-windows-7-is-still-a-problem.html
https://blog.botfrei.de/2016/05/microsoft-update-fuer-windows-7-sorgt-fuer-probleme/

Im übrigen scheint auch Win 10 von Update Problemen betroffen zu sein:
https://www.quora.com/Microsoft-Windows-10-Why-is-Windows-10-update-extremely-slow
https://support.microsoft.com/de-de/kb/3102810
http://www.itpro.co.uk/operating-systems/25802/15-windows-10-problems-and-how-to-fix-them-5

Was bin ich froh, dass ich mich mit dieser Art von Problemen normalerweise nicht auseinandersetzen muss! Mir tun die (z.T. regelmäßig) Betroffenen ehrlich leid.

Lösung für Win 7

Ich bin dann heute dem Ratschlag der Artikel hinter den beiden ersten Links gefolgt:

  • Schritt 1: Das Windows Update Tool über die Systemsteuerung (temporär) so einstellen, dass es nicht nach neuen Updates sucht.
  • Schritt 2: manueller Download folgenden Paketes, das viele Updates bündelt und einer Art Service Pack für Win 7 [64Bit] entspricht:
    windows6.1-kb3172605-x64_26f4cc7831a0d76393445b7b0a1a3ed5cd5b4047.msu
    Link:
    http://download.windowsupdate.com/d/msdownload/update/software/updt/2016/07/windows6.1-kb3172605-x64_26f4cc7831a0d76393445b7b0a1a3ed5cd5b4047.msu
    (siehe auch: https://alexanderschimpf.de/windows-7-update-pack)
     
    Nachtrag 29.09.2019: Nutzer eines 32Bit-Windows-7-Systems müssen sich folgendes Paket herunterladen und installieren:
    http://download.windowsupdate.com/d/msdownload/update/software/updt/2016/07/windows6.1-kb3172605-x86_4a9464688e111c4c1f63f94b543495f15ce6558d.msu
  • Schritt 3: Doppelklick auf die heruntergeladene Datei. Es öffnet sich ein rel. kleines, abgeundetes Fenster des Win 7 Update-Prozesses. Und der beginnt leider erneut mit der stundenlangen Suche nach Updates … grrr .. Die automatischen Update-Prozesse, die das Chaos verursachen laufen also noch.
  • Schritt 4: Taskmanager starten (Ctrl-Alt-Delete) => alle Prozesse anzeigen lassen und nach CPU-Verbrauch sortieren => den führenden “svchost.exe”-Prozess, der praktisch einen CPU-Kern (oder die ganze CPU) auslastet, manuell beenden.
  • Schritt 5: Erneuter Doppelklick auf die heruntergeladenenn msu-Datei. Leider kommt dann typischerweise noch eine Warnung des Typs: “Only one instance of wusa.exe is allowed to run” => Task-Manager => Prozessanzeige => alphabetisch sortieren => wusa.exe-Prozess beenden.
  • Schritt 6: Erneuter Klick auf die heruntergeladene msu-Datei => es öffnet sich nun ein (rechteckiges) Fenster, das nach wenigen Augenblicken eine Bestätigung zur Installation anfordert => Installation durchführen lassen.

Dann passiert tatsächlich was. Nach relativ kurzer Zeit (bei mir ca. 2 Minuten) ist die Installation fertig. Nach dem bei Windows üblichen
kompletten Systemneustart den Abschluss der Installation abwarten. Danach einloggen und die Einstellungen zum Windows-Update wieder ändern; bei mir “Nach Updates suchen, aber Zeitpunkt zum Herunterladen und Installieren manuell festlegen”. Dann erneut nach Updates suchen lassen.

Das Positive war, dass die Suche nun nur ca. 1 bis 2 Minuten dauerte. Merkwürdig allerdings, dass nun auf einmal 45 Updates gefunden wurden, die noch zu installieren waren (ohne die optionalen). Also deutlich mehr als ursprünglich erkannt. Über die Gründe kann man nur spekulieren: Vielleicht setzten die neuen Updates die vorherige Installation anderer Updates voraus – und Windows ist nicht in der Lage, das vernünftig zu organisieren. Oder schlicht Fehler? Wer weiß.
Das Ganze bestätigt nur, wie seltsam und ineffizient das Windows-Update-System organisiert ist – und wie der User eigentlich hilflos daneben steht. Jedenfalls liefen sowohl der Download und auch die Installation danach wieder zügig durch. Auch für optionale Updates und auch – mit gleicher Vorgehensweise – auf dem zweiten Win 7 System.

Habe aufgrund dieses Erfolges nun meine Bekannte unterrichtet: Auch da führte das Procedere zum Erfolg. Sie kann nun – nach einem halben Jahr Leiden und Arbeitsbehinderung durch hohe CPU-Auslastung eines nie enden wollenden Update-Prozesses – endlich wieder mit ihrem Windows arbeiten. Die Arme …

Fazit

Windows ist immer mal wieder ein Leiden. Gott sei Dank gibt es so nette Leute wie die Herren Dr. Schimpf und Hrn. Born, die die oben genannten Artikel geschrieben haben – Ihnen gebührt Dank für ihre Versuche und Tests. Wie einer von Ihnen sagte: Zumindest bis zum nächsten patch day …

Und zum Abschluss noch folgende Feststellung: Würde sich jemand mal die Mühe machen, die durch die Windows-Update-Probleme entstandene Arbeitsbehinderung für betroffene Normal-User in Deutschland zu ermitteln und hochzurechnen, so würde man wahrscheinlich feststellen, dass die Nutzung von Win 7 im letzten Jahr massive volkswirtschaftliche Schäden verursacht hat. Neben verlorener Arbeitszeit ist auch der verursachte überflüssige Stromverbrauch zu nennen.

Ein Grund mehr, sich über sein Linux zu freuen – und den relativen Komfort der dortigen Paket-Manager zu genießen.

OpenSSH – lesenswerte Website zur Härtung der Konfiguration

Immer wieder mal tauchen Fragen zu Einstellungen von (Open-) SSH in den Dateien “/etc/sshd_config” oder der “/etc/ssh/ssh_config” auf, mit denen sich SSH härten lässt. In der letzten Zeit haben im Besonderen Parameter an Bedeutung gewonnen, die sich auf die Auswahl von Algorithmen, vordefinierten FFC-Parametergruppen oder Hash-Verfahren für den initialen Schlüsselaustausch im Rahmen des Diffie-Hellman-Verfahrens beziehen.

Es gibt zu den Einstellmöglichkeiten von OpenSSH eine nützliche Webseite, die das Wichtigste ausführt:
https://stribika.github.io/2015/01/04/secure-secure-shell.html

Was immer man ansonsten über die Tonlage des Artikels denkt: Hier erfährt man etwas über SSH-Parameter, über die man als Systemadministrator vielleicht noch nicht in aller Konsequenz nachgedacht hat. Schon das allein macht den Artikel interessant und lesenswert.