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 https://download.freebsd.org/ftp/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>.