Das zeitnahe Einspielen von Sicherheitsaktualisierungen und
die Aktualisierung des Betriebssystems sind wichtige Aspekte der
Systemadministration. FreeBSD enthält das Werkzeug
freebsd-update
, mit dem Sie diese beiden
Aufgaben erfüllen können.
Dieses Werkzeug ermöglicht die Anwendung von
Sicherheitsaktualisierungen im Binärformat auf das FreeBSD
Basissystem, ohne dieses neu zu übersetzen und zu installieren.
Die Aktualisierungen im Binärformat sind für alle Architekturen
und Versionen verfügbar, welche vom FreeBSD Sicherheitsteam
unterstützt werden. Eine Liste der unterstützten Versionen und
der End-of-Life-Daten ist unter
https://www.FreeBSD.org/security/
aufgeführt.
freebsd-update
unterstützt auch die
Aktualisierung des Betriebssystems auf eine neuere Unterversion
sowie eine Aktualisierung auf einen anderen Release-Zweig.
Bevor Sie auf eine neue Version aktualisieren, sollten Sie die
aktuellen Ankündigungen zu dem Release gelesen haben, da diese
wichtige Informationen zu dem entsprechenden Release enthalten.
Ankündigungen finden Sie unter
https://www.FreeBSD.org/releases/
.
Wenn eine crontab
existiert, welche die
Eigenschaften von freebsd-update(8) verwendet, muss diese
deaktiviert werden, bevor das Betriebssystem aktualisiert
wird.
Dieser Abschnitt beschreibt die Verwendung der
Konfigurationsdatei von freebsd-update
. Es
wird gezeigt wie Sie Sicherheitsaktualisierungen einspielen,
oder wie Sie das Betriebssystem auf neuere Haupt- und
Unterversionen aktualisieren können.
In der Regel muss die Konfigurationsdatei von
freebsd-update
nicht bearbeitet werden.
Manche Benutzer möchten die Standard-Konfigurationsdatei
/etc/freebsd-update.conf
trotzdem
anpassen, um bessere Kontrolle über den gesamten Prozess zu
besitzen. Die Kommentare in dieser Datei beschreiben die
verfügbaren Optionen, jedoch benötigen die folgenden ein paar
zusätzliche Erklärungen:
# Components of the base system which should be kept updated. Components world kernel
Dieser Parameter kontrolliert, welche Teile von FreeBSD auf
dem aktuellen Stand gehalten werden sollen. In der
Voreinstellung wird das gesamte Basissystem sowie der Kernel
aktualisiert. Es können auch einzelne Komponenten, wie
src/base
oder src/sys
,
angegeben werden. 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.
# Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. IgnorePaths /boot/kernel/linker.hints
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.
# Paths which start with anything matching an entry in an UpdateIfUnmodified # statement will only be updated if the contents of the file have not been # modified by the user (unless changes are merged; see below). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile
Diese Option aktualisiert nur unmodifizierte
Konfigurationsdateien in den angegebenen Verzeichnissen. Jede
Änderung, die der Benutzer daran vorgenommen hat, wird die
automatische Aktualisierung dieser Dateien verhindern. Es
gibt eine weitere Option
KeepModifiedMetadata
, die
freebsd-update
instruiert, die Änderungen
während der Zusammenführung zu speichern.
# When upgrading to a new FreeBSD release, files which match MergeChanges # will have any local changes merged into the version from the new release. MergeChanges /etc/ /var/named/etc/ /boot/device.hints
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), aber mit weniger Optionen. Die
Änderungen werden entweder akzeptiert, oder öffnen einen
Editor, oder freebsd-update
bricht ab. Im
Zweifelsfall sichern Sie /etc
und
akzeptieren einfach die Änderungen. Lesen Sie
mergemaster(8), um Informationen über
mergemaster
zu erhalten.
# Directory in which to store downloaded updates and temporary # files used by FreeBSD Update. # WorkDir /var/db/freebsd-update
In diesem Verzeichnis werden alle Korrekturen und temporären Dateien abgelegt. Im Falle einer Versionsaktualisierung sollte diesem Verzeichnis mindestens ein Gigabyte Festplattenspeicher zur Verfügung stehen.
# When upgrading between releases, should the list of Components be # read strictly (StrictComponents yes) or merely as a list of components # which *might* be installed of which FreeBSD Update should figure out # which actually are installed and upgrade those (StrictComponents no)? # StrictComponents no
Wenn diese Option 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.
Das Einspielen von FreeBSD Sicherheitskorrekturen wurde
dahingehend vereinfacht, dass der Administrator nun das
gesamte System mit freebsd-update
auf
dem aktuellen Stand halten kann. Weitere Informationen zu
FreeBSD Sicherheitshinweisen finden Sie in Abschnitt 13.11, „FreeBSD Sicherheitshinweise“.
Sicherheitskorrekturen für FreeBSD können wie folgt heruntergeladen und installiert werden. Das erste Kommando prüft, ob noch ausstehende Korrekturen verfügbar sind, und wenn dass der Fall ist, zeigt es welche Dateien davon betroffen wären. Das zweite Kommando wird die Korrekturen auf das System anwenden.
#
freebsd-update fetch
#
freebsd-update install
Wenn während der Aktualisierung Korrekturen am Kernel angewendet werden, muss das System neu gestartet werden, damit der korrigierte Kernel gebootet wird. Wenn die Korrekturen auf laufende Binärdateien angewendet werden, sollten die betroffenen Anwendungen neu gestartet werden, damit die korrigierte Version der Binärdatei geladen wird.
Im Regelfall muss der Benutzer darauf vorbereitet sein,
das System neu zu starten. Um herauszufinden, ob ein
Neustart durch eine Aktualisierung des Kernels erforderlich
ist, führen Sie die Befehle
freebsd-version -k
und
uname -r
aus. Ist die Ausgabe dieser
Befehle unterschiedlich, ist ein Neustart des Systems
erforderlich.
Mit dem folgenden Eintrag in
/etc/crontab
wird das System einmal
täglich nach Aktualisierungen suchen:
@daily root freebsd-update cron
Wenn Korrekturen existieren, werden diese automatisch
heruntergeladen, aber nicht eingespielt. Der root
-Benutzer bekommt eine
Nachricht, damit die Korrekturen überprüft und mit
freebsd-update install
manuell installiert
werden können.
Wenn etwas schief geht, kann
freebsd-update
den letzten Satz von
Änderungen mit folgendem Befehl rückgängig machen:
#
freebsd-update rollback
Uninstalling updates... done.
Wie bereits erwähnt, sollte das System neu gestartet werden, wenn der Kernel oder ein Kernelmodul verändert wurde. Betroffene Anwendungen sollten neu gestartet werden, wenn Binärdateien verändert wurden.
Das freebsd-update
-Werkzeug kann nur
den GENERIC
-Kernel automatisch
aktualisieren. Wenn ein angepasster Kernel verwendet wird,
muss dieser neu erstellt und installiert werden, nachdem
freebsd-update
die Aktualisierungen
durchgeführt hat. Der voreingestellte Kernel ist
GENERIC. Benutzen Sie das Kommando
uname(1) um dies zu überprüfen.
Behalten Sie immer eine Kopie des
GENERIC
-Kernels in
/boot/GENERIC
. Das wird bei der
Diagnose von verschiedenen Problemen sowie bei der
Durchführung von Versionsaktualisierungen eine große Hilfe
sein. Im Abschnitt 23.2.3.1, „Angepasste Kernel unter FreeBSD 9.X und
später“
wird beschrieben, wie Sie eine Kopie des
GENERIC
-Kernels bekommen.
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 eines neuen, angepassten 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
angepassten Kernel neu zu erstellen, wenn die Kernelquellen
nicht durch freebsd-update install
geändert
wurden. Allerdings wird freebsd-update
immer /usr/src/sys/conf/newvers.sh
aktualisieren. Der aktuelle Patch-Level, der mit der
-p
-Nummer bei uname -r
ausgegeben wird, wird aus dieser Datei ausgelesen. Die
Neuinstallation des angepassten Kernels, selbst wenn sich
daran nichts geändert hat, erlaubt es
uname
, 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.
Aktualisierungen einer Unterversion von FreeBSD zur nächsten
Version ist beispielsweise die Aktualisierung von
FreeBSD 9.0 auf FreeBSD 9.1. Die Aktualisierung einer
Hauptversion ist beispielsweise von FreeBSD 9.X auf
FreeBSD 10.X. Beide Arten der Aktualisierungen können
durchgeführt werden, indem man
freebsd-update
eine Release-Version als
Ziel übergibt.
Wenn auf dem System ein angepasster Kernel eingesetzt
wird, stellen Sie sicher, dass eine Kopie des
GENERIC
-Kernels in
/boot/GENERIC
existiert. Im
Abschnitt 23.2.3.1, „Angepasste Kernel unter FreeBSD 9.X und
später“ wird
beschrieben, wie Sie eine Kopie des
GENERIC
-Kernels bekommen.
Wenn Sie das folgende Kommando auf einem System mit FreeBSD 9.0 ausführen, wird das System auf FreeBSD 9.1 aktualisiert:
#
freebsd-update -r 9.1-RELEASE upgrade
Nach der Eingabe des Kommandos ü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:
Looking up update.FreeBSD.org mirrors... 1 mirrors found.
Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
world/base world/info world/lib32 world/manpages
The following components of FreeBSD do not seem to be installed:
kernel/generic world/catpages world/dict world/doc world/games
world/proflibs
Does this look reasonable (y/n)? y
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 angepasster Kernel benutzt wird, produziert der vorherige Schritt eine Warnung ähnlich zu der folgenden:
WARNING: This system is running a "
MYKERNEL
" kernel, which is not a
kernel configuration distributed as part of FreeBSD 9.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 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 verlangt 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 weiter lä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 zu diesem Zeitpunkt noch nicht verändert worden, da alle Korrekturen und Vereinigungen in einem anderen Verzeichnis vorgenommen wurden. 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 und auf die Platte geschrieben werden:
#
freebsd-update install
Der Kernel und die Module werden zuerst aktualisiert.
Wenn das System einen angepassten Kernel verwendet, benutzen
Sie nextboot(8), um den Kernel für den nächsten
Neustart auf /boot/GENERIC
zu
setzen:
#
nextboot -k GENERIC
Bevor das System mit dem
GENERIC
-Kernel neu gestartet wird,
vergewissern Sie sich, dass für den Neustart alle
benötigten Treiber enthalten sind. Falls auf die
Maschine aus der Ferne zugegriffen wird, stellen Sie
sicher, dass das System ordnungsgemäß an das Netzwerk
angeschlossen ist. Achten Sie besonders darauf, dass wenn
der angepasste Kernel Funktionalität beinhaltet, die
normalerweise von Kernelmodulen zur Verfügung gestellt
werden, dass diese temporär über
/boot/loader.conf
in den
GENERIC
-Kernel übernommen werden.
Zudem wird empfohlen, nicht benötigte Dienste, eingehängte
Platten und verbundene Netzlaufwerke zu 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 ist, muss
freebsd-update
erneut gestartet werden.
Da der Zustand des Prozesses zuvor gesichert wurde, wird
freebsd-update
nicht von vorne
beginnen, sondern mit der nächsten Phase fortfahren und
alle alten Bibliotheken und Objektdateien löschen.
#
freebsd-update install
Abhängig davon, ob irgendwelche Bibliotheksversionen erhöht wurden, kann es sein, dass nur zwei Installationsphasen anstatt drei durchlaufen werden.
Die Aktualisierung ist nun abgeschlossen. Wenn es sich hierbei um eine Aktualisierung auf eine neue Hauptversion handelt, müssen alle Ports und Pakete neu installiert werden. Dieser Vorgang wird in Abschnitt 23.2.3.2, „Aktualisierung der Pakete nach einem Upgrade auf eine Hauptversion“ beschrieben.
Stellen Sie vor der ersten Benutzung von
freebsd-update
sicher, dass eine
Kopie des GENERIC
-Kernels in
/boot/GENERIC
existiert. Wenn ein
angepasster Kernel erstmalig gebaut wurde, ist der Kernel
in /boot/kernel.old
der
GENERIC
-Kernel. Benennen Sie
dieses Verzeichnis einfach in
/boot/GENERIC
um.
Wenn bereits mehrfach ein angepasster Kernel gebaut
wurde, oder nicht bekannt ist wie oft ein angepasster
Kernel gebaut wurde, behalten Sie besser eine Kopie des
GENERIC
-Kernels, welcher mit der
aktuellen Version des Betriebssystems übereinstimmt.
Wenn ein direkter Zugriff auf die Maschine möglich ist,
kann eine Kopie des GENERIC
-Kernels
von den Installationsmedien installiert werden:
#
mount /cdrom
#
cd /cdrom/usr/freebsd-dist
#
tar -C/ -xvf kernel.txz boot/kernel/kernel
Alternativ kann der
GENERIC
-Kernel aus den Quellen neu
gebaut und installiert werden:
#
cd /usr/src
#
make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null
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.
Der Neustart in den
GENERIC
-Kernel ist nicht notwendig,
da freebsd-update
lediglich
/boot/GENERIC
benötigt.
In der Regel funktionieren nach einer Aktualisierung
einer Unterversion die installierten Anwendungen weiterhin
problemlos. Neue Hauptversionen verwenden jedoch andere
Binärschnittstellen (ABIs), was dazu
führt, dass die meisten Anwendungen von Drittherstellern
nicht mehr funktionieren. Nach der Aktualisierung auf eine
Hauptversion, müssen alle installierten Ports und Pakete
aktualisiert werden. Benutzen Sie
pkg upgrade
um Pakte zu aktualisieren.
Installierte Ports können Sie mit einem Werkzeug wie
ports-mgmt/portmaster aktualisiert
werden.
Bei einer erzwungenen Aktualisierung aller installierten Pakete, werden diese durch eine neue Version aus dem Repository ersetzt, sogar dann, wenn sich die Versionsnummer nicht erhöht hat. Dieser Schritt ist erforderlich, da sich die ABI bei einer Aktualisierung der Hauptversion von FreeBSD verändert hat. Eine erzwungene Aktualisierung aller installierten Pakete geschieht wie folgt:
#
pkg-static upgrade -f
Ein Neubau der installierten Ports führen Sie mit diesem Kommando durch:
#
portmaster -af
Dieser Befehl wird die Konfigurationen für jede
Anwendung anzeigen, und der Benutzer hat die Möglichkeit,
die Optionen anzupassen. Wenn Sie ausschließlich die
voreingestellten Optionen verwenden möchten, verwenden Sie
mit dem obigen Befehl den Parameter
-G
.
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, angepassten Kernel nach den Anweisungen in Kapitel 8, Konfiguration des FreeBSD-Kernels zu bauen und zu
installieren.
Booten Sie anschließend die Maschine in die neue FreeBSD-Version. Der Aktualisierungsprozess ist damit abgeschlossen.
freebsd-update IDS
kann verwendet
werden, um den Zustand der installierten FreeBSD-Version
gegenüber einer bekannten und funktionierenden Kopie zu
vergleichen. Dieses Kommando vergleicht die aktuelle Version
von Systemwerkzeugen, Bibliotheken sowie Konfigurationsdateien
und kann als integriertes Intrusion Detection System
(IDS) benutzt werden.
Dieses Programm ist kein Ersatz für ein echtes
IDS-System wie
security/snort. Da
freebsd-update
Daten auf der Festplatte
speichert, ist die Möglichkeit von Verfälschungen
offensichtlich. Obwohl diese Möglichkeit durch die
Verwendung von kern.securelevel
oder die
Speicherung von Daten auf einem Nur-Lese Dateisystem
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. Eine alternative Methode zur Bereitstellung
von IDS-Funktionaliäten wird in
Abschnitt 13.2.6, „Überprüfung von Binärdateien“ beschrieben.
Beginnen Sie den Vergleich, indem Sie das Programm starten und eine Ausgabedatei festlegen:
#
freebsd-update IDS >>
outfile.ids
Das System wird nun überprüft. Dabei wird eine lange Liste von Dateien zusammen mit den SHA256-Hashwerten der Release-Version und den Werten des aktuell installierten Systems, in die angegebene Ausgabedatei geschrieben.
Die Zeilen in der Ausgabe sind extrem lang, aber das Ausgabeformat kann 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.conf
Diese Beispielausgabe wurde abgeschnitten, da noch viele
weitere Dateien vorhanden sind. Einige Dateien wurden auf
natürliche Art verändert. /etc/passwd
wurde beispielsweise geändert, wenn Benutzer zum System
hinzugefügt wurden. Kernelmodule können sich unterscheiden,
wenn freebsd-update
diese aktualisiert hat.
Um bestimmte Dateien oder Verzeichnisse auszuschließen, fügen
Sie diese an die IDSIgnorePaths
-Option in
/etc/freebsd-update.conf
an.
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>.