PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Automatische Update-Benachrichtung für Rootserver

Zur Zeit beschäftigt mich ja das Rootserver-Setup. Da nutze ich natürlich die Gelegenheit und poste ein paar Server-Essentials. Mit PHP hat das ganze natürlich nur am Rande zu tun, aber ein sauber aufgesetzter Webserver, auf dem aktuelle Sicherheitspackages installiert sind, ist die halbe Miete für eine ordentlich laufende PHP-Applikation.

Für so ziemlich alle Betriebssysteme (gerade die mit Enduser-GUI) gibt es zahlreiche Tools, die den Benutzer oder Admin erinnern, das neue Update-Pakete bereitstehen. Denn das ist tatsächlich die größte Schwachstelle, wenn es um Patches geht: Der Admin, der daran denken muss, sie auch einzuspielen.

Das A und O beim Package einspielen ist die Geschwindigkeit. Lange Wartezeiten sind ein K.O. Kriterium, denn Sicherheitslücken werden oft in kürzester Zeit von Script-Kiddies oder anderen Bösewichten und Halunken  (Cool das wollte ich schon immer mal schreiben ;) ausgenutzt. Schnell reagieren ist also alles. Nichts ist ärgerlicher als ein infiltrierter Server auf Grund einer Sicherheitslücke, die schon längst gepatcht sein könnte.

Wie erfährt also der Admin nun von aktualisierten Packages? Da gibt es zum Beispiel cron-apt. Verlinkt habe ich eine ziemlich gute Einführung ins Thema von meinem Namensvetter Tim Bormann. cron-apt kann von einer Benachrichtungs-E-Mail bei bereitstehenden Packages bis hin zum automatischen Einspielen der selben so ziemlich alles automatisieren.

Ich muss zugeben, das dieses Paket existiert weiss ich erst seit wenigen Wochen. Bis dahin hatte ich mir schon selbst eine Lösung gebastelt. Ihr wisst, ich teile gerne und genau deshalb stelle ich meine Lösung zum Download bereit:

http://www.phpblogger.net/download/check_updates.sh

Update vom 12.02.2009:

Version 1.1 steht jetzt unter obiger URL bereit. Neu sind folgende Dinge:

  • Der E-Mail Betreff ist um den Hostnamen erweitert (Praktisch, wenn man mehrere Server überwachen möchte)
  • Wenn das mail-Kommando auf dem Server verfügbar ist, wird es bevorzugt. Alternative und Fallback ist weiterhin das sendmail-Kommando.

Die Installation ist ziemlich einfach:

  1. Runterladen
  2. Anpassen (Admin E-Mail eintragen)
  3. auf den Webserver ins Verzeichnis /etc/cron.daily kopieren
  4. Ausführbar machen
  5. fertig

Einmal am Tag wird dann geprüft, ob neue Updates via apt-get bereitstehen. Das Package ist also Pflicht, damit alles funktioniert. Falls Updates bereitstehen, schickt das Script eine Mail an die angegebene E-Mail-Adresse und listet die aktualisierten Packages.

Was es nicht macht, ist eine automatische Installation. Davon halte ich nichts: Admin zu sein bedeutet eben auch ein bisschen Handarbeit, nur dann hat man die volle Kontrolle über seinen Server. Und es kann durchaus vorkommen, das man einen bestimmten Patch oder ein Kernel-Update eben nicht einspielen möchte.

Der Vorteil in meinem kleinen Script ist ganz klar: Es ist übersichtlich und transparent. Im Gegensatz zu fertigen Packages wie cron-apt weiß man ganz genau, was passiert und gibt die Kontrolle nicht aus den Händen - vielleicht nutzt es dem ein oder anderen ja…

PS: Ebenfalls eine interessante Sache mag die Lösung von Macskeeball (englisch) sein: Er verwendet für die Benachrichtigung Twitter…

Ähnliche Artikel:

  1. Mail aus der Mailq löschen
  2. phpMyAdmin: Sicherheits Update 2.11.1.2
  3. Wordpress Quick-Update
  4. SSH Server absichern: Port-Salat
  5. Eine riesen Update-Orgie

Chris meint dazu:

11. Februar 2009 um 15:56

Hat ja echt nicht lange gedauert, bis der Twitter auch hier Einzug gehalten hat. Also so eine Benachrichtigung mag schon nicht schlecht sein und ich bin sehr dankbar, dass sie auch außerhalb von Twitter gibt, aber warum muss man denn gleich wieder den Twitter ins Spiel bringen. Ja ich gebe zu, dass ich ein Feind bin. Ich finde den Twitter überzogen und ich mag ihn nicht. Aber das tut nichts zur Sache. Das Tool ist an sich sehr gut und ich würde es weiterempfehlen. Das Toll in Verbindung mit dem Twitter kann ich nicht beurteilen.

Thomas Kunze meint dazu:

12. Februar 2009 um 08:40

Habe dein Script mal eingebaut.
Aber einmal am Tag ist mir zuwenig. Ich habe
es nach /etc/cron.hourly” geschoben.
Außerdem habe ich noch die Twitter Benachrichtigung eingebaut. Bin mal gespannt wie das klappt. :-) Danke dafür.

timi meint dazu:

12. Februar 2009 um 09:18

Hoffe, es funktioniert alles bei Dir… Hab heut morgen schon wieder eine Update-Benachrichtigung erhalten…

Thomas Kunze meint dazu:

12. Februar 2009 um 09:21

Nachtrag:
Noch besser ist statt sendmail den Befehl mail zu benutzen.
Ich mache da - ” … | mail -s “Updatebenachrichtigung” $email”
Dann hat deine Email auch einen Betreff.
Vielleicht sollte man noch die Priorität anpassen wenn man viele
Mails erhält.

PS. Hast du Twitter?

timi meint dazu:

12. Februar 2009 um 09:28

Ich habe sendmail verwendet weil mein MTA (Exim) keinen Betreff mitgeschickt hat. Werde einen Hinweis in das Script integrieren, Danke Thomas!

PS: Persönlich bin ich wie Chris ein kleiner Twitter-Feind. Finde den Hype überzogen und nutze das Tool daher auch nicht…

timi meint dazu:

12. Februar 2009 um 09:57

Hi Thomas,

habe einen Umschalter eingebaut, der erkennen soll, ob mail installiert ist und dann auch mail verwendet. Fallback ist die bisherige Methode. Ausserdem generiere ich den Hostnamen in den Betreff - denke, das ist praktisch, wenn man mehrere Server betreut.

Willst Du mal testen?

Thomas Kunze meint dazu:

12. Februar 2009 um 11:25

Habs mit gerade angeschaut und sieht gut aus.
Du kannst es noch mit der Priorität erweitern.
Einfach “-a “X-Priority: 1″ hinzufügen. Bei mail() :-)

Gute Arbeit!

PS. Habe gerade meinem Root Server Port Knocking beigebracht.
Deswegen: http://blog.kunze-web.de/blog/irgendwie-habe-ich-keine-lust-mehr/

/Thomas

TreuerLeser meint dazu:

12. Februar 2009 um 12:41

Wieder ein hilfreicher Artikel den ich gebrauchen könnte!
Gibt es sonst noch irgendwelche anderen Sicherheitsmaßnahmen
die man treffen könnte?

Du könntest auch mal ein Artikel über das konfigurieren
eines Servers ausgelegt auf PHP schreiben ;-) !

timi meint dazu:

12. Februar 2009 um 13:16

Ja, diese Woche gibts nochmal einen Artikel zu Backups mit passendem Tool dazu…

Das Setup von PHP ist mittlerweile durch das gute Paket-Management der einzelnen Distributionen super einfach geworden und geht in wenigen Minuten von der Hand.

Das Finetuning ist stark applikationsspezifisch - meiner Meinung nach gibts da kein Allheilmittel-Geheimrezept… Deshalb weiß ich noch nicht, ob ich dazu etwas schreiben möchte…

Sven meint dazu:

17. Februar 2009 um 09:32

Danke für den Artikel und das Script, Die Tipps fand ich jetzt schon sehr nützlich und versuche mich mal dran, das Ganze einzuspielen. Mal sehen, wie viel Erfolg ich damit habe, aber die Anleitung war ja schon mal ganz gut verständlich und ich denke, ich sollte damit klar kommen.

Templates meint dazu:

12. März 2009 um 22:13

Also ich bin ja absolut für die Update Benachrichtigung. Habe jetzt allerdings insgesamt schon 3 Benachrichtigungen bekommen und bin da etwas besorgt, was da noch kommen mag. (Übrigens bin ich auch durch dich darauf gekommen, dass du das hier dargestellt hast. Also vielen Dank!)

timi meint dazu:

13. März 2009 um 14:08

Freut mich, das das Tool so gut ankommt!

Wer auf die Benachrichtungs-Mail reagieren möchte, sollte folgenden Befehl ausführen:

apt-get upgrade

Dann werden die Updates installiert und es sollte erst mal keine Mail mehr kommen…

bkxxl meint dazu:

6. April 2009 um 14:31

Gute Arbeit! :)

PHP Blogger: Twitter: Totale Verdummung oder nützlich? - Ein PHP Blog auf deutsch meint dazu:

29. April 2009 um 12:19

[...] Daten an Clients zu posten. Da muss man aber mit offenen Augen durch die Welt gehen: Wer z.B. seine Serverupdates quer durch die halbe Welt twittert, verrät Angreifern schnell ein mögliches Ziel und [...]

Marcus meint dazu:

3. Mai 2009 um 17:27

Hallo,

schöne Idee - und direkt ein kleiner Vorschlag dazu: übersichtlicher wird die Mail, wenn die Update-Pakete in jeweils einer Zeile stehen. Um das zu erreichen, braucht man nur “upgrade_packages” wie folgt zu erweitern:

upgrade_packages=`apt-get -s upgrade | grep ” ” | sed ’s/ /\n/g’ | sed ‘/^$/d’`
(Erst werden alle Leerzeichen durch Newlines ersetzt, dann werden leere Zeilen gelöscht.)

Wer auf dem Server aus bestimmten Gründen, z.B. HW-Node einer OpenVZ-Installation) keinen kompletten MTA (wie etwa postfix oder exim) haben möchte, könnte mal einen Blick auf das Paket ssmtp werfen.

Unter der DASH (Ubuntu-Standard) muss auch ein wenig an der Syntax gefeilt werden. Mein Skript sieht nun so aus:

#!/bin/sh

email_dest=’admin@meinkleinerserver.de”
email_subject=”`hostname -f`: updates available”

upgrade_available=`apt-get -s upgrade | grep ‘0 upgraded’ | wc -l`
upgrade_packages=`apt-get -s upgrade | grep ‘ ‘ | sed ’s/ /\n/g’ | sed ‘/^$/d’`

if [ $upgrade_available = '0' ]; then
if [ `which mail` = '' ] ; then
echo “new updates are available:\n\n$upgrade_packages” | sendmail $email_dest
else
echo “new updates are available:\n\n$upgrade_packages” | mail -s “$email_subject” $email_dest
fi
fi

Viele Grüße,
Marcus (mit frischem Kaffee).

Marcus meint dazu:

3. Mai 2009 um 17:40

Nachtrag:

die Zeile mit sendmail muss natürlich so aussehen, damit’s funktioniert:


echo "Subject: $email_subject\nNew updates are available:\n\n$upgrade_packages" | sendmail $email_dest

Internetagentur meint dazu:

4. Mai 2009 um 11:41

Also, erstmal vielen Dank für das kleine Script. Bei mir scheint es jedenfalls sauber zu laufen.

Thorsten meint dazu:

31. August 2009 um 22:47

Über neue Updates informiert zu werden macht auf jeden Fall Sinn aber einspielen würde ich sie immer manuell. Alles andere führt nur dazu, dass man sich eines Tages fragt, wieso irgendein Service nicht mehr wie erwartet funktioniert.

Benutzt du Cron-APT oder etwas vergleichbares eigentlich noch oder läuft die Seite hier nicht auf deinem Root? Dein Server spuckt in den Headern Apache/2.2.3 (Debian) PHP/5.2.0-8+etch15
aus (ServerTokens mal auf Prod stellen und PHP mit expose_php = off zum schweigen bringen), aktuell sind bei Lenny Apache 2.2.9 und PHP 5.2.6-1.

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung