Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

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.

Linux

19 Responses so far.

  1. Viorel says:

    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

  2. Sergiu says:

    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:

    ifconfig_xl0="inet 192.168.0.2  netmask 255.255.255.0"

    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:

    defaultrouter="192.168.0.1"

    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.

  3. Viorel says:

    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?

  4. Sergiu says:

    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:

    nameserver 4.2.2.2
    nameserver 4.2.2.3

    Dupa modificare nu e necesar restart.

  5. Viorel says:

    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

  6. Sergiu says:

    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.

  7. Viorel says:

    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

  8. Sergiu says:

    No problem. Ma bucur ca s-a rezolvat 😉

  9. News says:

    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 🙂

  10. ciotlos alexandru marian says:

    buna ziua; am instalat freebsd 8.1 pe un laptop acer 2490; am setat ca si desktop kde-ul insa cand nu am reusit sa setez sunetul; am rulat urmatoarea comanda :

    kldload snd_hda si l-am scris si in /boot/loader.conf

    problema este ca nu functioneaza sunetul desi in taskbar langa ceas apare iconita de volum; as dori daca se poate putin ajutor in aceasta problema; va multumesc anticipat

  11. Sergiu Tot says:

    Salut,

    Esti sigur ca folosesti Intel High Definition Audio? O posibila problema ar fi instalarea driverului gresit.

    Adauga in /boot/loader.conf si sound_load=”YES”. Daca nu merge, posteaza pe forum, ca sa pastram articolul curat 🙂

  12. Florin says:

    Salut am cumparat un vps .. si as dorii sa instalez pe el freebsd 9.2 daca se poate Ma poate ajuta cineva .. in cpanel la vps am doar optiuna sa instalez urmatoarele :

    CentOS 6 minimal system (64-bit)
    ubuntu 12.04 LTS minimal system (64-bit)
    openSUSE 13.1 minimal system (64-bit)
    Debian 7.0 Wheezy minimal system (64-bit)
    CentOS 6 with Parallels Plesk Panel 12 (64-bit)
    openSUSE 13.1 with Parallels Plesk Panel 12 (64-bit)
    ubuntu 14.04 LTS minimal system (64-bit)

    vreau sa stiu pe vcare din ele se poate instala freebsd si cum ?

  13. Sergiu Tot says:

    Salut,

    Daca cei care ofera serviciul nu au FreeBSD in lista, probabil nu poti instala.

    Oricum, merita sa le trimiti un mail sa-i intrebi. Majoritatea hyperviser-elor actuale stiu sa faca masini virtuale pe FreeBSD fara sa fie necesare actiuni complexe.

  14. Bogdan says:

    Salut.
    Am si eu o mare problema la freebsd, nu ma lasa sa ma conectez la el cu Filezilla si nici la internet nu se conecteaza sa fac update la sshd, ca la ala imi tot da eroare, ma poate ajuta cineva?

  15. Sergiu Tot says:

    Salut Bogdan,

    Pare sa fie o problema de retea, nu de OS. Raspunde la ping din reteaua locala?

    Daca nu, verifica IP si netmask sa fie corecte.

  16. Bogdan says:

    Nu, nu raspunde si am verificat toate cele si e ok. Doar ca nu ma lasa sa ma conectez cu filezilla imi da eroare.

  17. Sergiu Tot says:

    Daca setarile de retea sunt corecte (check for typos), mai pot fi doua probleme:

    1. Placa de retea are link? Trebuie sa ai un LED langa conector, sau la switch LED-ul portului pe care e conectata masina.

    2. Dezactiveaza firewallul daca e activ, s-ar putea sa-ti filtreze tot traficul.

  18. Bogdan says:

    Am observat o alta problema acuma, la hamachi imi da „no internet acces” ca eu am facut prin hamachi. Si banuiesc ca de asta nu ma lasa sa ma conectez.

  19. Sergiu Tot says:

    Ah. Se poate sa fie de acolo. Din pacate nu am folosit hamachi ca sa iti pot face vreo recomandare.