Das Einspielen von Sicherheitsaktualisierungen ist ein wichtiger Bestandteil bei der Wartung von Computersoftware, besonders wenn es um das Betriebssystem geht. Für lange Zeit war dieser Prozess unter FreeBSD nicht einfach. Fehlerbehebungen mussten auf den Quellcode angewendet werden, danach wurde der Code zu neuen Binärdateien übersetzt und schliesslich mussten diese Dateien neu installiert werden.
Das ist seit längerem nicht mehr der Fall, da FreeBSD jetzt ein
Werkzeug namens freebsd-update
enthält. Dieses
Werkzeug bringt zwei getrennte Funktionen mit sich. Die erste Funktion
ermöglicht die Anwendung von Sicherheitsaktualisierungen im
Binärformat auf das FreeBSD Basissystem, ohne dieses neu zu
übersetzen und zu installieren. Die zweite Funktion
unterstützt Aktualisierungen zwischen Haupt- und
Unterversionen.
Binäre Aktualisierungen sind für alle Architekturen und Releases verfügbar, die aktuell vom FreeBSD Security Team betreut werden. Vor der Aktualisierung auf eine neue Release-Version sollten die aktuellen Ankündigungen zu dem Release gelesen werden, da diese wichtige Informationen zu der gewünschten Version enthalten. Diese Ankündigungen finden Sie unter dem folgenden Link: http://www.FreeBSD.org/releases/.
Wenn eine crontab
existiert, welche die
Eigenschaften von freebsd-update
verwendet, muss diese
deaktiviert werden, bevor die folgende Aktion gestartet wird.
Manche Anwender möchten sicherlich Einstellungen in der
Standard-Konfigurationsdatei unter
/etc/freebsd-update.conf
vornehmen, um
bessere Kontrolle über den
gesamten Prozess zu besitzen. Die Optionen sind sehr gut dokumentiert,
jedoch benötigen die folgenden ein paar zusätzliche
Erklärungen:
Dieser Parameter kontrolliert, welche Teile von FreeBSD auf dem
aktuellen Stand gehalten werden sollen. Die Voreinstellung ist es, den
Quellcode zu aktualisieren, das gesamte Basissystem sowie den Kernel.
Die Komponenten sind die gleichen wie während der Installation,
also würde beispielsweise das hinzufügen von
world/games
an dieser Stelle es erlauben,
Aktualisierungen für Spiele anzuwenden.
Die Verwendung von src/bin
erlaubt es, den
Quellcode in src/bin
aktuell zu
halten.
Die beste Einstellung ist, diese Option so zu belassen, da eine Änderung es bedingt, dass man als Benutzer jede Komponente auflisten muss, die aktualisiert werden soll. Dies könnte katastrophale Folgen nach sich ziehen, da der Quellcode und die Binärdateien dadurch nicht mehr synchron wären.
Fügen Sie Pfade wie /bin
oder /sbin
hinzu, um diese speziellen
Verzeichnisse während des Aktualisierungsprozesses unberührt
zu lassen. Diese Option kann verwendet werden, um zu verhindern, dass
freebsd-update
lokale Änderungen
überschreibt.
Aktualisieren Sie Konfigurationsdateien in den angegebenen
Verzeichnissen nur, wenn diese nicht geändert wurden. Jegliche
Änderung, die der Benutzer daran vorgenommen hat, wird die
automatische Aktualisierung dieser Dateien ungültig machen.
Es gibt eine weitere Option KeepModifiedMetadata
,
die freebsd-update
instruiert, die Änderungen
während der Zusammenführung zu speichern.
Eine Liste von Verzeichnissen mit Konfigurationsdateien, in denen
freebsd-update
Zusammenführungen versuchen
soll. Dieser Verschmelzungsprozess von Dateien ist eine Serie von
diff(1)-Korrekturen, ähnlich wie mergemaster(8) mit
weniger Optionen. Die Änderungen werden entweder akzeptiert,
öffnen einen Editor oder freebsd-update
bricht
ab. Wenn Sie im Zweifel sind, sichern Sie das /etc
Verzeichnis und akzeptieren einfach
die Änderungen. Lesen Sie Abschnitt 25.7.11.1, „mergemaster
“, um
Informationen über das mergemaster
-Kommando
zu erhalten.
In diesem Verzeichnis werden alle Korrekturen und temporären Dateien abgelegt. Für Fälle in denen der Anwender eine Versionsaktualisierung vornimmt, sollte diesem Verzeichnis mindestens ein Gigabyte Festplattenspeicher zur Verfügung stehen.
Wenn dies auf yes
gesetzt ist, wird
freebsd-update
annehmen, dass die
Components
-Liste vollständig ist und nicht
versuchen, Änderungen ausserhalb dieser Liste zu tätigen.
Tatsächlich wird freebsd-update
versuchen, jede
Datei zu aktualisieren, die zu der Components
-Liste
gehört.
Sicherheitsaktualisierungen sind auf einer entfernten Maschine abgelegt und können durch das folgende Kommando heruntergeladen und installiert werden:
#
freebsd-update fetch
#
freebsd-update install
Wenn irgendeine Änderung auf den Kernel angewendet wurde
benötigt das System einen Neustart. Wenn alles gut verlaufen ist,
sollte das System aktualisiert sein und
freebsd-update
kann als nächtlicher
cron(8)-Job ablaufen. Ein Eintrag in der Datei
/etc/crontab
ist für diese Aufgabe
ausreichend:
Dieser Eintrag besagt, dass einmal am Tag
freebsd-update
ausgeführt wird. Auf diese
Weise kann freebsd-update
nur durch die Verwendung
des cron
-Arguments prüfen, ob Aktualisierungen
vorliegen. Wenn Korrekturen existieren, werden diese automatisch auf
die lokale Festplatte heruntergeladen, aber nicht eingespielt. Der
root
-Benutzer bekommt eine Nachricht, damit dieser
die Korrekturen manuell installiert.
Sollte irgendetwas schief gelaufen sein, kann
freebsd-update
den letzten Satz von Änderungen
mit dem folgenden Befehl zurückrollen:
#
freebsd-update rollback
Sobald dieser Vorgang abgeschlossen ist, sollte das System neu gestartet werden, wenn der Kernel oder ein beliebiges Kernelmodul geändert wurde. Dies ermöglicht es FreeBSD, die neuen Binärdateien in den Hauptspeicher zu laden.
Das freebsd-update
-Werkzeug kann nur den
GENERIC
-Kernel automatisch aktualisieren. Wenn
ein selbstkonfigurierter Kernel verwendet wird, muss dieser neu
erstellt und installiert werden, nachdem
freebsd-update
den Rest der Aktualisierungen
durchgeführt hat. Allerdings wird
freebsd-update
den
GENERIC
-Kernel in /boot/GENERIC
erkennen und aktualisieren
(falls dieser existiert), sogar dann, wenn dies nicht der
aktuell verwendete Kernel des Systems ist.
Es ist eine gute Idee, immer eine Kopie des
GENERIC
-Kernels in /boot/GENERIC
aufzubewahren. Das wird
bei der Diagnose von verschiedenen Problemen eine grosse Hilfe sein,
sowie bei der Durchführung von Versionsaktualisierungen mit
freebsd-update
, wie in Abschnitt 25.2.3, „Aktualisierungen an Haupt- und Unterversionen“ beschrieben ist.
Solange die Standardkonfiguration in
/etc/freebsd-update.conf
nicht geändert
wurde, wird freebsd-update
die aktualisierten
Quellcodedateien des Kernels zusammen mit dem Rest der Neuerungen
installieren. Die erneute Übersetzung und Installation ihres
neuen, selbstkonfigurierten Kernels kann dann auf die übliche
Art und Weise durchgeführt werden.
Die Aktualisierungen, die über
freebsd-update
verteilt werden, betreffen nicht
immer den Kernel. Es ist nicht notwendig, den selbstkonfigurierten
Kernel neu zu erstellen, wenn die Kernelquellen nicht durch die
Ausführung von freebsd-update install
geändert wurden. Allerdings wird
freebsd-update
auf alle Fälle die Datei
/usr/src/sys/conf/newvers.sh
aktualisieren.
Der aktuelle Patch-Level (angegeben durch die
-p
-Nummer, die von dem Kommando uname
-r
ausgegeben wird) wird aus dieser Datei ausgelesen.
Die Neuinstallation des selbstkonfigurierten Kernels, selbst wenn
sich daran nichts geändert hat, erlaubt es uname(1), den
aktuellen Patch-Level des Systems korrekt wiederzugeben. Dies ist
besonders hilfreich, wenn mehrere Systeme gewartet werden, da es
eine schnelle Einschätzung der installierten Aktualisierungen in
jedem einzelnen System ermöglicht.
Dieser Prozess entfernt alte Objekt-Dateien und Bibliotheken, was
dazu führt, dass die meisten Anwendungen von Drittherstellern
nicht mehr funktionieren. Es wird empfohlen, dass alle installierten
Ports entweder entfernt und neu installiert oder zu einem späteren
Zeitpunkt mittels ports-mgmt/portupgrade
aktualisiert werden.
Die meisten Anwender werden wahrscheinlich einen Testlauf mittels des
folgenden Kommandos durchführen wollen:
#
portupgrade -af
Dies sorgt dafür, dass alles korrekt neu installiert wird.
Beachten Sie, dass das Setzen der
BATCH
-Umgebungsvariable auf yes
während dieses Prozesses auf jede Eingabe mit
ja
antwortet, was es nicht mehr notwendig macht,
manuell eingreifen zu müssen.
Wenn ein selbstkonfigurierter Kernel verwendet wird, ist der
Aktualisierungsprozess ein kleines bisschen aufwändiger. Eine
Kopie des GENERIC
-Kernels wir benötigt und
sollte in /boot/GENERIC
abgelegt
sein. Wenn der GENERIC
-Kernel nicht bereits im
System vorhanden ist, kann dieser über eine der folgenden Methoden
bezogen werden:
Wenn ein eigener Kernel genau einmal gebaut wurde, ist der
Kernel im Verzeichnis /boot/kernel.old
in Wirklichkeit der
GENERIC
-Kernel. Benennen Sie einfach dieses
Verzeichnis in /boot/GENERIC
um.
Angenommen, direkter Zugriff auf die Maschine ist möglich,
so kann eine Kopie des GENERIC
-Kernels von den
CD-ROM-Medien installiert werden. Legen Sie die Installations-CD
ein und benutzen Sie die folgenden Befehle:
#
mount /cdrom
#
cd /cdrom/X.Y-RELEASE
/kernels
#
./install.sh GENERIC
Ersetzen Sie
mit der richtigen Version der Veröffentlichung, die Sie
verwenden. Der X.Y-RELEASE
GENERIC
-Kernel wird
standardmässig in /boot/GENERIC
installiert.
Falls alle obigen Schritte fehlschlagen, kann der
GENERIC
-Kernel folgendermassen aus den Quellen
neu gebaut und installiert werden:
#
cd /usr/src
#
env DESTDIR=/boot/GENERIC make kernel
#
mv /boot/GENERIC/boot/kernel/* /boot/GENERIC
#
rm -rf /boot/GENERIC/boot
Damit dieser Kernel als GENERIC
-Kernel von
freebsd-update
erkannt wird, darf die
GENERIC
-Konfigurationsdatei in keiner Weise
geändert worden sein. Es wird ebenfalls empfohlen, dass
dieser ohne irgendwelche speziellen Optionen erstellt wird
(bevorzugt mit einer leeren
/etc/make.conf
).
Der Neustart in den GENERIC
-Kernel ist zu
diesem Zeitpunkt nicht notwendig.
Aktualisierungen an Haupt- und Unterversionen können
durchgeführt werden, wenn man freebsd-update
eine Release-Version als Ziel übergibt. Beispielsweise wird das
folgende Kommando das System auf FreeBSD 8.1 aktualisieren:
#
freebsd-update -r 8.1-RELEASE upgrade
Nachdem das Kommando empfangen wurde, überprüft
freebsd-update
die Konfigurationsdatei und das
aktuelle System, um die nötigen Informationen für die
Systemaktualisierung zu sammeln. Eine Bildschirmausgabe wird anzeigen,
welche Komponenten erkannt und welche nicht erkannt wurden.
Zum Beispiel:
An diesem Punkt wird freebsd-update
versuchen,
alle notwendigen Dateien für die Aktualisierung herunter zu laden.
In manchen Fällen wird der Benutzer mit Fragen konfrontiert, um
festzustellen, was installiert werden soll oder auf welche Art und
Weise fortgesetzt werden soll.
Wenn ein selbstkonfigurierter Kernel benutzt wird, produziert der vorherige Schritt eine Warnung ähnlich zu der folgenden:
MYKERNEL
" kernel, which is not a
kernel configuration distributed as part of FreeBSD 8.0-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install"Diese Warnung kann an dieser Stelle problemlos ignoriert
werden. Der aktualisierte GENERIC
-Kernel wird als
ein Zwischenschritt im Aktualisierungsprozess verwendet.
Nachdem alle Korrekturen auf das lokale System heruntergeladen
wurden, werden diese nun eingespielt. Dieser Prozess kann eine gewisse
Zeit in Anspruch nehmen, abhängig von der Geschwindigkeit und
Auslastung der Maschine. Konfigurationsdateien werden ebenfalls
zusammengefügt - dieser Teil der Prozedur benötigt einige
Benutzereingaben, da eine Datei möglicherweise von Hand
zusammengefasst werden muss oder ein Editor erscheint auf dem
Bildschirm zum manuellen bearbeiten. Die Ergebnisse von jeder
erfolgreichen Zusammenfassung werden dem Benutzer angezeigt,
während der Prozess weiterläuft. Eine fehlgeschlagene oder
ignorierte Zusammenfassung wird den Prozess sofort beenden. Benutzer
sollten eine Sicherung von /etc
anlegen und wichtige Dateien später manuell vereinen,
beispielsweise master.passwd
oder
group
.
Das System ist noch nicht verändert worden, alle Korrekturen und Vereinigungen sind in einem anderen Verzeichnis vorgenommen worden. Wenn alle Korrekturen erfolgreich eingespielt, alle Konfigurationsdateien zusammengefügt wurden und es den Anschein hat, dass der Prozess problemlos verlaufen wird, müssen die Änderungen vom Anwender noch angewendet werden.
Sobald dieser Prozess abgeschlossen ist, können die Aktualisierungen über das folgende Kommando auf die Platte geschrieben werden:
#
freebsd-update install
Der Kernel und die Module werden zuerst aktualisiert. Zu diesem
Zeitpunkt muss die Maschine neu gestartet werden. Wenn das System
einen selbstkonfigurierten Kernel verwendet, benutzen Sie das
nextboot(8)-Kommando, um den Kernel für den nächsten
Neustart auf /boot/GENERIC
zu
setzen (welcher aktualisiert wurde):
#
nextboot -k GENERIC
Bevor mit dem GENERIC
-Kernel das System neu
gestartet wird, vergewissern Sie sich, dass alle notwendigen Treiber
für ihr System enthalten sind, um korrekt zu starten (und
schliessen Sie ihn ans Netzwerk an, falls auf die Maschine, die
aktualisiert wird, von der Ferne aus zugegriffen wird). Achten Sie
besonders darauf, dass wenn der vorherige selbstkonfigurierte Kernel
Funktionalität beinhaltet, die von Kernelmodulen zur
Verfügung gestellt wurde, dass diese temporär in den
GENERIC
-Kernel über die Datei
/boot/loader.conf
übernommen werden.
Sie sollten ebenfalls nicht benötigte Dienste, eingehängte
Platten, verbundene Netzlaufwerke, usw. deaktivieren, bis der
Aktualisierungsprozess abgeschlossen ist.
Die Maschine sollte nun mit dem aktualisierten Kernel neu gestartet werden:
#
shutdown -r now
Sobald das System wieder hochgefahren wurde, muss
freebsd-update
erneut gestartet werden. Der Zustand
des Prozesses wurde zuvor gesichert und deshalb wird
freebsd-update
nicht von vorne beginnen, jedoch alle
alten Shared-Libraries und Objektdateien löschen. Um zu diesem
Zustand zu gelangen, setzen Sie das folgende Kommando ab:
#
freebsd-update install
Abhängig davon, ob irgendwelche Bibliotheksversionen erhöht wurden, kann es sein, dass nur zwei Installationsphasen anstatt drei durchlaufen werden.
Nun muss alle Drittanbieter-Software neu erstellt und neu
installiert werden. Dies ist notwendig, da die installierte Software
möglicherweise Abhängigkeiten zu Bibliotheken enthält,
die während der Aktualisierung entfernt wurden. Der ports-mgmt/portupgrade
-Befehl kann verwendet
werden, um diesen Vorgang zu automatisieren. Die folgenden Kommandos
können verwendet werden, um diesen Prozess zu starten:
#
portupgrade -f ruby
#
rm /var/db/pkg/pkgdb.db
#
portupgrade -f ruby18-bdb
#
rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db
#
portupgrade -af
Sobald dies abgeschlossen ist, beenden Sie den
Aktualisierungsprozess mit einem letzten Aufruf von
freebsd-update
. Geben Sie den folgenden Befehl ein,
um alle losen Enden des Aktualisierungsprozesses miteinander zu
verknüpfen:
#
freebsd-update install
Wenn der GENERIC
-Kernel temporär
Verwendung fand, ist dies der richtige Zeitpunkt, einen neuen,
selbstkonfigurierten Kernel zu bauen und über die übliche
Methode zu installieren.
Booten Sie anschliessend die Maschine in die neue FreeBSD-Version. Der Prozess ist damit abgeschlossen.
Das freebsd-update
-Werkzeug kann verwendet
werden, um den Zustand der installierten FreeBSD-Version gegenüber
einer bekannten und funktionierenden Kopie zu vergleichen. Diese
Option vergleicht die aktuelle Version von Systemwerkzeugen,
Bibliotheken und Konfigurationsdateien. Um diesen Vergleich zu
starten, geben Sie den folgenden Befehl ein:
#
freebsd-update IDS >> outfile.ids
Obwohl der Befehlsname IDS lautet, sollte er
in keiner Weise als Ersatz für ein Intrusion Detection System
wie security/snort
angesehen
werden. Da freebsd-update
seine Daten auf Platte
ablegt, ist die Möglichkeit von Verfälschungen
offensichtlich. Obwohl diese Möglichkeit durch die Verwendung
von kern.securelevel
oder die Ablage von
freebsd-update
auf einem Nur-Lese Dateisystem,
wenn es gerade nicht gebraucht wird, eingedämmt werden kann,
besteht eine bessere Lösung darin, das System gegen ein
gesichertes Medium, wie eine DVD oder einen
externen, separat aufbewahrten
USB-Plattenspeicher, zu vergleichen.
Das System wird jetzt untersucht und eine Liste von Dateien
ausgegeben, zusammen mit deren sha256(1)-Hashwerten, sowohl der
von der Release-Version bekannte Wert als auch der des aktuell
installierten Systems. Das ist der Grund dafür, warum die Ausgabe
an die Datei outfile.ids
geschickt wurde. Es
scrollt zu schnell vorbei, um diese mit den Augen zu vergleichen und
bald wird auch der Konsolenpuffer damit überfüllt.
Diese Zeilen sind dazu noch extrem lang, aber das Ausgabeformat kann sehr einfach verarbeitet werden. Um beispielsweise eine Liste von allen Dateien zu erhalten, die sich vom aktuellen Release unterscheiden, geben Sie das folgende Kommando ein:
#
cat outfile.ids | awk '{ print $1 }' | more
/etc/master.passwd
/etc/motd
/etc/passwd
/etc/pf.confDiese Ausgabe wurde abgeschnitten, es existieren noch viel mehr
Dateien dazu. Manche dieser Dateien besitzen ganz
selbstverständliche Veränderungen,
/etc/passwd
wurde beispielsweise geändert,
um Benutzer zum System hinzuzufügen. In manchen Fällen kann
es anderen Dateien wie Kernelmodule geben, welche sich geändert
haben, weil freebsd-update
diese aktualisiert hat.
Um bestimmte Dateien oder Verzeichnisse auszuschliessen, hängen
Sie diese an die IDSIgnorePaths
-Option in
/etc/freebsd-update.conf
an.
Diese Vorgehensweise kann als Teil einer ausgeklügelten Aktualisierungsmethode benutzt werden, unabhängig von der zuvor angesprochenen Variante.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.