Updatarea si mentinerea sistemului de operare si a pachetelor instalate la zi este o operatiune usoara, asa cum e aproape orice operatiune de administrare in FreeBSD. Importanta mentinerii la zi a unui sistem de operare sau a unei aplicatii nu are rost sa fie dezbatuta. Se stie ca e importanta atat pentru securitate cat si pentru fiabilitate.
Pentru a mentine updatat la zi un server care ruleaza FreeBSD vom avea nevoie de cinci comenzi:
- freebsd-update – un utilitar care downloadeaza si instaleaza updateurile sistemului de operare in mod binar.
- portsnap – pentru mentinerea la zi a sistemului de porturi.
- portaudit – pentru verificarea aplicatiilor instalate in baza de date cu aplicatiile vulnerabile.
- pkg_version – pentru compararea versiunii pachetelor instalate cu ultimele versiuni aparute.
- portmanager – utilitarul care il folosim pentru updatarea porturilor dupa ce avem un raport complet asupra starii aplicatiilor instalate.
Updatarea sistemului de operare
Sistemul de operare va primi dupa lansare o perioada lunga de timp updateuri care sa acopere gaurile de securitate sau care sa rezolve diferite buguri care pot deranja buna functionare a sistemului. Folosind comanda freebsd-update putem instala ultimele patchuri ale versiunii sistemului de operare care o utilizam. Pentru a updata sistemul trebuie sa folosim comanda freebsd-update pentru a downloada patchurile iar apoi pentru a le instala. Downloadarea patchurilor se face folosind comanda freebsd-update fetch iar instalarea lor se face cu freebsd-update install:
[root@lamp.ro ~]# freebsd-update fetch Looking up update.FreeBSD.org mirrors... 3 mirrors found. Fetching public key from update4.FreeBSD.org... done. Fetching metadata signature for 7.1-RELEASE from update4.FreeBSD.org... done. Fetching metadata index... done. Fetching 2 metadata files... done. Inspecting system... done. Preparing to download files... done. Fetching 3 patches.. done. Applying patches... done. The following files will be updated as part of updating to 7.1-RELEASE-p7: /usr/sbin/lwresd /usr/sbin/named /usr/src/contrib/bind9/bin/named/update.c /usr/src/sys/conf/newvers.sh [root@lamp.ro ~]# freebsd-update install Installing updates... done. [root@lamp.ro ~]#
Dupa cum se poate vedea, comanda freebsd-update fetch a descarcat patchurile necesare iar apoi comanda freebsd-update install le-a instalat. In majoritatea cazurilor rularea celor doua comenzi este suficienta. Cum majoritatea pathcurilor sunt legate de surse sau aplicatii de sine statatoare foarte rar este nevoie de un restart.
Dupa instalarea patchurilor daca ceva merge prost putem oricand sa revenim la versiunea anterioara folosind comanda freebsd-update rollback care va sterge fisierele modificate iar in locul lor va pune fisierele originale.
Updatarea porturilor
In FreeBSD majoritatea aplicatiilor se instaleaza din porturi. Pentru ca aplicatiile sa fie tinute la zi cu updateurile va trebui sa avem in sistem ultima versiune a porturilor. Pentru asta vom folosi comanda portsnap care, similar comenzii freebsd-update, downloadeaza iar apoi instaleaza ultima versiune a porturilor. Downloadarea ultimei versiuni a porturilor se face folosind comanda portsnap fetch. Apoi, pentru a instala porturile descarcate, vom folosi portsnap extract care extrage din snapshotul descarcat porturile:
[root@lamp.ro ~]# rm -rf /usr/ports [root@lamp.ro ~]# portsnap fetch Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found. Fetching snapshot tag from portsnap2.FreeBSD.org... done. Fetching snapshot metadata... done. Updating from Mon Aug 24 23:54:41 EEST 2009 to Tue Aug 25 21:46:55 EEST 2009. Fetching 4 metadata patches... done. Applying metadata patches... done. Fetching 0 metadata files... done. Fetching 34 patches.....10....20....30.. done. Applying patches... done. Fetching 2 new ports or files... done. [root@lamp.ro ~]# portsnap extract /usr/ports/.cvsignore /usr/ports/CHANGES /usr/ports/COPYRIGHT /usr/ports/GIDs /usr/ports/KNOBS /usr/ports/LEGAL /usr/ports/MOVED /usr/ports/Makefile /usr/ports/Mk/bsd.apache.mk /usr/ports/Mk/bsd.autotools.mk .............................. [root@lamp.ro ~]#
Folosind comenzile de mai sus, in cateva minute putem avea ultima versiune a porturilor. Mai departe nu ne ramane decat sa verificam porturile care necesita updatare si sa le updatam.
Verificarea aplicatiilor vulnerabile
De obicei nu este necesara updatarea tuturor pachetelor. Pe un server pus in productie pot fi instalate cateva zeci de pachete din care mai putin de 10 sunt vitale. De exemplu, e posibil ca un anumit pachet sa fie instalat doar pentru una din facilitatile unei aplicatii, facilitate care in cazul nostru nu ne intereseaza. In astfel de cazuri, care sunt multe, nu este necesara updatarea pachetelor respective. In schimb este important sa stim care pachete pot reprezenta un risc din punct de vedere al securitatii. In astfel de situatii putem folosi comanda portaudit.
Daca nu avem deja instalata aplicatia o putem instala ruland comanda:
[root@lamp.ro ~]# cd /usr/ports/ports-mgmt/portaudit && make install distclean
La rulare comanda portaudit descarca o lista cu pachetele care sunt stiute ca fiind vulnerabile si compara pachetele instalate local cu cele din lista. Daca o aplicatie este gasita ca fiind vulnerabila se afiseaza numele aplicatiei, o scurta descriere a vulnerabilitatii si un link la care putem gasi mai multe detalii legate de pachetul vulnerabil:
[root@lamp.ro ~]# portaudit -Fda New database installed. Database created: Tue Aug 25 23:55:00 EEST 2009 Affected package: ruby-1.8.7.72_1,1 Type of problem: ruby -- BigDecimal denial of service vulnerability. Reference: <http ://portaudit.FreeBSD.org/62e0fbe5-5798-11de-bb78-001cc0377035.html> 1 problem(s) in your installed packages found. You are advised to update or deinstall the affected package(s) immediately. [root@lamp.ro ~]# </http>
Comanda folosita mai sus primeste parametri “-Fda“. Parametrul -F este pasat pentru a-i spune aplicatiei sa downloadeze ultima versiune a bazei de date cu vulnerabilitati inainte de a incepe scanarea, parametrul d ne afiseaza data la care a fost creata baza de date cu vulnerabilitati iar parametrul -a e cel care determina aplicatia sa verifice toate pachetele instalate.
Verificarea aplicatiilor outdated
Comanda portaudit ne face o lista cu pachetele vulnerabila, dar ocazional e bine sa verificam starea tuturor pachetelor instalate pentru a avea o imagine de ansamblu asupra starii serverului. Pentru a verifica pachetele instalate si pentru a compara versiunile pachetelor instalate cu ultimele versiuni ale pachetelor vom folosi comanda pkg_version -vIL=. Comanda va genera o lista cu pachetele care necesita updatarea:
[root@lamp.ro ~]# pkg_version -vIL= libX11-1.2,1 < needs updating (index has 1.2.1_1,1) mysql-client-5.0.77_1 < needs updating (index has 5.0.84) mysql-server-5.0.77_1 < needs updating (index has 5.0.84) pcre-7.8 < needs updating (index has 7.9) pdflib-7.0.3 < needs updating (index has 7.0.4) ruby-1.8.7.72_1,1 < needs updating (index has 1.8.7.160_4,1) ruby18-bdb-0.6.5 < needs updating (index has 0.6.5_1) vim-7.2.132 < needs updating (index has 7.2.239) wget-1.11.4 < needs updating (index has 1.11.4_1) [root@lamp.ro ~]#
Dupa cum se poate vedea din rezultatul afisat, avem o lista de pachete care va trebui sa le updatam in functie de importanta care le-o acordam.
Updatarea porturilor cu portmanager
portmanager este un utilitar cu ajutorul caruia putem updata o aplicatie instalata din porturi sau, dupa preferinte, toate aplicatiile instalate.
Daca nu avem utilitarul portmanager deja instalat, il putem instala din porturi ruland comanda:
[root@lamp.ro ~]# cd /usr/ports/ports-mgmt/portmanager && make install distclean
O updatare a intregului sistem necesita mult timp datorita utilizarii porturilor. Fiecare aplicatie va trebui sa fie downloadata, compliata si apoi instalata. Folosind comenzile portaudit si pkg_version ne-am facut o parere legata de pachetele care necesita updatarea. Pentru a termina totul rapid putem face o lista cu pachetele care necesita updatare iar apoi sa le updatam folosind comanda portmanager. Sa presupunem, de exemplu, ca dorim sa updatam doar pachetul ruby care a fost detectat de comanda portaudit ca fiind vulnerabil. Pentru a-l updata vom folosi urmatoarea comanda:
[root@lamp.ro ~]# portmanager lang/ruby18 -f -l -u MGPMrCommandLine 0.4.1_9 info: created /usr/ports/packages MGPMrController 0.4.1_9 info: running in forced update mode ................. [root@lamp.ro ~]#
Am folosit comanda portmanager impreuna cu parametri "-f -l -u" care ii spun comenzii sa forteze recompilarea dependintelor (-f), sa salveze un log in /var/log/portmanager.log (-l) si sa updateze pachetul mentionat ca prim parametru al comenzii (-u). Primul parametru in cazul nostru este lang/ruby18, calea relativa la directorul de porturi pentru pachetul ruby1.8 care il avem instalat in sistem.
In cazul in care avem suficient timp la dispozitie pentru a upgrada toate pachetele disponibile in sistem, indiferent de importanta lor, putem folosi comanda portmanager -u -l care, daca nu primeste un anumit port pentru updatare, va updata toate pachetele instalate in sistem:
[root@lamp.ro ~]# portmanager -u -l
Folosind informatia de mai sus putem pune la punct o rutina care sa fie rulata saptamanal si care sa ne asigure ca serverul nostru are instalate ultimele versiuni ale aplicatiilor folosite, astfel prevenind problemele legate de eventualele atacuri datorate hackerilor sau pierderile de date datorate bugurilor nerezolvate.
Popularity: 5% [?]



Salut, Sergiu!
Am facut ce ai spus in acest tutorial si cand am facut restart nu mai am acces la internet, nu inteleg care-i cauza… am facut “freebsd-update rollback” si nimic nu s-a schimbat… ai putea sa ma sfatuiesti ceva
Multumesc, Viorel
Salut,
Da din consola “ping localhost“. Asa poti verifica daca s-a zapacit ceva la nivel de protocol.
Daca e ok, da-i comanda “ifconfig” si vezi ce interfete de retea iti apar. Iti apare interfata care aparea inainte de update? Daca nu iti apare, mai stii ce interfata era? (xl, em etc.)
Daca interfata e la locul ei, problema e de configurare. Uita-te in “/etc/rc.conf“. Ar trebui sa iti apara o linie de genul asta:
Asta presupunand ca interfata e de tip xl0 iar IP-ul care ar trebui sa il ai e 192.168.0.2. Daca nu apare o linie de genul asta, fa tu una cu adresa IP care trebuie sa fie si masca de retea (netmask) care o aveai inainte. Pe langa asta trebuie sa ai si o linie:
Linia asta trebuie sa aiba in loc de 192.168.0.1 adresa IP a gatewayului.
Verifica chestiile astea si daca tot nu functioneaza mai sapam putin sa vedem de unde e problema.
Multumesc de raspuns…
am verificat ping localhost, si totul e ok
am verificat fisierul /etc/rc.conf si totul e in regula
am mai facut un reboot si cand incerc sa fac ping yahoo.com imi spune:
ping: connot resolve yahoo.com: Host name lookup failure
Ce problema poate fi?
Verifica /etc/resolv.conf. S-ar putea sa nu ai nameserverele setate corect. Nu stiu ce nameservere trebuie sa ai pentru ca depinde de provider, dar poti incerca cu 4.2.2.2 si 4.2.2.3. Fisierul ar trebui sa arate asa:
Dupa modificare nu e necesar restart.
mda, Sergiu
Asta am verificat de cand nu am avut internet si era normal de atuci insa nu pot accesa netul, sorry insa mi se pare straniu FreeBSD, e din cauza ca nu prea stiu sa ma folosesc de el.
de aceea si apelez la ajutorul tau
nu stiu ce sa ii mai fac
Viorel
Daca setarile sunt in regula ar trebui sa iti functioneze. Pe localhost spui ca iti raspunde la ping. Incearca un ping in 4.2.2.2 si vezi ce zice. De asemenea incearca si un ping in IP-ul care il ai in /etc/rc.conf la defaultrouter.
Ai putea sa postezi undeva fisierele /etc/rc.conf, /var/run/dmesg.boog si /var/log/messages?
Firewall ai instalat? Daca da, verifica regulile sa nu se fi suprascris.
Multumesc, Sergiu
S-a pornit dupa ce am editat din nou in fisierul /etc/rc.conf ceea ce tu mi-ai spus…
Multumesc pentru sustinerea ta…
Viorel
No problem. Ma bucur ca s-a rezolvat
in materie de linux sunt putin confuz
dar din ceea ce am citit prin blogul tau pana acum, am obseravat ca esti axat pe acest domeniu si ai foarte multa experienta. eu sunt un utilizator Windows ce nu va putea fi niciodata pe un alt sistem de operare, cel putin momentan