Het toepassen van beveiligingspatches is een belangrijk onderdeel van het beheren van computersoftware, met name het besturingssysteem. Dit was voor een lange tijd geen gemakkelijk proces op FreeBSD. Er moesten patches op de broncode worden toegepast, de code moest herbouwd worden tot binairen, en daarna moesten de binairen worden geherinstalleerd.
Dit is niet langer het geval aangezien FreeBSD nu een gereedschap
heeft dat eenvoudigweg freebsd-update
heet.
Dit gereedschap biedt twee gescheiden functies. Ten eerste
voorziet het in het toepassen van binaire beveiligings- en
errata-updates op het basissysteem van FreeBSD zonder de eis om te
bouwen en te installeren. Ten tweede ondersteunt het gereedschap
kleine en grote uitgave-upgrades.
Binaire updates zijn beschikbaar voor alle architecturen en
uitgaveaankondigingen dienen gelezen te worden aangezien deze
belangrijke informatie over de gewenste uitgave kunnen bevatten.
De aankondigingen kunnen op de volgende koppelin bekeken worden:
http://www.FreeBSD.org/releases/
.
Als er een crontab
bestaat die de
mogelijkheden van freebsd-update
gebruikt, moet
het uitgeschakeld worden voordat aan de volgende operatie wordt
begonnen.
Sommige gebruikers willen het standaard configuratiebestand optimaliseren, waardoor het proces beter gecontroleerd kan worden. De opties zijn goed gedocumenteerd, maar voor de volgenden is wat extra uitleg nodig:
# Componenten van het basissysteem die bijgewerkt moeten blijven Components src world kernel
Deze parameter bepaalt welke delen van FreeBSD bijgewerkt
blijven. Standaard wordt de broncode bijgewerkt, het hele
basissysteem, en de kernel. Dezelfde componenten als tijdens de
installatie zijn beschikbaar, het toevoegen van bijvoorbeeld
world/games
zou de spelpatches toepassen. Het
gebruik van src/bin
zou de broncode in src/bin
bijgewerkt houden.
Het beste kan dit op de standaardwaarde blijven aangezien het veranderen hiervan om specifieke items te bevatten de gebruiker dwingt om alle items die bijgewerkt dienen te worden op te noemen. Dit kan rampzalige gevolgen hebben aangezien de broncode en de binairen asynchroon kunnen raken.
# Paden die beginnen met iets wat overeenkomt met een regel in een IgnorePaths # statement zullen genegeerd worden. IgnorePaths
Voeg paden, zoals
/bin
of
/sbin
toe om deze
specifieke mappen ongemoeid te laten tijdens het updateproces.
Deze optie kan gebruikt worden om te voorkomen dat
freebsd-update
lokale wijzigingen
overschrijft.
# Paden die beginnen met iets wat overeenkomt met een regel in een UpdateIfUnmodified # statement zullen alleen worden bijgewerkt als de inhoud van het bestand niet is # gewijzigd door de gebruiker (tenzij veranderingen zijn samengevoegd; zie beneden). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile
Werk configuratiebestanden in de aangegeven mappen alleen
bij als ze niet zijn gewijzigd. Alle veranderingen die door de
gebruiker zijn gemaakt maken het automatisch bijwerken van deze
bestanden ongeldig. Er is een andere optie,
KeepModifiedMetadata
, die
freebsd-update
instrueert om de veranderingen
tijdens het samenvoegen te bewaren.
# Wanneer naar een nieuwe uitgave van FreeBSD wordt ge-upgraded, worden lokale veranderingen van bestanden die overeenkomen met MergeChanges # samengevoegd in de versie van de nieuwe uitgave. MergeChanges /etc/ /var/named/etc/
Lijst van mappen met instellingenbestanden waar
freebsd-update
moet proberen om in samen te
voegen. Het proces van bestanden samenvoegen is een serie
van diff(1)-patches die ongeveer gelijk is aan
mergemaster(8) met minder opties, de samenvoegingen worden
ofwel geaccepteerd, of openen een tekstverwerker, of zorgen
ervoor dat freebsd-update
afbreekt. Maak in
geval van twijfel een reservekopie van /etc
en accepteer de
samenvoegingen. In Paragraaf 24.7.11.1, “mergemaster
” staat meer
informatie over het commando mergemaster
.
# Map waarin de gedownloade updates en tijdelijke bestanden # die door een FreeBSD Update worden gebruikt worden opgeslagen. # WorkDir /var/db/freebsd-update
Dit is de map waarin alle patches en tijdelijke bestanden worden geplaatst. In het geval dat de gebruiker een versie-upgrade uitvoert, dient deze locatie tenminste een gigabyte aan vrije schijfruimte te hebben.
# Wanneer tussen uitgaven wordt ge-upgraded, dient de lijst van Componenten dan # strikt gelezen te worden (StrictComponents yes) of slechts als een lijst van componenten # die geïnstalleerd *kunnen* worden en waarvan FreeBSD Update uit dient te zoeken # welke daadwerkelijk zijn geïnstalleerd en die te upgraden (StrictComponents no)? # StrictComponents no
Wanneer ingesteld op yes
, zal
freebsd-update
aannemen dat de lijst
Components
compleet is en zal het niet
proberen om wijzigingen buiten de lijst te maken. Effectief zal
freebsd-update
proberen om elk bestand bij te
werken dat op de lijst Components
staat.
Beveiligingspatches staan op een verre machine en kunnen met het volgende commando gedownload en geïnstalleerd worden:
#
freebsd-update fetch
#
freebsd-update install
Als er kernelpatches zijn toegepast moet het systeem opnieuw
opgestart worden. Als alles goed is gegaan dient het systeem
gepatcht te zijn en kan freebsd-update
als
een nachtelijke cron(8)-taak gedraaid worden. Een regel
in /etc/crontab
zou genoeg moeten zijn om
deze taak te volbrengen:
@daily root freebsd-update cron
Deze regel verklaart dat eenmaal per dag het commando
freebsd-update
gedraaid zal worden. Op deze
manier, door het argument cron
te gebruiken,
zal het gereedschap freebsd-update
alleen kijken of
er updates bestaan. Als er patches bestaan, zullen ze automatisch
worden gedownload naar de plaatselijke schijf maar niet worden
toegepast. Er zal een email aan de gebruiker
root
worden verstuurd zodat ze handmatig
geïnstalleerd kunnen worden.
Als er iets misging, heeft freebsd-update
de mogelijkheid om de laatste verzamelingen veranderingen terug
te draaien met het volgende commando:
#
freebsd-update rollback
Eenmaal voltooid, dient het systeem herstart te worden als de kernel of enige kernelmodule is gewijzigd. Dit stelt FreeBSD in staat om de nieuwe binairen in het geheugen te laden.
Het gereedschap freebsd-update
kan alleen
de kernel GENERIC
automatisch bijwerken. Als
een eigen kernel wordt gebruikt, moet het herbouwd en
geherinstalleerd worden nadat freebsd-update
klaar is met het installeren de rest van de updates.
freebsd-update
zal echter de kernel
GENERIC
in /boot/GENERIC
detecteren en
bijwerken (als het bestaat), zelfs als het niet de huidige
(draaiende) kernel van het systeem is.
Het is een goed idee om altijd een kopie van de kernel
GENERIC
in /boot/GENERIC
te bewaren. Het
kan van pas komen bij het vaststellen van een keur aan
problemen, en bij het uitvoeren van versie-upgrades met
freebsd-update
zoals beschreven in
Paragraaf 24.2.3, “Grote en kleine upgrades”.
Tenzij de standaardconfiguratie in
/etc/freebsd-update.conf
is gewijzigd, zal
freebsd-update
de bijgewerkte kernelbronnen
samen met de rest van de updates installeren. Het herbouwen en
herinstalleren van uw nieuwe eigen kernel kan daarna op de
gebruikelijke manier gedaan worden.
De updates die via freebsd-update
verspreid worden hebben niet altijd betrekking op de kernel.
Het is niet nodig om uw eigen kernel te herbouwen als de
kernelbronnen niet zijn aangepast door het uitvoeren van
freebsd-update install
.
freebsd-update install
zal echter altijd
het bestand /usr/src/sys/conf/newvers.sh
bijwerken. Het huidige patchniveau (zoals aangegeven door het
-p
-nummer gerapporteerd door uname
-r
) wordt uit dit bestand gehaald. Het herbouwen
van uw eigen kernel, zelfs als er niets veranderd is, stelt
uname(1) in staat om het huidige patchniveau van het
systeem accuraat te rapporteren. Dit is in het bijzonder
behulpzaam wanneer meerdere systemen onderhouden worden,
aangezien hierdoor snel de geïnstalleerde updates op elk
ervan kunnen worden nagegaan.
Dit proces ruimt oude objectbestanden en bibliotheken op waardoor de meeste applicaties van derde partijen kapot gaan. Het wordt aangeraden dat alle geïnstalleerde poorten ofwel verwijderd en geherinstalleerd worden of later ge-upgraded worden met het hulpmiddel ports-mgmt/portupgrade. De meeste gebruikers zullen willen proefdraaien met het volgende commando:
#
portupgrade -af
Dit zorgt ervoor dat alles juist wordt geherinstalleerd.
Merk op dat het instellen van de omgevingsvariabele
BATCH
op yes
het antwoord
yes
zal geven op alle prompts tijdens dit
proces, waardoor het niet nodig is om handmatig in het
bouwproces in te grijpen.
Als een eigen kernel wordt gebruikt, is het upgradeproces
iets ingewikkelder. Een kopie van de kernel
GENERIC
is nodig en dient in /boot/GENERIC
geplaatst te
worden. Als de kernel GENERIC
niet reeds op
het systeem aanwezig is, moet het met één van de
volgende methoden verkregen worden:
Als er slechts eenmaal een eigen kernel is gebouwd, dan
is de kernel in /boot/kernel.old
eigenlijk de
GENERIC
. Hernoem deze map naar /boot/GENERIC
.
Aannemende dat fysieke toegang tot de machine mogelijk
is, kan een kopie van de kernel GENERIC
van het CD-ROM-medium worden geïnstalleerd. Laad de
installatieschijf en geef de volgende commando's:
#
mount /cdrom
#
cd /cdrom/X.Y-RELEASE/kernels
#
./install.sh GENERIC
Vervang X.Y-RELEASE
met de versie van de uitgave die u gebruikt. De kernel
GENERIC
zal standaard in /boot/GENERIC
worden
geïnstalleerd.
Als al het bovenstaande niet lukt, kan de kernel
GENERIC
herbouwd en geherinstalleerd
worden vanaf de broncode:
#
cd /usr/src
#
env DESTDIR=/boot/GENERIC make kernel
#
mv /boot/GENERIC/boot/kernel/* /boot/GENERIC
#
rm -rf /boot/GENERIC/boot
Om deze kernel door freebsd-update
als GENERIC
te laten herkennen, mag het
configuratiebestand voor GENERIC
niet op
enige wijze veranderd zijn. Het is ook aan te raden dat het
zonder andere speciale opties wordt gebouwd (bij voorkeur
met een leeg /etc/make.conf
).
Opnieuw opstarten naar de kernel GENERIC
is in dit stadium niet nodig.
Updates van grote en kleine versies kunnen worden uitgevoerd
door een uitgaveversie als doel aan
freebsd-update
op te geven, het volgende
commando zal bijvoorbeeld updaten naar FreeBSD 8.1:
#
freebsd-update -r 8.1-RELEASE upgrade
Nadat het commando is ontvangen, zal
freebsd-update
het instellingenbestand en het
huidige systeem evalueren in een poging om de benodigde
informatie te verzamelen om het systeem te updaten. Een lijst
op het scherm zal aangeven welke componenten zijn gedetecteerd
en welke niet. Bijvoorbeeld:
Looking up update.FreeBSD.org mirrors... 1 mirrors found. Fetching metadata signature for 8.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
Nu zal freebsd-update
proberen om alle
bestanden die nodig zijn voor de upgrade te downloaden. In
sommige gevallen kan de gebruiker worden gevraagd wat te
installeren of hoe verder te gaan.
Wanneer een eigen kernel wordt gebruikt, zal de bovenstaande stap een waarschuwing geven die lijkt op de volgende:
WARNING: This system is running a "MIJNKERNEL
" 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"
Deze waarschuwing kan op dit moment veilig worden
genegeerd. De bijgewerkte kernel GENERIC
zal als tussenliggende stap in het upgradeproces worden
gebruikt.
Nadat alle patches zijn gedownload naar het plaatselijke
systeem zullen ze worden toegepast. Dit proces kan afhankelijk
van de snelheid en werklast van de machine even duren. Hierna
zullen instellingenbestanden worden samengevoegd —
voor dit gedeelte van het proces is enige tussenkomst van de
gebruiker nodig aangezien een bestand kan worden samengevoegd of
omdat er een tekstverwerker op het scherm kan verschijnen om het
bestand handmatig samen te voegen. Het resultaat van elke
succesvolle samenvoeging zal aan de gebruiker worden getoond
naarmate het proces verder gaat. Een mislukte of genegeerde
samenvoegpoging zal het proces afbreken. Het is mogelijk voor
gebruikers om een reservekopie van /etc
te maken en belangrijke
bestanden, zoals master.passwd
of
group
, later samen te voegen.
Het systeem is nog niet veranderd, al het patchen en samenvoegen gebeurt in een andere map. Wanneer alle patches succesvol zijn toegepast, alle instellingenbestanden zijn samengevoegd en het erop lijkt dat het proces soepel verloopt, dienen de veranderingen verzegeld te worden door de gebruiker.
Als dit proces eenmaal voltooid is, kan de upgrade aan de schijf toevertrouwd worden met het volgende commando.
#
freebsd-update install
De kernel en kernelmodules zullen als eerste gepatcht
worden. Nu moet de machine opnieuw opgestart worden. Als het
systeem een eigen kernel draaide, gebruik dan het commando
nextboot(8) om de kernel voor de volgende keer dat
opgestart wordt in te stellen op /boot/GENERIC
(welke is
bijgewerkt):
#
nextboot -k GENERIC
Voordat er met de kernel GENERIC
wordt
opgestart, dient te worden gecontroleerd dat het alle
stuurprogramma's bevat om uw systeem juist te laten opstarten
(en met het netwerk te verbinden, als de machine die
bijgewerkt wordt van afstand wordt benaderd). In het
bijzonder, als de vorige kernel die draaide ingebouwde
functionaliteit bevatte die normaalgesproken door
kernelmodules wordt geleverd, zorg er dan voor dat deze
modules tijdelijk in de kernel GENERIC
worden geladen door de faciliteit
/boot/loader.conf
te gebruiken. U kunt
er ook voor kiezen om niet-essentiële diensten, schijf-
en netwerkkoppelingen, enzovoorts uit te zetten totdat het
upgradeproces voltooid is.
De machine dient nu te worden herstart met de bijgewerkte kernel:
#
shutdown -r now
Als het systeem weer actief is, moet
freebsd-update
nogmaals gestart worden.
De toestand van het proces is opgeslagen en dus zal
freebsd-update
niet vooraan beginnen, maar
zal het alle oude gedeelde bibliotheken en objectbestanden
verwijderen. Geef het volgende commando om verder te gaan op
dit punt:
#
freebsd-update install
Afhankelijk van het feit of er versienummers van bibliotheken zijn opgehoogd, kunnen er slechts twee in plaats van drie installatiefasen zijn.
Alle software van derde partijen dient nu opnieuw gebouwd en geïnstalleerd te worden. Dit is nodig omdat geïnstalleerde software van bibliotheken afhankelijk kan zijn die tijdens het upgradeproces zijn verwijderd. Het commando ports-mgmt/portupgrade kan gebruikt worden om dit proces te automatiseren. Dit proces kan met de volgende commando's gestart worden:
#
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
Voltooi, nadat dit voltooid is, het upgradeproces met een
laatste aanroep naar freebsd-update
. Geef
het volgende commando om alle losse eindjes in het upgradeproces
samen te knopen:
#
freebsd-update install
Als de kernel GENERIC
tijdelijk werd
gebruikt, is dit het moment om een nieuwe eigen kernel op de
gebruikelijke manier te bouwen en installeren.
Start de machine opnieuw op in de nieuwe FreeBSD-versie. Het proces is voltooid.
Het gereedschap freebsd-update
kan
gebruikt worden om de toestand van de geïnstalleerde versie
van FreeBSD met een bekende goede kopie te vergelijken. Deze optie
evalueert de huidige versie van systeemgereedschappen,
bibliotheken, en instellingenbestanden. Geef het volgende
commando om met de vergelijking te beginnen:
#
freebsd-update IDS >> uitvoerbestand.ids
Hoewel de commandonaam IDS is, is het
in geen geval een vervanging voor een indringdetectiesysteem
zoals security/snort.
Aangezien freebsd-update
gegevens op schijf
opslaat, is de mogelijkheid om te knoeien duidelijk. Hoewel
deze mogelijkheid verminderd kan worden door de instelling
kern.securelevel
te gebruiken en de
gegevens van freebsd-update
op een
bestandssysteem dat alleen gelezen kan worden op te slaan
wanneer deze niet gebruikt worden, zou een betere oplossing
zijn om het systeem met een veilige schijf te vergelijken,
zoals een DVD of een veilig opgeslagen
externe USB-schijf.
Het systeem zal nu geïnspecteerd worden, en er zal een
lijst van hun sha256(1)-hashwaarden, zowel de bekende
waarde in de uitgave en de huidige geïnstalleerde waarde,
afgebeeld worden. Hierom wordt de uitvoer naar het bestand
uitvoerbestand.ids
gezonden. Het scrollt
te snel voorbij om het met het oog te vergelijken, en het vult
al snel de gehele consolebuffer op.
Deze regels zijn ook extreem lang, maar het uitvoerformaat kan vrij eenvoudig geparsed worden. Geef, om bijvoorbeeld een lijst van alle bestanden te krijgen die verschillen van die in de uitgave, het volgende commando:
#
cat uitvoerbestand.ids | awk '{ print $1 }' | more
/etc/master.passwd /etc/motd /etc/passwd /etc/pf.conf
Deze uitvoer is afgekapt, er bestaan veel meer bestanden.
Sommige van deze bestanden hebben natuurlijke veranderingen, het
/etc/passwd
is gewijzigd omdat er
gebruikers aan het systeem zijn toegevoegd. In sommige gevallen
kunnen er andere bestanden zijn, zoals kernelmodules, die
verschillen aangezien freebsd-update
ze
ge-updated kan hebben. Voeg, om bepaalde bestanden of mappen
uit te sluiten, deze toe aan de optie
IDSIgnorePaths
in
/etc/freebsd-update.conf
.
Dit systeem kan gebruikt worden als deel van een uitgebreide upgrademethode, afgezien van de eerder besproken versie.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.