capitolul 1 - introducere & instalare · pdf file1.2.4 lvm lvm (logical volume management)...

207
Linux Basic Administration Capitolul 1 - Introducere & Instalare 1.1 Istorie Unix/Linux Anii 60 Bell Laboratories (devizie de cercetare a AT&T) formeaza un consortiu impreuna cu MIT (Massachusetts Institute of Technology) si General Electric pentru a dezvolta un sistem de operare interactiv, multiuser si multi-tasking numit Multics (Multiplexed Information and Computing Service) care sa ruleze pe Mainframe-uri GE-645. Proiectul nu a avut succesul scontat, iar Bell Labs se retrage. Un programator pe nume Ken Thompson nu renunta si continua dezvoltarea proiectului impreuna cu un alt programator pe nume Dennies Ritchie. 1970 Noul proiect este numit Unics (Uniplexed Information and Computing Service). Numele este atribuit de Brian Kernighan, iar mai tarziu este schimbat in UNIX. Sistemul de operare este scris in limbaj de asamblare. 1973 Unix este rescris in C pentru a putea fi portabil (sa ruleze si pe alte masini). Acest lucru a dus la o dezvoltare accelerata. AT&T distribuie noul sistem universitatilor, marilor firme dar si guvernului USA. 1973-1979 Unix-ul este in continuare dezvoltat in cadrul Universitatii Berkeley din California. ăeste adaugat suportul pentru lucrul in retea. 1980-1983 AT&T lanseaza prima versiune comerciala de UNIX fara a introduce modificarile aduse de Berkeley. 1982 Un programator din cadrul proiectului BSD (Berkeley Software Distribution - Berkeley Unix) impreuna cu cativa colegi de la Stanford University creaza firma SUN - Stanford University Network. Prima lansare de Unix are loc in 1983 si se numeste SunOS. Printre altele sunt introduse NFS (Network File System) care devine un standard. 1984 Richard Matthew Stallman (nickname RMS) paraseste MIT (care crea doar software proprietar) pentru a crea un sistem de operare complet FREE (Free as in Freedom) - FREE (Free as in Freedom) . Noul proiect poarta numele de GNU (GNU's not UNIX) . Primul program creat a fost editorul emacs. In 1985 RMS creaza fundatia FSF - Free Software Foundation. Scopul acesteia este ca software-ul sa fie free in sensul de liber si oricine sa poata avea acces liber si fara restrictii la sursa. Acest tip de licenta se numeste GPL - General Public License. 1988

Upload: doquynh

Post on 07-Feb-2018

252 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Linux Basic Administration

Capitolul 1 - Introducere & Instalare

1.1 Istorie Unix/Linux

Anii 60Bell Laboratories (devizie de cercetare a AT&T) formeaza un consortiu impreuna

cu MIT (Massachusetts Institute of Technology) si General Electric pentru a dezvolta un sistem de operare interactiv, multiuser si multi-tasking numit Multics (Multiplexed Information and Computing Service) care sa ruleze pe Mainframe-uri GE-645. Proiectul nu a avut succesul scontat, iar Bell Labs se retrage. Un programator pe nume Ken Thompson nu renunta si continua dezvoltarea proiectului impreuna cu un alt programator pe nume Dennies Ritchie. 1970

Noul proiect este numit Unics (Uniplexed Information and Computing Service). Numele este atribuit de Brian Kernighan, iar mai tarziu este schimbat in UNIX. Sistemul de operare este scris in limbaj de asamblare. 1973

Unix este rescris in C pentru a putea fi portabil (sa ruleze si pe alte masini). Acest lucru a dus la o dezvoltare accelerata. AT&T distribuie noul sistem universitatilor, marilor firme dar si guvernului USA. 1973-1979

Unix-ul este in continuare dezvoltat in cadrul Universitatii Berkeley din California. ăeste adaugat suportul pentru lucrul in retea. 1980-1983

AT&T lanseaza prima versiune comerciala de UNIX fara a introduce modificarile aduse de Berkeley. 1982

Un programator din cadrul proiectului BSD (Berkeley Software Distribution - Berkeley Unix) impreuna cu cativa colegi de la Stanford University creaza firma SUN - Stanford University Network. Prima lansare de Unix are loc in 1983 si se numeste SunOS. Printre altele sunt introduse NFS (Network File System) care devine un standard. 1984

Richard Matthew Stallman (nickname RMS) paraseste MIT (care crea doar software proprietar) pentru a crea un sistem de operare complet FREE (Free as in Freedom) - FREE (Free as in Freedom). Noul proiect poarta numele de GNU (GNU's not UNIX). Primul program creat a fost editorul emacs. In 1985 RMS creaza fundatia FSF - Free Software Foundation. Scopul acesteia este ca software-ul sa fie free in sensul de liber si oricine sa poata avea acces liber si fara restrictii la sursa. Acest tip de licenta se numeste GPL - General Public License. 1988

Page 2: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

SunOS/BSD, AT&T System V Release 3 si Xenix ( Microsoft version of Unix pentru PC cu procesoare Intel cumparat de la AT&T in 1979) au fost combinate in System V Release 4 (SVR4).

NotaXenix a fost versiunea Microsoft de Unix pentru PC cu procesoare Intel cumparata de la AT&T in 1979. Aceasta a fost ulterior vanduta firmei Santa Cruz Operation(SCO) si a devenit SCO UNIX.

1990 GNU continea aproape toate componentele necesare unui nou sistem de operare,

mai putin kernel-ul. 1991

Profesorul olandez Andrew Tanenbaum scrie o carte intitulata "Operating System" in care explica conceptul unui nou sistem de operare numit Minix. Un student finlandez pe nume Linus Torvalds de la Universitatea din Helsinki scrie un Kernel pentru GNU care sa ruleze pe calculatoarele AT-386 si 484, bazandu-se pe anumite concepte din cartea lui Tanenbaum.

Ulterior intre Linus Torvalds si Andrew Tanenbaum se isca un conflict bazat pe viziunea diferita pe care acestia o aveau asupra noului Kernel. Detalii Celebrul anunt al lui Linus Torwalds precum ca a dezvoltat un kernel a fost postat pe un newsgroup comp.os.minix: NotaHello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them?:) Linus ([email protected]) PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have:-(.

Sistemul de operare creat astfel prin folosirea kernelului lui Linus si a programelor si utilitarelor GNU poata numele de GNU/Linux.

NotaNumele complet si corect al sistemului de operare nu este Linux ci GNU/Linux.

GNU/Linux este un sisteme de operare multiuser si multitasking care ruleaza pe procesoare 32 si 64 biti pe aproape toate platformele hardware existente. Este format din kernelul lui Linus Torvalds si programele de la GNU. Intre Linux si Unix exista o mare diferenta. Unix-ul este un sistem de operare proprietar cu sursa inchisa, iar GNU/Linux este

Page 3: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

un sistem de operare FREE cu sursa deshisa care la inceput a incercat sa imite sistemul Unix original.

Marile firme private si-au dezvoltat propriile sisteme de operare Unix astfel:HP----UX - Unix-ul celor de la Hewlard Packard (SVR4). Versiunea actuala este 11.i-AIX - Unix-ul celor de la IBM bazat pe SVR-BSD - Unix-ul celor de la universitatea din California.

In prezent exista FreeBSD, OpenBSD, NetBSD. Prima distributie de Linux a fost Slackwarelansata in 1993. Ulterior au aparut multe alte distributii fiecare avand specificul sau:

• RHEL (RedHat Enterprise Linux - Sistem Comercial) • Fedora (varianta free de la RedHat) • SuSE (cumparat de Novell, Sistem Comercial) • Debian • Ubuntu • Gentoo • Mandriva • CentOS (bazat pe RHEL, necomercial) • Knoppix (prima distributie de Linux care ruleaza direct de pe CD - LiveCD)• Puppy • MEPIS

1.2 Cosideratii Hardware

1.2.1 ACPI

ACPI (Advanced Configuration and Power Interface) este un standard dezvoltat de un consortiu format din HP, Intel, Microsoft, Phoenix si Toshiba in 1996. Ultima versiune dateaza din Octombrie 2006.

ACPI reprezinta un standard prin care OS are controlul asupra recunoasterii elementelor hardware si power management. Folosind aceasta interfata BIOS-ul furnizeaza OS toate mecanismele necesare pentru controlul low-level ale componentelor hardware. OS poate determina ca sistemul sa consume putina energie in anumite perioade si multa energie cand este cazul (ca si in cazul laptop-urilor). Exista pe tastatura "power management keys" pentru oprirea sistemului, cresterea luminozitatii monitorului etc. Hardware-ul (placa de baza si chiar CPU) trebuie sa fie compatibil cu acest standard.

Un sistem compatibil ACPI poate sa se gaseasca in urmatoarele stari:a)G0 - Working - starea normala de operare a unui calculator cand aplicatiile ruleaza,CPU executa instructiuni etcb)G1 - Sleeping - are 4 substari ( Standby, Hybernation etc)c) G2 - Soft off - Aproximativ asemantor cu G3 (mechanical off) doar ca anumitecomponente raman alimentate cu energie astfel incat diferite evenimente sa poate aduce statia in starea G0 (keyboard, LAN, USB). Din aceasta stare sistemul trebuie sa buteze pentru a intra in starea G0.d)G3 - Mechanical Off - Nivelul de energie consumat este aproape zero.

Page 4: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Wake on LAN (WoL)

WoL este o tehnologie care permite pornirea unui calculator de la distanta prin trimiterea unui frame Ethernet special. Placa de retea este alimentata continuu cu energie si asculta primirea frame-ului special.

Supportul pentru Wake on Lan (WoL) este implementat pe placa de baza. NIC-ul (care inca primeste energie) asculta dupa acel pachet special numit "Magic Packet". Daca acesta este valid buteaza calculatorul.

Magic Packet: se trimite pe adresa de broadcast folosind UDP si portul 0 (la inceput), 7 sau 9 (mai recent).

Datele din MagicPacket: FFFFFFFFFFFF urmat de 16 repetitii ale MAC-ului targetului si eventual o parola formata din 4 sau 6 bytes In afara de hardware (placa de baza) compatibil exista si componenta software si anume programul care genereaza si trimite target-ului magic packet. Exista mai multe astfel de aplicatii atat pentru Windows cat si pentru Linux. Un exemplu de astfel de program este

NotaDaca se doreste pornirea calculatorului dintr-o alta retea de exemplu Internet, Routerul trebuie configurat pentru redirectarea pachetelor "Directed Broadcast"

1.2.2 Hard Disks

In prezent pentru PC-uri exista 2 standarde de conectare a hard disk-urilor la placa de baza: SATA si PATA

ATA - Advanced Technology Attachment reprezinta o interfata prin care hard disk-urile, CD/DVD se conecteaza la placa de baza. Odata cu introducerea SATA (Serial ATA) in 2003, ATA a fost redenumita PATA (Parallel ATA).

Pe placa de baza a arhitecturii X86 exista 2 sloturi pentru conectarea hardiskurilor PATA. Pe fiecare cablu paralel se pot conecta 2 hdd. Avem astfel in total maxim 4 hdd. Ele sunt reprezentate in Linux astfel:

/dev/hda - primary master hard disk/dev/hdb - primary slave hard disk/dev/hdc - secondary master /dev/hdd - secondary slave

Fiecare Hard Disk poate contine partitii primare care pot fi maxim 4 si partitii logice care se gasesc in cadrul unei partitii extinse. A 4-a partitie primara este considerata partitia extinsa, este unica si va contine restul partitiilor logice.

NotaIn cazul hard disk-urilor SATA sau SCSI acestea sunt reprezentate prin fisierele/dev/sda, /dev/sdb, /dev/sdc si /dev/sdd

Page 5: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1.2.3 RAID

RAID (Redundant Array of Inexpensive/Independent Disks)

DefinitieRAID reprezinta o metoda prin care mai multe hard diskuri fizice se grupeaza intr-o

singura unitate logica. Tehnologia RAID a fost definita prima data de catre un grup de cercetatori de la universitatea Berkeley din California. Exista 2 categorii de configuratii

1. Software RAID. Hard diskurile sunt combinate intr-o singura unitate logica de catre sistemul de operare. OS vede fiecare disk si trebuie configurat sa le foloseasca ca un singur ansambl - JBOD (Just a Bunch Of Disks).

2. Hardware RAID. Hard diskurile sunt combinate intr-o singura unitate logica de catre un controller. OS (Operating System) vede ansamblul ca un singur hard disk. Nu este nevoie de nicio configuratie la nivel de sistem de operare.

Hardware RAID ofera mai multa securitate si performata a datelor dar este mai scump.

Nivele RAID a) RAID 0 (Data Striping without redundancy). Acest nivel este cel mai eficient ca si

performanta dar nu ofera protectia datelor. Se formeaza din minimum 2 hard disk-uri. Informatia este "sparta" in fragmente si redistribuita pe mai multe diskuri din array (ansamblul de diskuri fizice care pentru sistemul de operare reprezinta singura unitate logica). Se poate scrie/citi in paralel. Daca un singur disk se defecteaza intreg sistemul devine inutilizabil.

b) RAID 1 (Disk Mirroring). Nr. minim de diskuri din array este 2. Datele sunt salvate pe fiecare dintre cele 2 hard diskuri. Securitatea datelor este maxima iar performantele de citire/scriere sunt mari. Singurul dezavantaj este ca acest nivel necesita de doua ori mai mult spatiu de stocare.

c) RAID 2 - Nu se foloseste. d) RAID 3 si RAID 4 (Striped Set with dedicated parity) - minimum 3 discuri. e) RAID 5 (Striped Set with Distributed Parity). Nr. minim de diskuri este 3. O

defectiune a unui disk nu duce la distrugerea tuturor datelor. Datele aflate pe diskul defect pot fi recuperate de pe celelalte diskuri.

f) RAID 0/1, RAID 10 - reprezinta o combinatie intre RAID 0 si RAID 1. Nr. minim de discuri este 4.

Pentru RAID 0 si RAID 1 avem nevoie de cel putin 2 partitii pe 2 hard diskuri diverite. RAID 5 necesita 3 partitii. Se recomanda folosirea partitiilor de aceeasi marime.

NotaExista si posibilitatea folosirii unui singur hard disk, doar ca beneficiile RAID dispar.

Page 6: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1.2.4 LVM

LVM (Logical Volume Management)

Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe diskuri si partitii. Un volum logic poate fi folosit ca o partitie si anume se poate formata cu un sistem de fisiere si monta intr-un anumit mount-point.

Mai multe "physical partitions" - hard diskuri intregi sau partitii se combina intr-un singur "volume group". LVM nu trebuie confundat cu RAID. Acestea sunt 2 tehnologii diferite care se completeaza. EVMS (Enterprise Volume Management System) reprezinta o interfata comuna pentru LVM si RAIDAvantaje LVM:

o se pot combina mai multe partitii sau hdd intr-un singur "volume group"o un "logical volume" poate fi largit cand este nevoie de mai mult spatiu intr-un mod

foarte simplu. o se pot adauga noi "logical volumes" la "volume group" fara a fi nevoie de oprirea

sistemului sau demontarea partitiilor.o se pot adauga noi hdd la "volume group" intr-un "running system"

1.3 Boot Loader/Boot Manger

Boot manager & Boot loader

Boot Loaderul este primul program executat in momentul butarii unui calculator. Acesta este responsabil sa transfere controlul catre kernelul sistemului de operare. Acesta din urma incarca intreg sistemul de operare. Definitie

Procesul de butare (booting) reprezinta incarcarea/copierea sistemului de operare de pe Hard Disk in RAM si executarea de catre acesta a diferitelor functii pentru initializarea dispozitivelor hardware (recunoasterea placii grafice pentru afisare la monitor, stabilirea rezolutiei monitorului, montarea sistemelor de fisiere de pe hard disk, initializarea porturilor seriale, usb, initializarea mouse-ului si a tastaturii etc. Detalii).

Un boot manager este un program care ajuta utilizatorul sa aleaga intre mai multe sisteme de operare, sa seteze sistemul default, timeout etc.

Pe Linux se folosesc in principal 2 programe care contin atat boot loader cat si boot manager. Acestea sunt LILO - Linux Loader si GRUB - GRand Unified Bootloader. Grub este mai flexibil, este de preferat. Grub este instalat automat de multe distributii de Linux dar si Unix (ex. Solaris). Grub poate incarca si alte sisteme de operare (Windows, Solaris, etc).

Fisierul de configurare al lui Grub este default in /etc/grub.conf sau in /boot/grub/menu.lst

Boot Loaderul se instaleaza intr-un singur sector al hard disk-ului numit sector de boot. Exista 2 categorii de sectoare de boot:

1. VBR - Volume Boot Record - reprezinta primul sector al unui hard disk care nu a fost partitionat sau primul sector al unei partitii a unui hard disk care a fost

Page 7: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

partitionat. Contine cod pentru a incarca sistemul de operare de pe acel hard disk sau de pe acea partitie.

2. MBR - Master Boot Record - reprezinta primul sector al unui hard disk care a fost partitionat. Contine cod pentru a identifica partitia activa si a invoca Volume Boot Record al acelei partitii. Dimensiunea MBR este 512 bytes din care maximum 446 reprezinta cod executabil.

Fisierul de configurare al GRUB este: /boot/grub/menu.lst In momentul in care dorim modificari referitoare la modul de functionare al acestuia precum adaugarea unui nou sistem de operare in meniul grubului de la inceput, stergerea unui sistem de operare in care sa butam, modificare timeout etc trebuie sa modificam fisierul precizat mai sus.

Structura acestuia este:

default 0timeout 8title Windows XP rootnoverify (hd0,0)chainloader +1title Fedora Coreroot (hd0,1)kernel /boot/vmlinuz root=/dev/sda2 initrd /boot/initrdtitle Solarisrootnoverify (hd0,2)chainloader +1

1.4 Instalare

Instalarea unui sistem de operare Linux modern decurge asemanator cu instalarea sistemului Windows. Installer-ul recunoaste componentele hardware, instaleaza drivere

Page 8: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

pentru acestea, partitioneza hard disk-ul, creaza utilizatori, configureaza reteaua etc. La sfarsit avem un sistem de operare Linux perfect functional.

NotaIn comparatie cu Windows, o distributie Linux contine aproape toate programele necesare utilizatorului. Acestea sunt incluse pe DVD-ul sau CD-urile de instalare, iar daca sunt alese de utilizator sunt instalate o data cu sistemul de operare. La final vom avea acces la la majoritatea programele necesare precum: editoare de text, playere video, mp3 player, program de copiere CD-uri, program de Backup, client de E-mail, Browser, client de messenger etc. Pentru o echivalenta a programelor Windows-Linux cititi sectiunea capitolului "Mediul Grafic" a acestui curs numita "Programe Desktop".

Aspecte care trebuie avute in vedere inaintea inceperii instalarii unui sistem de operare Linux:

1. Linux are nevoie de propria partitie pe care sa se instaleze. Aceasta poate fi creata anterior din Windows folosind un program precum Partition Magic sau in timpul instalarii Linux. Dimensiunea partitiei se recomanda sa fie de circa 10 GB pentru o folosire normala a sistemului Linux. In cazul in care aceasta se creaza din Windows poate sa fie formatata cu orice sistem de fisiere (fat, ntfs etc), iar in timpul instalarii Linux aceasta trebuie formatata cu un sistem de fisiere precum ext3 sau reiserfs.

2. Pentru performante crescute, Linux necesita o partitie speciala de tip swap. Se recomanda ca dimensiunea partitiei sa fie de 2 ori dimensiunea memoriei RAM. Partitia de swap trebuie creata anterior din Windows sau in timpul instalarii Linux. Se va formata ca swap in timpul instalarii. Partitia de swap NU este obligatorie.

1.5 Linux rescue

1.5.1 Refacerea configuratiei de boot

Exista foarte multe cazuri in care sistemul de operare nu mai buteaza din cauza unei erori, cand am "pierdut" parola de root sau cand vrem sa rescriem Grub-ul pe MBR pentru butarea in mai multe sisteme. Dupa instalarea Windows (Linux fiind deja instalat) MBR-ul este suprascris de Windows astfel incat nu vom mai putea alege sistemul de operare in care sa butam sau sa intram in Linux.

NotaCD-ul de rescue poate sa fie primul CD dintre CD-urile de instalare, un CD special in cazul Fedora sau DVD-ul de instalare. La butare folosind CD-ul de rescue trebuie aleasa butarea in modul rescue sau la anumite distributii precum Slackware sau Fedora Core 2,3,4,5 sau 6 se scrie linux rescue in linie de comanda din prima fereastra care apare.

Etapele sunt urmatoarele (in cazul in care folosim primul CD Fedora, similar pentru alte distributii):

1. Butam folosind CD-ul de rescue2. Scriem in linia de comanda din prima fereastra: linux rescue

Page 9: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

3. Sistemul va intra in modul rescue, iar dupa o serie de intrebari (daca pornim interfata de retea, alegerea limbii) va incerca sa identifice daca exista un sistem de operare Linux deja instalat. In acest caz acesta este montat automat in /mnt/sysimage

4. Daca sistemul de operare anterior a fost gasit si montat in /mnt/sysimage trebuie sa executam comanda chroot /mnt/sysimage.

Comanda chroot are urmatoarea sintaxa: chroot NEWROOT [COMMAND [ARGS]...] In mod normal comenzile si fisierele sunt cautate incepand cu root directory care este

"/". chroot schimba "/" cu un nou director NEWROOT si executa comanda COMMAND cu argumentele ARGS. Daca comanda nu este specificata este pornit shellul default sau Bourne ( /bin/sh) daca acesta nu este definit. Comanda chroot permite executarea urmatoarelor comenzi in sistemul de fisiere avand root directory /mnt/sysimage (unde se gaseste sistemul de operare Linux care este deja instalat) in loc de "/"care contine sistemul de fisiere generat automat de modul rescue.

5. Se instaleaza Grub cu vechea configuratie pe MBR prin comanda grub-install /dev/hda.

Nota/dev/hda se inlocuieste cu fisierul care reprezinta Hard Disk-ul pe care se instaleazaGrub. In cazul hard disk-urilor SATA sau SCSI acestea sunt reprezentate prin sda, sdb,sdc si sdd.

1.5.2 Recuperarea parolei de root

Exista cazuri in care parola userului root a fost uitata, schimbata accidental sau in mod intentionat de o alta persoana care avea acces la contul de root astfel incat nu mai ne putem loga ca root in sistem. ImportantOrice sarcina administrativa din Linux poate fi realizata DOAR de userul root deci accesul la contul root este obgligatoriu. In Linux orice modificare a unei setari a sistemului de operare se realizeaza modificand un fisier text aferent numit fisier de configurare. Aceste fisiere se gasesc in directorul /etc Un user normal sau neprivilegiat are permisiunea de a modifica DOAR fisierele si directoarele din propriul Home Directory.

Exista in general 2 posibilitati de recuperare a parolei de root: 1) Butarea sistemului folosind CD-ul de rescue. In cazul in care exista acces fizic la

calculator se buteaza folosind CD-ul de rescue dupa care se monteaza partitia pe care se gaseste sistemul de fisiere "/" si care contine fisierele /etc/passwd (contine userii din sistem inclusiv root) si /etc/shadow (contine hash-ul parolei uitate).

In continuare exista 3 posibilitati:

Page 10: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

a) Se editeaza folosind editorul preferat (Exemplu VI) fisierul /etc/shadow si se sterge hash-ul parolei lui root. Dupa restartarea calculatorul se poate loga ca root fara a mai cere parola

b) Se inlocuieste hash-ului parolei lui root cu hash-ul unei parole cunoscute a unui cont oarecare. Se logheaza ca root folosind acea parola

c) Se monteaza sistemul de fisiere pe care se gaseste sistemul Linux in root si se foloseste comanda passwd root.

Exemplu

Presupunem ca Linux s-a instalat pe prima partitie primara de pe primul hard disk

SATA ( /dev/sda1) mount /dev/sda1 /mntchroot /mntpasswd root

2. Modificarea boot loader (GRUB). Scopul acestei metode este de a instrui Grub-ul sa buteze in run-level 1 (single mode) caz in care exista un singur utilizator si anume root caruia nu i se mai cere parola pentru logare. Ulterior se schimba parola folosind comanda passwd root.

Capitolul 2 - Structura Linux

2.1 Structura Linux

Un sistem de operare este format din urmatoarele componente:

Page 11: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Kernel Reprezinta partea cea mai importanta a OS, cea care lucreaza cu CPU si este cea

mai apropriata de Hardware. Fizic kernelul se regaseste intr-un fisier iar de cele mai multe ori acesta este /boot/vmlinuz-version_no Functii:

o I/O Managemento managementul memoriei RAM si SWAPo apelarea functiilor de sistem o lucrul cu echipamentele periferice prin drivereo managementul sistemului de fisiere, a proceselor care ruleaza

Ultima versiune de Kernel este 2.6.24.2 (11.02.2008)

Memoria SWAP reprezinta un tip special de memorie care se gaseste pe Hard disk, dar care este folosita de Kernel ca si cand ar fi memorie RAM. Dimensiunea acesteia se recomanda a fi de doua ori mai mare decat RAM. Pe Linux se foloseste o partitie speciala pentru memoria de tip Swap.

ShellUtilizatorul nu poate comunica direct cu Kernelul. Accesul la functiile kernelului se

face prin intermediul shell-ului. Acesta este un program care primeste comenzi de la user sau alte aplicatii, le interpreteaza si le transmite kernelului pentru a le executa.

Printre functiile shell-ului se afla si customizarea intregului environment (mediu de lucru) precum si programarea folosind shell scripts. Exista mai multe shell-uri printre cele mai importante amintim:

a) Bourne Shell (sh) - Primul shell pentru Unix. A fost dezvoltat de Stephen Bourne la AT&T. Nu are foarte multe optiuni.

b) Korn Shell (ksh) - A fost dezvoltat de David Korn la Bell Labs. c) C Shell (csh) - A fost dezvoltat de Bill Joy la Sun si se bazeaza pe limbajul de

programare C.d) Enhanced C Shell (tcsh) e) Z Shell (zsh) - Este asemanator de Korn shell dar are mai multe functii.f) Bash (bash) - Bourne Again Shell - Default pe Linux. Cel mai folosit si mai

puternic shell. Sistemul de fisiere . Pentru detalii cititi subcapitolul "Sistemul de fisiere" a acestui curs.

2.2 Structura unei comenzi

Pentru managementul sistemului Linux (copiere de fisiere sau directoare, stergere,redenumire, afisare continut, listare, editare etc) se folosesc comenzi. Exista peste 400comenzi de baza in Unix/Linux.

Exista comenzi incluse in shell ( Exemplu: alias, cd, umask) si comenzi independente reprezentate prin programe ( Exemplu: ls, cp, rm etc).

Page 12: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Structura unei comenzi este urmatoarea:

NUME_COMANDA OPTIUNI [ARGUMENT 1] [ARGUMENT 2]

NUME_COMANDA = reprezinta numele comenzii. Trebuie sa apara primul. Directorulin care se gaseste comanda trebuie sa fie in variabila PATH (la fel ca si in WINDOWS).

NotaIn contrast cu Windows, in Linux directorul curent reprezentat prin . (punct) nu se gaseste in PATH. Pentru a executa o anumita comanda nu este suficient sa ne mutam in directorul care contine programul respectiv sau comanda si sa executam respectiva comanda.

OPTIUNIo pot fi scurte (o litera). Exemplu: ls -R sau pot fi combinate mai multe litere.

Exemplu: ls -Fal o pot fi formate din unul sau mai multe cuvinte. Exemplu: smart --ignore-locks

ARGUMENTEo reprezinta scopul comenzii. Pot fi fisiere sau directoare, adrese IP, nume de

domenii DNS etc

2.3 Comenzile ls si less

Comanda ls

Una dintre cele mai folosite comenzi in Linux este ls (list). Aceasta afiseaza informatii diverse despre fisiere si directoare.

Page 13: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

ls OPTIONS FILE - listeaza continut

-l listare lunga, sortare dupa nume

-F afiseaza tipul fisierului

-t sortare dupa mtime

-h human readable

-i afiseaza inode

-R afiseaza recursiv

-S sortare dupa marime

-d afiseaza informatii despre director in loc de continutul acestuia

-c afiseaza ctime (in combinatie cu -l)

-u afiseaza atime (in combinatie cu -l)

-a afiseaza hidden files

Comanda less

Intreaga configuratie a unui sistem Linux, fie ca ne referim la servere care ruleaza, firewall sau la rezolutia monitorului se gaseste aproape exclusiv in fisiere text. Una dintre sarcinile cele mai frecvente ale unui admin este vizualizarea diferitelor fisiere text. Cea mai folosita comanda pentru vizualizare care se gaseste pe orice distributie de Linux sau chiar de Unix este less.

less FILE - afiseaza continut fisier text

In timpul vizualizarii continutului fisierului putem folosi urmatoarele taste:

enter afisare urmatorul rand

space afisare urmatoarea fereastra

d afisare urmatoarea jumatate de fereastra

u afisare jumatatea de fereastra anterioara

/sir cautare sir forward

?sir cautare sir backward

n urmatoarea aparitie a sirului

N aparitia anterioara a sirului

Page 14: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

g salt la inceputul fisierului

G salt la sfarsitul fisierului

q quit

h help

2.4 Console/terminale virtuale

In Linux si Unix exista conceptul de Consola Virtuala si Terminal Virtual sau Terminal Text.

Considerente istoriceInitial se folosea un singur calculator de tip mainframe sau similar la care se

conectau mai multi useri simultan folosind fiecare o consola. O consola era reprezentata printr-un ansamblu de tastatura si monitor.

Linux pune la dispozitia utilizatorului 7 console virtuale (logice) care pot fi accesate folosind combinatia de taste CTRL+ALT+F1 pt consola 1, CTRL+ALT+F2 pentru consola 2 etc. In consola 7 este pornit mediul grafic. Terminal windows, terminal emulator sau terminal virtual reprezinta o consola pornita din modul grafic.

NotaFizic, cele 7 console virtuale sunt reprezentate prin fisierele /dev/tty1-7, iar terminalele virtuale sunt reprezentate prin fisierele /dev/pts*. Fisierul /etc/securetty contine pe fiecare linie locatiile de unde userul root are voie sa se logheze

2.5 Runlevel

Reprezinta starea in care se afla si opereaza sistemul de operare la un anumit moment dat.

Exemplu: un sistem de operare Linux care intra in runlevel 0 se opreste, daca intra in runlevel 6 tocmai se restarteaza.

In functie de runlevel-ul in care opereaza sistemul de opereare exista anumite facilitati oferite si anumite procese care ruleaza. Un sistem de operare Linux se poate afla la un moment dat intr-un singur runlevel. Linux runlevels

Runlevel Semnificatie Descriere

0 Halt, Shut downOprirea sistemului, aducerea lui in starea in care se intrerupe alimentarea cu energie electrica

Page 15: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1 single-user

Modul administrator folosit pentru mentenanta. Nu exista retea, mediu grafic si doar sistemele de fisiere locale sunt montate. Exista un sigur user care se poate loga in sistem si anume root. Este echivalentul lui Safe-Mode din Windows

2 multi-user Modul multi-user fara retea.

3 multi-user + retea Runlevel default pentru servere.

4 N/A Nu exista

5multi-user + retea + mediul grafic

Run level default pentru Desktop

6 reboot/restart Restartarea calculatorului

Mai poate exista runlevel-ul S sau s, care nu este folosit direct ci de catre programe si scripturi care se executa cand se intra in runlevel 1. Pentru trecerea dintr-un runlevel in altul se foloseste comanda: init noul_runlevel

Exemplu

1.Restartare calculator /sbin/init 6 2. Oprire calculator /sbin/init 03. Intrare in single-user mode /sbin/init 1 4. Revenire in runlevel 5 /sbin/init 5

2.6 Sistemul de fisiere

2.6.1 Prezentare generala

Sistemul de fisiere reprezinta modul de organizare, structurare si accesare a fisierelor, directoarelor si linkurilor pe hard disk. Modul de organizare, accesare si recunoastere particularitarilor fiecarui sistem de fisiere cade in sarcina Kernelului. Acesta trebuie sa "ofere suport" pentru acel sistem de fisiere.

In prezent Kernelul de Linux recunoaste majoritatea sistemelor de fisiere existente: fat16, fat32, ntfs, ext2, ext3, ReiserFS, nfs, smb, iso9660 etc. Pentru majoritatea distributiilor de Linux default este ext3 - Third Extended File System (default pt. RedHat, Fedora, Ubuntu) sau ReiserFS (default pt. Slackware, SuSE, Xandros, Yoper).

De multe ori in studiul sistemelor de operare Unix/Linux gasim sintagma - "everything is a file". Acest lucru se refera la faptul ca fiecare program, sau dizpozitiv hardware este reprezentat printr-un fisier. Nu mai exista alta modalitate de reprezentare a informatiei. In Linux fisierele sunt case sensitive - se face distinctie intre litera mare si mica.

Un fisier se considera ascuns (hidden) daca numele sau incepe cu "." (punct).

Page 16: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu/dev/hda1 reprezinta prima partitie de pe hard disk-ul primary master /dev/cdrom reprezinta CD-ROM-ul. O scriere sau o citire de pe hard disk sau CD inseamna de fapt o scriere sau citire din fisierul respectiv.

In Linux un director este tot un fisier (dar special care are anumite proprietati). Sistemul de fisiere in Linux este arborescent (ca si in windows) doar ca avem un sigur arbore chiar daca avem mai multe partitii sau hard disk-uri. Radacina sistemului de fisiere se numeste ROOT si se noteaza cu "/".

2.6.2 FHS

De-a lungul timpului s-a incercat standardizarea sistemului de fisiere pentru sistemele Unix/Linux luand nastere astfel FHS - Filesystem Hierarchy Standard. Cu toate acestea nu exista un standard general acceptat in prezent.

Principalele directoare care exista in majoritatea distributiilor de Linux si Unix sunt:• /sbin - utilitare pentru administrarea sistemului, multe accesibile doar lui

root• /bin - utilitarele sistemului care trebuie sa fie disponibile atat userilor

normali cat si lui Root• /dev - fisiere speciale care reprezinta dispozitivele din sistem• /lib - librarii de functii folosite de aplicatii, kernel etc /var - fisiere care in

general isi modifica continutul (loguri, mailuri etc) • /usr - o ierarhie asemanatoare cu "/" ( /usr/sbin, /usr/bin, /usr/etc )• /etc - fisierele de configurare ale sistemului, ale serverelor care ruleaza etc• /root - home directory userului root• /home - home directory pentru userii din sistem. Fiecare user are home

directory un director in interiorul lui • /home (de cele mai multe ori directorul poarta numele userului) • /proc - printre functiile principale ale kernelului este si aceea de a controla

dispozitivele fizice si de a coordona modul in care procesele folosesc aceste resurse. In /proc se gaseste statusul curent al kernelului cu toate informatiile pe care acesta le cunoaste. Aceste fisiere si directoare sunt create automat la butare. Ele se numesc virtuale. De aici vine si numele de "Sistem de Fisiere Virtual" (acesta este proc). Aceste fisiere contin multe informatii utile, iar cu toate acestea dimensiunea lor este de 0 bytes.

NotaFisierele din /proc pot fi modificate pentru a configura sistemul "on-the-fly".Exemplu: echo "new-hostname" > /proc/sys/kernel/hostname

Page 17: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

• /media - mount point pt. sisteme de fisiere temporare • /mnt - mount point pentru sisteme de fisiere remote• /lost&found - fisiere care au fost salvate in timpul unui "failure"• /boot - fisiere necesare boot loader-ului, kernel-ului • /opt - programe si aplicatii adaugate ulterior care nu fac parte din distributie• /cdrom - mount point pt CD

Mount Point - reprezinta locul din sistemul de fisiere UNIC in care se alipesc sisteme dfisiere de pe alte partitii locale sau externe, de pe CD-ROM/DVD-ROM, USB Stick etc.

2.6.3 Structura sistemului de fisiere

Sistemul de fisiere in Linux este arborescent si unic. Radacina se numeste root si se noteaza cu "/". In Linux fisierele sunt case-sensitive - se face distinctie intre litera mare si mica. In Linux "totul este un fisier". Nu mai exista alta forma de reprezentare a informatiei.

Un sistem de fisiere poate fi impartit in 4 parti distincte in urmatorea ordine:1. Boot Block - aflat la inceputul partitiei si care contine cod (BootLoder) pentru a

incarca sistemul de operare.2. Super Block - contine informatii actuale despre sistemul de fisiere: marimea

acestuia, nr. de blocuri de date libere, locatia acestora, marimea lui inode table, nr maxim de inoduri etc.

3. Inode Table (List) - Lista statica definita initial la instalare si care nu se poate schimba si care contine inodurile din sistem.

4. Data Blocks - Datele sunt salvate in blocuri (in general 1 block = 512 bytes).

Boot Block Super Block Inode Table Data Block

Page 18: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2.6.4 Structura unui fisier

Un fisier consta in informatia pe care acesta o contine (text, date, imagine, sunet etc) dar si o structura de date care se numeste inode (index node) si care contine informatii suplimentare despre acel fisier.

Standardul POSIX stabileste ca fiecare inode sa contina urmatoarele informatii:

• tipul de fisier• owner• group owner• drepturile de acces (citire, scriere, executie) pentru owner, group si others• nr. de hard linkuri catre aceiasi informatie• atime• ctime• mtime• marimea unui fisier (size)• pointer catre blocurile de date care reprezinta informatia tinuta de fisier.• inum - nr. intreg care identifica unic fiecare inode

NotaAtentie !!! Numele fisierului nu este pastrat in structura inodului.

Un director este un fisier de tip container care contine perechi de nume_fisier si inode-ul corespunzator.

In momentul in care ne referim (utilizatorul sau un proces) la un fisier, kernelul cauta in structura de directoare conform cu calea relativa sau absoluta de referire la fisier, inode-ul corespunzator pentru acel nume. Fiecare inode se identifica unic printr-un numar de tip intreg numit "inode number" sau i number. Acesta poate fi vizualizat folosind comanda ls –i. Exista un nr. maxim pt. acest i-number care se defineste automat la instalarea sistemului in functie de dimensiunea partitiei si deci exista un nr. maxim de fisiere (comanda df -i).

In Linux fiecarui fisier sau director i se ataseaza 3 (trei) timpi:• ctime ( change time ) - reprezinta data la care s-au modificat informatiile continute

in inode-ul fisierului sau directorului (permisiuni, owner, group etc). Nu se refera la timpul cand au avut loc modificari ale continutului. Se afiseaza cu comanda ls-lc

• mtime (modify time) - data la care s-a modificat informatia din fisier. Se afiseaza cu ls–l

• atime ( access time ) - data la care s-a afisat continutul fisierului. Se afiseaza cu ls–lu

Page 19: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Comanda stat afiseaza de asemenea acesti 3 timpi. Pentru modificarea celor 3 timpi ai unui fisier sau director se foloseste comanda touch.

touch OPTIONS FILE - listeaza continut

fara optiuni modifica atime, mtime si ctime cu timpul curent

-t DATE_TIMESTAMPmotifica atime si mtime cu DATE_TIMESTAMP in loc de data curentaex: touch -t 200301231230 a.txt

-d DATE_STRINGmodifica atime si mtime cu DATE_STRINGex: touch -d '1 May 2006 10:22' /etc/group

-amodifica doar atime cu data curenta sau cu o alta data daca este specificataex: #touch -a -d '23 May 2006 10:22' /etc/group

-mmodifica doar mtime cu data curenta sau cu o alta data daca este specificata

-r REFERENCE_FILEschimba atime si mtime cu cele ale lui REFERENCE_FILEex: touch -r b.txt a.txt

Notactime nu poate fi setat in mod expres si independent de catre user

2.6.5 Tipuri de fisiere

In Unix si Linux fisierele se impart in urmatoarele categorii:1. fisiere standard (regular files). Acestea pot fi text, executabile, binare etc2. directoare. Acestea sunt tot fisiere care au rol de container pentru alte fisiere sau

directoare. Ele reprezinta un tip special de fisier (container) folosit pentru formarea structurii arborescente.

3. link-uri. Pot fi soft links/sym links (echivalentele shortcut-urilor din windows) si hard links - se refera la aceiasi zona de date, dar identificata prin nume diferite.

4. fisiere speciale (device files). Toate dispozitivele fizice (hard disk, RAM, etc) sunt reprezentate printr-un fisier. Accesul la aceste dispozitive se realizeaza prin scrierea/citirea din aceste fisiere.

Exista mai multe feluri de fisiere (dispozitive) speciale: a. de tip caracter - folosite pentru accesarea byte cu byte a fisierului care reprezinta

dispozitivul hardware ( Exemplu: /dev/pts/0)b. de tip bloc - folosite pentru accesarea in blocuri de date a fisierului care reprezinta

dispozitivul hardware ( Exemplu: /dev/sda1) c. named pipes - procesele in Linux comunica cu ajutorul unui pipe (conducta) care se

creaza cu ajutorul caracterului "|". In acest mod outputul unui proces poate fi directionat ca input pentru un alt proces. Acest tip de pipe exista doar pe timpul

Page 20: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

executiei comenzii. Exista un al doilea tip de pipe numit "named pipe" introdus initial in Unix-ul de tip AT&T si care este folosit pentru comunicarea dintre procese prin intermediul unei cozi de tip FIFO (First In First Out). Acest tip de fisier se creaza de catre administratorul sistemului pentru a interconecta 2 procese cu comanda mkfifo

d. Socket (unix domain socket) este asemanator cu pipe-ul, adica se foloseste pentru a conecta doua procese. Exista o oarecare asemanare cu socketul TCP/IP chiar daca este vorba despre un alt concept.

Comanda ls -lF afiseaza diferitele tipuri de fisiere folosind anumite simboluri:

Simbol Descriere

nimic fisier standard

/ director

* fisier executabil (ex: /bin/ls)

@ sym link (ex: /etc/grub.conf)

= socket (ex: /dev/log) - procesele scriu in /dev/log pentru a comunica cu syslogd

| named pipe (ex: /dev/initctl) - folosit pentru a comunica cu init

2.6.6 Links

In Linux, comparativ cu Windows exista 2 categorii de linkuri:1) hard links

o se refera la asocierea unui nume de fisier cu un inode number (asocierea va fi prezenta intr-un director). Avem astfel doua sau mai multe nume care sunt asociate cu aceiasi structura de tip inode;

o nr. de hard linkuri din structura inodului este incrementat de fiecare data cand se creaza un nou hard link;

o in momentul in care se sterge un fisier, se decrementeaza nr. hard linkurilor din inode, iar cand se ajuge la zero este dealocat inodul si marcat ca liber;

o nu se pot crea MANUAL hard linkuri catre directoare. Un director nou creat are default 2 hard linkuri. De fiecare data cand se creaza un subdirector, numarul de hard linkuri al directorului parinte este incrementat fiindca se creeaza o noua referinta catre acesta si anume ".." care exista in orice director. Daca un director are 17 hard linkuri inseamna ca acesta contine 16 subdirectoare. Al 17-lea este "." care se gaseste in orice director.

o nu se pot crea hard linkuri intre fisiere de pe partitii diferite;o daca fisierul initial este sters, redenumit sau mutat hard linkul nu este influentat;o un hard link se creaza folosind comanda ln

Page 21: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2) soft links / sym links o echivalentul shortcuts din Windows;o daca fisierul sau directorul initial este sters, mutat sau redenumit soft linkul nu mai

functioneaza;o listarea continutului folosind comanda ls -F identifica un symlink dupa caracterul

"@" de la sfarsitul numelui;o se pot crea symlinkuri catre directoare sau fisiere de pe alte partitii;o un symlink se creaza folosind comanda ln cu optiunea -s

Exemplu1. Pentru a crea un soft link numit mylink.txt care pointeaza la /home/stud/proiect.txt se foloseste comanda: ln -s /home/stud/proiect.txt /home/stud/mylink.txt 2. Pentru a crea un hard link al lui /etc/passwd in /etc numit hl-passwd se foloseste comanda: ln /etc/passwd /etc/hl-passwd

2.6.7 Piping & Redirectare

Unix/Linux este un sistem de operare care se bazeaza pe comenzi foarte specializate care lucreaza impreuna. Astfel mai multe comenzi pot fi combinate si se poate crea astfel o comanda complexa. Se foloseste astfel caracterul pipe "|".

Exempluls -l | less - outputul comenzii ls -l este trimis lui less pentru paginare ls -a | sort - outputul comenzii ls -l este trimis comenzii sort care sorteaza in ordine alfabetica

Redirectarea outputului

In general scopul unei comenzi este de a trimite outputul catre standard output care este monitorul. Este posibil ca outputul unei comenzi sa fie redirectat catre un fisier care exista sau nu. Se foloseste ">" sau ">>" Exempluls -l /bin > /home/student/binaries.txt - creaza fisierul /home/student/binaries.txt (daca acesta exista il suprascrie) care va contine outputul comenzii ls -l /binls -l /sbin >> /home/stud/binaries.txt - adauga outputul comenzii ls -l /sbin fisierului /home/student/binaries.txt (daca acesta nu exista il creaza)

Outputul unei comenzi poate fi redirectat in afara de standard output si catre standard error. Pentru acesta se foloseste "2>". Pentru a combina standard output cu standard error se foloseste "&>"

Exemplugcc program.c > output.txt 2> errors.txt - redirecteaza outputul compilarii fisierului program.c catre output.txt, iar erorile sunt redirectate catre fisierul errors.txt

Page 22: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

gcc program.c &> output.txt - redirecteaza catre fisierul output.txt atat standard output cat si standard error.

Capitolul 3 - Comenzi si Editoare

3.1 Editorul VI

Page 23: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

In Unix/Linux exista mai multe editoare de text acestea impartindu-se in editoare grafice ( gedit, kate ) si editoare care ruleaza in consola ( vi, vim, emacs, joe, pico, nano etc). Editorul omniprezent pe orice sistem Unix/Linux este VI (Visual Editor). Acesta este extrem de flexibil, complex si plin de optiuni.

Se caracterizeaza prin 3 modalitati de operare:Command Mode

In momentul in care se deschide VI suntem introdusi in "command mode". Se foloseste pentru a accesa celelalte moduri, pentru a vizualiza si edita fisierul curent, copy/paste, search etc. Pentru a schimba intre celelalte 2 moduri de operare ( Insert Mode si Last Line Mode) trebuie sa trecem prin Command Mode. Se foloseste tasta ESC. Modul comanda se foloseste pentru a sterge un caracter, un cuvant, un grup de cuvinte sau litere precum si pentru a inlocui un text. In modul command ne gasim dupa deschiderea unui fisier ( Exemplu: vim /etc/passwd) sau din celelalte moduri apasand tasta ESC.

In timp ce ne aflam in modul comanda avem urmatoarele optiuni: 1. r - replace a char2. x - sterge caracterul de sub cursor.3. cw - change word - sterge cuvantul incepand cu litera de unde este pozitionat

cursorul si ne introduce in Insert Mode.4. dd - sterge o linie5. 7dd - sterge 7 linii6. dw - sterge cuvantul de sub cursor incepand cu caracterul care se gaseste sub

cursor.7. u – undo8. G - se duce la sfarsitul fisierului9. $ - muta cursorul la sfarsitul liniei10. 0(zero) sau ^(carret) - muta cursorul la inceputul unei linii11. :x - muta cursorul pe linia nr. x. Exemplu: :37 - muta pe linia 3712. shift+v, alt+v si ctrl+v ne introduce intr-un sub mod in care putem selecta vizual un

bloc de text sau mai multe randuri (valabil doar in VIM).13. y(yank) - echivalentul lui copy din Windows14. p(paste) 15. /(slash) - search forward.16. ? - search backward17. n - urmatoarea aparitie 18. N - aparitia anterioara19. ZZ (z mare, z mare) - salvare cu iesiere din fisier

Insert ModeEste folosit pentru a insera text in documentul curent. Pentru a intra in Insert Mode

din Command Mode se pot folosi urmatoarele taste:i - insereaza inaintea caracterului de sub cursorI - insereaza la inceputul unui randa - insereaza dupa caracterul de sub cursorA - insereaza la sfarsitul randului

Page 24: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

o - insereaza pe randul urmator.

Last Line ModeSe foloseste pentru a salva documentul curent, pentru revenire la varianta de la

ultima salvare a fisierului sau pentru a executa diferite comenzi (text substitution, afisarea nr. de linii etc). Pentru a intra in acest mod se foloseste : (doua puncte) din Command mode. In Last Line mode utilizatorul are la dispozitie urmatoarele comenzi:wq - write and quitq! - quit fara salvarew! - salvare fara quite! – undoet nu - numeroteaza lini

Editorul VI foloseste fisierul de configurare ~/.exrc. Acesta poate fi modificat pentru customizarea editorului.

NotaVIM (VI Improved) reprezinta o varianta imbunatatita a lui VI care ofera multe facilitati suplimentare si este de recomandat sa fie folosit atunci cand se poate. Toate regulile din VI raman valabile

3.2 Comenzi de baza

In Linux exista peste 300 de comenzi folosite pentru managementul sistemului. Nu toate sunt insa utilizate pentru taskurile zilnice ale unui administrator de sistem. Mai jos ne-am propus sa explicam cele mai folosite comenzi din Linux. O intelegere buna a acestora este extrem de importanta pentru a putea avansa in studiul unui sistem de operare Linux.

ImportantCunoasterea tuturor comenzilor si a tuturor optiunilor acestora este imposibila chiar

si pentru cei mai experimentati admini. Documentatia comenzilor se gaseste in man page-uri care trebuie folosite intesiv in momentul in care se doreste aflarea efectului unei comenzi sau a unei optiuni a comenzii. Exemplu: man ls

pwd - Print Working Directory

Afiseaza directorul curent. Nu are optiuni sau argumente.

cd - Change Directory

Schimba directorul curent.cd NEW_DIRECTORY - mutare in directorul NEW_DIRECTORY

Page 25: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

.. = directorul parinte

. = directorul curent~ = home directory

Exemplu1. Directorul curent se schimba cu /etc/ cd /etc 2. Viitorul director curent va fi parintele directorului curent actual cd ..3. Directorul curent devine Home Directory al userului care executa comanda. Daca

se ruleaza comanda cd fara argumente se schimba directorul curent cu Home Directory. Cele 2 comenzi sunt echivalente

cd ~ cd 4. Directorul curent devine ultimul director in care ne-am aflat cd - = mutare in directorul anterior

mkdir - Make Directory

mkdir OPTIONS DIRECTORY

Optiuni:-p = creaza atat directorul sau directoarele parinte daca acestea nu exista. Daca directorulparinte nu exista comanda mkdir returneaza eroare daca se foloseste fara optiunea -p-v = verboseExemplu: mkdir /home/stud/documents/privat

ls - List

Listeaza continut director sau listare informatii despre fisier.

ls OPTIONS FILE/DIRECTORY

mv - Move

Muta sau redenumeste (in functie de context) fisiere si directoare. In Linux nu exista comenzi diferite pentru mutare respectiv redenumire.

mv OPTIONS SOURCE DESTINATION

Optiuni:-f = force (do not prompt before overwriting)-i = interactive (prompt before overwriting)-u = update (muta doar daca sursa este mai noua ca destinatia sau destinatia lipseste)-v = verbose

Page 26: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu1. Muta fisierul file1.txt din /home/paul/ in /home/dan/ sub numele de file2.txt mv /home/paul/file1.txt /home/dan/file2.txt 2. Redenumire director mv /home/dan /home/andrei

cp - Copy

Copiaza fisiere sau directoare din sursa in destinatie.

cp OPTIONS SOURCE DESTINATION

Optiuni:-i = interactiv-p = pastreaza owner, group si permisiuni pt. fisierul destinatie creat-r = copiaza recursiv (obligatoriu pentru directoare)-f = force (do not prompt before overwriting)

rm - Remove

Sterge fisiere sau directoare.

rm OPTIONS FILES/DIRECTORIES

Optiuni:-i = interactiv-r = sterge recursiv, obligatoriu pentru directoare-f = force

Nota Comanda rm (ca si comenzile asemanatoare din Windows) nu sterge efectiv informatia reprezentata de fisier ci doar marcheaza inode-ul si blocurile de date catre care acesta pointeaza ca fiind "libere pentru a fi utilizate din nou". Folosind programe speciale informatia stearsa poate fi recuperata FOARTE USOR. Programe cunoscute si folosite pentru investigarea unui sistem dupa compromiterea sa de catre un Black Hat Hacker si care contin inclusiv utilitare pentru recuperarea informatiei sterse accidental sau intentional sunt The Sleuth Kit, Autopsy Browser si The

Coroner's Toolkit (TCT).

ImportantUn fisier sau director sters folosind comanda rm nu mai poate fi recuperat in mod

standard din Recycle Bin. In Linux pentru fisierele si directoarele sterse din consola cu cumanda rm nu exista Recycle Bin.

touch

Page 27: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Creaza un fisier gol daca FILE nu exista sau reseteaza atime, mtime si ctime pentru FILE daca acesta exista.

touch OPTIONS FILEcat

Concateneaza si/sau afiseaza continutul unui fisier

cat OPTIONS FILES

Optiuni:-b = no. of nonblank lines-n = no. of output lines

Exemplu1. Afiseaza fisierul /etc/passwd la consola cat /etc/passwd 2. Concateneaza fisierele /etc/passwd si /etc/shadow in fisierul /home/dan/passwd

shadow pe care il si creaza daca nu exista sau il suprascrie daca exista. cat /etc/passwd /etc/shadow > /home/dan/passwd-shadow

more & less

Programe de paginare.

more FILEless FILE

head

Afiseaza primele linii (default 10) dintr-un fisier

head OPTIONS FILE

Optiuni:-n nr = afiseaza primele 'nr' linii

tail

Afiseaza ultimele linii (default 10) dintr-un fisier

tail OPTIONS FILE

Optiuni:-n nr = afiseaza ultimele 'nr' linii

Page 28: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

-n +nr = afiseaza incepand cu linia 'nr'-f = afiseaza in timp real ultimele linii dintr-un fisier. tail -f fisier este cea mai importantacomanda pentru urmarirea modificarii in timp real a logurilor.

Exemplu Afiseaza fisierul /etc/passwd incepand cu linia nr. 5 si pana la final

tail -n +5 /etc/passwd tail -n 5 /var/log/messages Afiseaza in timp real ultimele 10 linii din fisierul cu loguri var/log/messages tail -f /var/log/messages

strings

Afiseaza caracterele printabile/ascii dintr-un fisier binar.

strings FILE

Exemplu: strings /bin/ls

wc

Afiseaza nr. de randuri, caractere sau cuvinte dintr-un fisier

wc OPTIONS FILE

Optiuni:-l = nr. de linii-w = nr de cuvinte-m = nr de caractere

file

Determina tipul fisierului

file OPTIONS FILE

Optiuni: -p = preserve atime du - disk usage

Afiseaza marimea unui fisier sau director

du OPTIONS FILE

Optiuni:-k = adauga prefixul KB

Page 29: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

-s = sum (summarize)-h = human readable formatExemplu: du -ksh /etc/ df - disk free

Afiseaza spatiul total, spatiul ocupat si spatiul liber de pe fiecare partitie de pe hard disk.

df OPTIONS

Optiuni:-h = human readable-i = print used/free inodes

Exemplu: df -hi

cmp - compare

Compararea a 2 fisiere fara afisarea diferentelor dintre ele.

cmp FILE1 FILE2

diff

Compara FILE1 si FILE2 dupa continut si afiseaza diferentele

diff OPTIONS FILE1 FILE2

Optiuni:-i = case insensitive-B = ignora liniile goale (blank lines)-w = ignora spatiile libere (white spaces)-c = comparare detaliata-y = afiseaza pe coloane

stat - statistics

Afiseaza informatii despre FILE (size, type, atime, mtime, ctime)

stat FILE

history

Afiseaza comenzile din history

history OPTIONS

Page 30: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Optiuni:-c = sterge comenzile din history-d nr = sterge linia nr. din history which

Cauta si afiseaza calea catre o comanda

whereis

Cauta si afiseaza calea catre o comanda, man page sau sursa

uptime

Afiseaza timpul de cand hostul este pornit precum si load-ul din ultimele 1,5 si 15 minute

date

Afiseaza/modifica data free

Afiseaza informatii despre RAM si SWAP

free OPTIONS

Optiuni:-t = total-m = MB-k = KB

uname

Afiseaza informatii despre sistem (kernel version etc)

uname OPTIONS

Optiuni:-a = all info -s = kernel name-r = kernel release-v = kernel version-m = machine-p = processor-o = operating system

Page 31: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu: uname -a uname -s -r -v -m

vmstat - virtual memory statistics

Afiseaza informatii despre despre memorie, cpu, I/O blocks. Informatiile afisate sunt documentate in man page-ul comenzii.

ifconfig - Interface configuration

Afiseaza informatii despre interfetele de retea. Se foloseste si pentru a seta caracteristicile interfetelor de retea (IP, Network Mask, MAC etc). NotaMulte exemple din aceasta pagina au folosit fisierul /etc/passwd. Acesta este unul dintre cele mai importante fisiere din sistem in care se gasesc utilizatorii sistemului, cate unul pe fiecare linie, impreuna cu multe informatii despre acestia.

3.3 Regular Expressions

O expresie regulata (regex) reprezinta o modalitate (metoda) de identificare a unui string (sir de caractere) dintr-un text dat conform anumitor reguli. Un regex este reprezentat fizic printr-un string format din caractere speciale.

Reguli:1. Blocul fundamental reprezinta un singur caracter si se selecteaza pe sine2. O expresie paranteza patrata (bracket expression) reprezinta o lista de caracterecuprinsa intre "[" si "]" si descrie un sigur caracter din acea lista. 3. Daca primul caracter este ^ (caret) descrie orice caracter care nu se gaseste in lista. Exemplu: regex-ul [0123456789] - reprezinta o singura cifra iar [^0123456789]reprezinta orice caracter care nu este cifra.4. In interiorul unei expresii paranteza patrata un "range expression" reprezinta 2caractere separate prin -(minus) si selecteaza(identifica) orice caracter care se gasesteintre cele 2 caractere din range expression.5. ^ (caret) in afara parantezelor drepte reprezinta un metacaracter care identificainceputul unei linii (daca este primul caracter din regex).6. $ reprezinta un metacaracter care identifica sfarsitul unei linii (daca este ultimulcaracter din regex)

Exemplu ^ab - linie care incepe cu ab ab$ - linie care se termina cu ab\ ^$ - linie goala ^a[a-z0-9] - linie care incepe cu "a" urmat de orice caracter intre "a" si "z" sau "0" si "9"

7. backslash ("\") urmat de un caracter special selecteaza caracterul special respectiv.

Page 32: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Caractere speciale sunt: ., *, [, \ (punct, asterix, paranteza dreapta deschisa si backslash). Caracterul special "." (punct) selecteaza orice caracter mai putin NEWLINE (linie goala) 8. "?" (semnul intrebarii) selecteaza 0 sau 1 caractere anterioare 9. * (asterix) selecteaza zero (0) sau mai multe caractere anterioare 10. + (doar pt. expresii regulate extinse) selecteaza caracterul anterior o data sau de mai multe ori 11. {n} Elementul precedent este selectat de n ori (exact) 12. {n,} Elementul precedent este selectat de n sau mai multe ori 13. {n,m} Elementul precedent este selectat de cel putin n ori dar nu mai mult de m ori

Cand folosim acolade trebuie sa le precedam cu backslash ("\")

Exemplu1. Gasirea tuturor liniilor care contin un string de tip CNP dintr-un fisier numit file1

grep '[01][0-9]\{12\}' file1.Daca se doreste gasirea tuturor liniilor care contin DOAR string de tip CNP se foloseste "^" pentru ancorarea regex-ului la inceput de rand si "$" pentru ancorarea regexului la sfarsit de rand. grep '^[01][0-9]\{12\}$' file1

2. Sa se creeze un fisier care sa contina toate fisierele si doar fisiere (de tip regular file) din /etc eliminand liniile goale liniile care contin cuvantul 'total' sau liniile care afiseaza directoare ls -lR /etc/ | egrep -v '(^$|^total|^/)' > etc_content

3.4 Comenzile find si grep

1.find Comanda find cauta fisiere si directoare dupa criterii complexe in mod recursiv find [path...] [expression]. Daca unul dintre argumente este numeric si are valoarea n se poate folosi:

+n for greater than n

-n for less than n

n for exactly n

-type f = tipul este fisier -type d = tipul este director -user uname = userul este uname-group gname = grupul owner este gname-links n = fisierul are n hard link-uri -perm mode = permisiunile fisierului sunt exact mode (octal or symbolic). -perm -mode = all of the permission bits mode are set for the file.-perm +mode = any of the permission bits mode are set for the file.-size n = marimea fisierului este n (poate fi folosit ca sufix c=bytes, b=blocuri de 512 bytes,k=kilobytes, M=megabytes, G=gigabytes).

Page 33: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Se poate folosi +n = mai mare decat n, -n mai mic decat n-inum inode_number = fisierul are nr. inod inode_number-name REGEX = cauta dupa nume folosind regular expression (vezi capitolul referitor laregular expressions)

Exemplu1. Cauta recursiv fisiere cu dimensiunea mai mare de 2M care-l au owner pe root

find / -size +2M -user root -type f 2. Cauta fisiere din /etc care nu-l au owner pe root find /etc -not -user root

Criteriile comenzii find sunt asociate folosind SI logic (optiunea -a care este default) si SAU logic ( -o)

2. grep

grep [options] PATTERN [FILE...] - cauta sabloane de text (string patterns) in FILE sauin outputul unei comenzi-i = ignore case-n = line number din fisierul in care a fost gasit patternul-R = recursive-v = invert match-w = cauta numai cuvinte-H = afiseaza numele fisierului in care a fost gasit pattern-ul

Exemplu1.Cautare cuvantul 'nameserver' in toate fisierele din /etc/ grep 'nameserver' /etc/*2. Cautare cuvantul 'root' in /etc/passwd cu afisarea numarului liniei pe care se gaseste grep -n 'root' /etc/passwd3. Cautarea tuturor proceselor numite httpd care ruleaza ps -ef | grep httpd

Capitolul 4 - Useri

4.1 Concepte generale

Conturile de utilizator permit sistemului de operare sa identifice si sa restrictioneze accesul la resurse. Administrarea conturilor de utilizator reprezinta una dintre principalele

Page 34: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

sarcini ale unui administrator de sistem. In Linux sau in Unix fiecare actiune care are loc (proces care ruleaza) sau fiecare resursa de tip fisier este controlata de un anumit utilizator.

Exista 2 categorii principale de utilizatori:

1. useri de sistem. Fiecare daemon care ruleaza foloseste un user pentru a avea acces la resurse si

pentru a executa taskurile necesare.

DefinitieUn daemon este un proces care ruleaza in background fara interactiunea unui

utilizator. Exemplu: httpd ruleaza sub userul wwwuser si wwwgroup, sendmail ruleaza sub userul mail etc.

ImportantIn Linux si Unix orice proces sau daemon ruleaza cu drepturile utilizatorului care-l

lanseaza in executie. Exemplu: daca root lanseaza un proces, procesul are acces total asupra sistemului. Daca un utilizator normal lanseaza acelasi proces, procesul va avea acces doar asupra fisierelor la care are acces utilizatorul si in acelasi mod. Acest concept este fundamental, iar pe el se bazeaza o mare parte din securitatea generala Linux/Unix.

2. useri persoane. Se autentifica in general prin username si parola. Un asemenea cont de user este

format din: username, parola, home directory, mediul de lucru (environment) - $PATH, umask, shell-ul folosit etc.

Fiecare user este identificat printr-un UID. UID este in general pe 16 sau 32 de biti (intre 0 si 65535 sau 0 si 4294967295). Userul root are UID = 0. Cu toate ca se recomanda ca UID-ul sa fie unic pentru fiecare utilizator acest lucru nu este obligatoriu. Daca mai multi utilizatori au acelasi UID ei vor fi tratati in mod identic de catre sistem. Userii sunt organizati in grupuri pentru a se putea seta permisiuni la nivel de grup. Fiecare user face parte din unul sau mai multe grupuri. Exista deci pentru fiecare user un grup principal (cel definit in /etc/passwd) si optional mai multe grupuri secundare. Fiecare grup este identificat printr-un nr. unic numit GID.

4.2 Fisiere specifice

1. /etc/passwd

Userii sistemului se gasesc in fisierul /etc/passwd. Structura acestuia este formata din campuri separate prin ":" (doua puncte) astfel:user_name:parola:uid:gid_principal:comentariu:home_directory:shell_default

Exemplu

Page 35: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

stud:x:500:500:User principal:/home/stud:/bin/bashuser1:x:501:501:user folosit pentru teste:/home/user1:/bin/bashsshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false

Daca in loc de parola in /etc/passwd este "x" parola se gaseste in fisierul /etc/shadow (hash-ul acesteia sau criptata). Comanda pwck verifica integritatea fisierului /etc/passwd

2. /etc/shadow

Structura fisierului /etc/shadow este urmatoarea:username:password:last_change_min:max:warn:inactive:expire username: userul din /etc/passwd. Reprezinta legatura intre fisierul /etc/passwd si /etc/shadow password: forma criptata a parolei sau hash-ul acesteialast_change: nr. de zile de la 1 Ian 1970 pana in ziua in care a avut loc ultima schimbare a paroleimin: nr minim de zile intre doua schimbari succesivemax: nr maxim de zile intre doua schimbari succesivewarn: nr. de zile dinaintea expirarii parolei in care userul este avertizatinactive: nr de zile de la expirarea parolei si pana cand contul este dezactivatexpire: nr. de zile de la 1 Ian 1970 de cand contul este dezactivat

In fisierul /etc/login.defs se gasesc informatii care vor fi foloste default in momentul in care se creaza un user (lungimea minima a parolei, in cat timp expira contul etc).

3. /etc/group

Grupurile se gasesc in fisierul /etc/group Structura acestuia este formata din campuri separate prin ":" (doua puncte) astfel:group_name:parola:GUID:userii_din_acest_grup

Exempluprogramatori:x:100:dan,vali,georgeroot:x:0:root4.3 Management conturi

Administrarea conturilor de utilizator presupune adaugarea de noi conturi, schimbarea parametrilor unui cont (parola, grupuri, etc), stergerea de conturi etc. Exista 3 modalitati principale de a administra conturile utilizatorilor:

1.Editarea directa a fisierelor care contin informatii despre useri, grupuri si parole folosind editorul preferat cum ar fi VI. Fiesierele care trebuie modificate sunt: /etc/passwd, /etc/shadow si /etc/group. Aceasta metoda trebuie evitata fiindca poate duce la erori si deci la instabilitate.

Page 36: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2.Admistrarea folosind unelte graficeFiecare distributie de Linux are propriile utilitare. In Fedora in KDE si GNOME:

System Settings -> Users and Groups De multe ori, in special pe calculatoare cu rol de server mediul grafic nu este instalat sau nu ruleaza. In plus de cele mai multe ori administrarea se face remote prin ssh deci aceasta metoda nu ne este mereu la indemana.

3.Folosind comenzi de shell in consola.a) Pentru adaugare/modificare/stergere useri: useradd, userdel, usermod useradd OPTIONS USER -> adauga un utilizator -c 'comment'-d home directory-g grupul principal-G grup1, ... grupN-s shell-u uid-m create home dir. Daca se foloseste optiunea -k skeleton_dir, fisierele si directoareledin scheleton_dir vor fi copiate in home, daca nu vor fi copiate cele din /etc/skel-k skeleton dir (doar impreuna cu -m)

Exempluuseradd -c 'dan programator' -d /home/dan -m -g programatori -G users,office –s /bin/bash -u 7878 dan

userdel -r USER -> sterge un user si grupul principal corespunzator (daca nu mai existauseri in acel grup). Optiunea -r se refera la faptul ca va fi sters si home directory.

passwd USER -> modifica parola utilizatorului user

usermod USER -> modifica datele unui user. Command usermod foloseste aceleasioptiuni ca si useradd

Exempluusermod -c 'dan contabilitate' -d /home/dan2 -m -g contabilitate -G users,office -s /bin/bash -u 80 dan

b) Pentru adaugare/stergere/modificare grupuri: groupadd, groupdel, groupmod

Exemplugroupadd programatorigroupdel programatorigroupmod -n profesori programatori - schimba denumirea grupului programatori inprofesori.

Unui grup i se poate seta o parola folosind comanda gpasswd. Exemplu: gpasswd programatori

Page 37: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Aceasta este ceruta in momentul in care un utilizator doreste sa ruleze un shell (sa devinaparte a unui grup pentru a avea permisiunile grupului respectiv) cu un alt GUID folosindcomanda:newgrp NOUL_GROUP.

Modificare owner/grup owner pentru un fisier sau director

Fiecare fisier sau director are un owner si un grup owner. Acestea fac parte din structura inodului unui fisier respectiv director. Default ownerul unui fisier este userul care-l creaza, iar grupul owner al fisierului este grupul principal al userului care creaza fisierul sau directorul.

Exemplu: Daca userul dan creaza un fisier numit a.txt, fisierul il va avea owner pe dan, iar grupul owner al fisierului va fi grupul principal din care face parte dan. Pentru aschimba ownerul si grupul owner al unui fiser/director se foloseste comanda chown si chgrp. root este singurul user care poate modifica ownerul respectiv grupul owner pentrufisiere si directoare.

Exemplu1. Schimba ownerul fisierului a.txt in dan

chown paul a.txt

2. Schimba grupul owner al directorului /home/programe in programatorichgroup programatori /home/programe

3. Se schimba in mod recursiv atat ownerul cat si grupul owner al directorului/home/programe in dan respectiv programatori. Modul recursiv se refera la schimbareaownerului si grupului atat pentru director cat si pentru toate subdirectoarele si fisierelecontinute de acesta. Acest mod de folosire al comenzii chown face ca comanda chgrp safie folosita extrem de rar in practica. chown -R paul.programatori /home/programe

ImportantAtentie! Intre grupul owner al unui fisier si grupul principal sau grupurile secundare

ale ownerului fisierului nu exista legatura. Un fiser poate sa-l aiba ca owner pe userul dan, ca grup owner sa apartina grupului programatori fara ca dan sa faca parte din grupul programatori4.4 su & sudo

Odata logat in sistem un user poate "deveni" un alt user folosind comanda su (substitute user) care ruleaza un nou shell cu UID si GID noului user. Urmatoarele comenzi vor fi executate cu UID si GUID userului nou. su [-] [username] caracterul "-" are ca efect imprumutarea mediului de lucru (environmet) al noului user.

Apar in acest moment 2 noi concepte: RUID (Real User ID) ca fiind UID-ul utilizatorului care s-a logat initial in sistem si EUID (Effective User ID) ca fiind UID-ul utilizatorului devenit in urma rularii comenzii su.

Page 38: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pentru a vizualiza RUID se foloseste comanda who am i, iar pentru a vizualiza EUID se foloseste comanda whoami sau id

Nota Se poate configura ce useri au dreptul sa devina root folosind su. Din pdv al securitatii sistemului este esential sa permitem numai catorva useri sa poata deveni root (chiar daca si altii stiu parola ei nu pot deveni root).

ExempluSe editeaza fisierul /etc/pam.d/su astfel (pentru Fedora): auth sufficient /lib/security//pam_wheel.so trust use_uidauth required /lib/security//pam_wheel.so use_uid

Prima linie specifica faptul ca este suficient ca un user sa faca parte din grupul wheelpentru a deveni root. Acesta devine root fara a i se mai cere parola.

A doua linie specifica faptul ca doar userii care fac parte din grupul wheel vor puteadeveni root. Alti useri chiar daca cunosc parola de root nu pot deveni root prin folosireacomenzii su.Numai una dintre cele 2 linii poate sa apara in fisier. Pentru a comenta o linie sefoloseste caracterul # (diez).

ImportantUn principiu de baza in Linux este ca userul root nu trebuie folosit in mod curent.

Administratorul trebuie sa se logheze folosind un user neprivilegiat iar in momentul in care are nevoie de executia unui task ce necesita drepturi de root, acesta "devine" root folosind comanda su. Altfel sunt introduse grave probleme de securitate care pot duce la rezultate distructive pentru intreg sistemul.

sudo reprezinta o alta modalitate de a executa comenzi cu drepturi de root fara a fi root sau a cunoaste parola de root necesara devenirii root folosind comanda su.Modul de folosire al comenzi sudo este: sudo command. Commanda command este executata cu drepturi de root.

ExempluToate exemplele de mai jos sunt rulate de useri neprivilegiati dar cu drepturi de root1. Instalarea unui program pe Ubuntu folosind apt-getsudo apt-get install k3b 2. Configurarea parametrilor placii de retea precum IP si Network Masksudo ifconfig eth0 192.168.0.1 netmask 255.255.255.0

Nota Modalitatea de a executa comenzi cu drepturi de root folosind sudo este folosita

Page 39: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

intensivpe anumite distributii de Linux si mai putin pe altele. Distributiile bazate in mod intensivpe folosirea comenzii sudo sunt cele derivate din Debian precum Ubuntu, Kubuntu,Knoppix etc. Pe alte distributii precum cele bazate de RedHat sau Slackware, Gentoo etc se obisnuieste rularea de comenzi cu drepturi de root dupa ce in prealabil userul neprivilegiat a devenit root folosind comanda su

4.5 Monitorizare useri

Aceasta sarcina a administratorului de sistem presupune monitorizarea logarilor in sistem sau vizualizarea userilor logati la un moment dat (prezent sau trecut). Se folosesc urmatoarele comenzi: 1) who - afiseaza userii logati in sistem la momentul prezent. Comanda afiseaza informatia sub forma tabelara in urmatorul mod:

username terminalul de unde s-a logat data logarii

Optiuni:-H - afiseaza un header pentru a interpreta mai usor output-ul-q - afiseaza nr. userilor logati

Exemplu# who

stud :0 2007-01-30 09:32

root tty2 2007-01-30 11:35

dan pts/0 2007-01-30 11:33 (:0.0)

dan pts/1 2007-01-30 11:35 (:0.0)

ImportantComanda who afiseaza RUID adica userul logat initial in sistem.

2) w - afiseaza cine este logat in sistem si comanda curenta a fiecarui user. Pe prima linie se afiseaza: data curenta, uptime, nr user logati si "system load" pt. ultimele 1, 5 si 15 minute. Informatii despre userii logati se gasesc in fisierul /var/run/utmp (informatii despre utilizatorii logati in acel moment) si /var/log/wtmp (informatii despre istoria logarii in sistem)

3) last - afiseaza informatii din /var/log/wtmp in ordine cronologica inversa.

Page 40: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Logurile se rotesc periodic. Pentru a vizualiza inregistrariile dintr-un fisier wtmp mai vechi precum /var/log/wtmp.3 se foloseste optiunea -f Exemplu: last -f /var/log/wtmp.3

Optiuni:-n nr = nr. de linii afisatenume_terminal = logarile de la terminalul specificatExemplu: last pts/2

4) lastlog - afiseaza inregistrarile din /var/log/lastlog (ultimile logari in sistem pentrufiecare user)

Optiuni:-u user = lastlog doar pentru userul user

Capitolul 5 - Sistemul de permisiuni

5.1 Concepte generale

Sistemul de fisiere in Linux imparte in mod standard utilizatorii in 3 categorii:a) owner (proprietarul fisierului). By default (implicit) un fisier nou creat primeste ca owner creatorul sau. Owner-ul are drepturi totale asupra fisierului, poate sa-l stearga, sa-l modifice sau sa-i schimbe proprietatile.

Page 41: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu: Daca userul numit dan creaza un fisier nou numit raport.pdf, ownerul fisierului va fi userul danb) group (grupul proprietar al fisierului). Folosind grupul care detine fisierul se pot setadrepturi pentru un nr. mai mare de utilizatori. By default un fisier nou creat primeste cagrup owner, grupul principal al userului care-l creaza.Exemplu: Daca userul dan are ca grupul principal numit contabili, fisierele create deacesta vor avea ca owner pe dan, iar ca grup owner contabili. c) others (ceilalti sau restul lumii). Toti utilizatorii care nu fac parte din cele 2 categorii.

NotaConceptele referitoare la owner si group owner mai sus mentionat sunt adevarate atat pentru fisierele nou create cat si pentru directoarele nou create.

Fiecare dintre cele 3 categorii detine independent urmatoarele drepturi asupra unui fisier sau director: a) r (read) - dreptul de citireb) w (write) - dreptul de scrierec) x (execute) - dreptul de executie

Aceste drepturi au efect diferit in functie tipul fisierului (fisier normal sau director).

Permisiune Fisier Director

readdreptul de citire alcontinutului fisierului

dreptul de a afisa continutul directorului

writedreptul de modificare al continutuluifisierului

dreptul de a modifica continutul directorului(stergere, creare, redenumire fisiere/directoare continute in director) impreuna cu x

execute dreptul de a executa fisierul acces la fisierele continute. dreptul de a ne muta in director.

NotaDaca un director contine dreptul de scriere ( w) pentru o anumita categorie de user ( owner, group sau other), acea categorie are dreptul de a sterge/modifica continutul directorului (doar fisiere NU si directoare) chiar daca pentru acele fisiere nu exista drepturi.

Pentru a sterge/modifica continutul directorului trebuie sa avem atat w cat si x.

Exemplu1. Daca un director are pentru owner permisiunile de read(r) si write(w) dar nu si execute(x), owner-ul nu va putea crea noi fisiere in director, nu va putea sterge continutul directorului si nu se va putea muta in director. Motivul este lipsa permisiunii execute

Page 42: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

pentru director.

5.2 Permisiuni speciale

In afara permisiunilor standard (read, write si execute) exista urmatoarele permisiuni speciale: 1) SUID (setuid).

Reprezinta o permisiune speciala pentru fisierele executabile.Important

In Linux un fisier executabil are aceleasi drepturi ca si userul care il executa. Setand bit ul SUID, la executare fisierul are drepturile owner-ului si nu al celui care il executa. Fisierele cu SUID setat si cu owner root reprezinta o grava problema de securitate. Oricine le poate executa, iar in urma executiei procesul creat va avea drepturi de root.

Exemplu1. Comanda rm este reprezentata fizic prin fisierul executabil /bin/rm care are drept owner pe root. In momentul in care root executa comanda rm efectul este ca aceasta comanda are drepturile lui root si poate sterge orice fisier din sistem. Daca un alt user executa comanda rm, efectul este ca aceasta comanda va avea drepturile userului care a executat-o si deci nu va putea sterge niciun fisier important. In schimb daca se seteaza permisiunea SUID pentru fisierul /bin/rm, orice user non-root care executa comanda rm va putea sterge ORICE fisier din sistem. Acest lucru se intampla fiindca comanda rm are drepturile ownerului adica root si nu drepturile celui care o executa cum este default. 2. User neprivilegiat care poate vizualiza fisierul /etc/shahow fiindca comanda less are SUID setat

Page 43: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Comanda ls -l afiseaza pentru fisierele cu SUID setat "s" (s mic) pe pozitia dreptului de executie pentru owner daca fisierul are dreptul de executie pt. owner sau "S" (s mare) daca fisierul nu are dreptul de executie pentru owner.

2) SGID (setgid). Reprezinta o permisiune speciala care are efecte diferite daca se aplica unui fisier

sau unui director. Cand se aplica unui fisier, daca fisierul este executabil, procesul creat in urma executiei fisierului va rula cu drepturile grupului care detine fisierul si nu cu grupul primar al userului care executa fisierul.

Aceasta permisiune ( SGID) este folosita mai ales pentru directoare si anume pentru a crea directoare "shared". Fisierele noi create in interiorul directorului vor avea ca grup care le detine grupul directorului si nu al userului care le creaza cea ce se intampla default.

Comanda ls -l afiseaza pentru fisiere cu SGID setat "s" (s mic) pe pozitia dreptului de executie pentru grup daca fisierul sau directorul are dreptul de executie pt. grup sau "S" (s mare) daca fisierul sau directorul nu are dreptul de executie pentru grup.

3) Sticky bit. Se foloseste pentru directoarele "world writeable" si are rolul de a preveni

posibilitatea stergerii continutului acestora de catre useri altii decat ownerul directorului cu sticky bit setat sau ownerul fisierului din acel director, chiar daca drepturile directorului ar permite acest lucru (rwx).Exemplu: /tmp NotaRoot face exceptie, iar grupul fisierului se supune regulii (nu poate modifica).

Aplicatie: Sticky Bit se foloseste in momentul in care se doreste crearea unui director world writeable (toate permisiunile pentru toti userii), dar cu protejarea continutului. Fara sticky bit orice user poate creare fisiere in director, dar poate si sterge fisierele create de alti useri. Daca directorul are sticky bit, fiecare user are dreptul sa stearga doar propriile fisiere.

Comanda ls -l afiseaza pentru directoarele cu sticky bit setat "t" (t mic) pe pozitia dreptului de executie pentru other daca fisierul are dreptul de executie pentru other sau "T" (t mare) in rest.

5.4 Modificare permisiuni

Page 44: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pentru a modifica drepturile de acces ale unui fisier se foloseste comanda chmod (change mode) cu urmatoarea sintaxa: chmod [OPTION]... MODE... FILES

Exista doua posibilitati de setarea a drepturilor de acces:

1) Modul simbolic (relativ) Trebuie avute in vedere urmatoarele:a) ale cui drepturi se modifica (u pentru owner, g pentru group, o pentru other, a pentru all)b) ce presupune modificarea (+ (plus) pentru adaugare, - (minus) pentru eliminare, =(egal) pentru setare indiferent de permisiunile deja existente)c) ce permisiuni se modifica (r pentru read, w pentru write, x pentru execute, s pentru setuid/setgid si t pentru sticky bit)Exemplu1. Pentru fisierul /home/stud/orar.doc se modifica drepturile de acces astfel: pentru owner se aduga r,w si x, pentru grup se adauga r si w, iar pentru o se adauga r. Totul este relativ la drepturile avute deja. chmod u+rwx,g+rw,o+r /home/stud/orar.doc

2. Pentru fisierul /home/stud/test_conexiune_internet.sh se modifica drepturile de acces astfel: pentru owner si group se adauga dreptul de executie iar pentru other se elimina toate drepturile.chmod ug+x,o-rwx /home/stud/test_conexiune.sh

3. Se seteaza sticky bit pentru directorul /home/stud/tmpchmod +t /home/stud/tmp Totul este relativ la permisiuniele deja existente.

2. Modul octal (absolut)Se folosesc 4 cifre in baza 8 (intre 0 si 7) in mod pozitional astfel: pentru fiecare

grupa de permisiuni (u, g si o) in functie de existenta sau lipsa unei permisiuni specific se aduna o cifra conform cu puterea lui 2 corespunzatoare acelei pozitii. Lipsa unei permisiuni se marcheza su semnul "-" (minus). Exemplu

r w - r - x r - -

4 2 0 4 0 1 4 0 0

Permisiune fisier = 654

Prima cifra din cele 4 reprezinta biti speciali care se pot seta ( SUID, GUID si Sticky bit). Daca este zero reprezinta lipsa lor. Daca se omite se considera zero ( Exemplu: permisiunea 654 este de fapt 0654).

Page 45: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pentru prima cifra se poate folosi:1 pentru sticky bit2 pentru SGID4 pentru SUIDExempluEchivalenta dintre modul relativ si obsolut: rwx rwx rwx = 0777

Exemplu: chmod 0777 /home/stud/a.txtr-- --- --- = 0400

Exemplu: chmod 0400 /home/stud/b.txtrwS rw- r-x = 4664

Exemplu: chmod 4664 /home/stud/c.txtrw- r-s rwx = 2657

Exemplu: chmod 2657 /home/stud/d.txt

5.5 Umask

Conceptul de umask se foloseste pentru a stabili modul default de permisiuni cu care este creat un director sau fisier. By default fisierele au permisiunile 0666(rw- rw- rw-) iar directoarele 0777(rwx rwx rwx). Pentru a modifica modul default de permisiuni se foloseste umask in urmatorul mod: din valoarea default se scade umask (pozitional), rezultand modul in care vor ficreate fisierele in ceea ce priveste permisiunile.

Exempludaca umask este 0002 noile fisiere create vor avea permisiunile 0664 iar directoarele 0775daca umask este 0022 noile fisiere create vor avea permisiunile 0644 iar directoarele 0755

Exista o singura valoare umask pentru fiecare user. Se vizualizeaza cu comanda: umask.Pentru a modifica umask se foloseste comanda umask NOUA_MASCA ( Exemplu: umask 0222).NOUA_MASCA poate fi reprezentata octal sau simbolic. NotaUmask nu trebuie schimbata decat in situatii deosebite. Modificarea umask poate duce la caderea intregului sistem.

NotaOdata modificat umask noua valoare nu se pastreaza decat pana la urmatorul restart. Pentru ca modificarea umask sa fie permanenta se scrie comanda de modificare a umask intr-un

Page 46: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

fisier de initializarea al environment-ului utilizatorului precum ~/.bashrc.

5.5 Atribute speciale

Sistemele de fisiere extinse precum ext3 folosesc pe langa permisiunile clasice si cateva atribute speciale pentru fisiere si directoare. Pentru setarea acestora se foloseste comanda chattr.

chattr ATRIBUT FISIER

-i = immutable (nu poate fi sters sau modificat)-A = nu actualizeaza atime-R = modifica atributele speciale recursiv pentru directoare-a = just append

Exemplu:chattr +i a.txtchattr -a a.txt

Pentru vizualizare atribute se foloseste comanda lsattr-R = listeaza recursiv continutul directorului-d = listeaza atributele directorului in loc de continutul acestuia-a = listeaza atributele fisierelor ascunseExemplu: lsattr a.txt

Capitolul 6 - Procese

6.1 Concepte generale

Una dintre sarcinile kernelului este si alocarea resurselor (RAM, CPU etc) diferitelor aplicatii.Definitie

Un proces reprezinta unitatea elementara de alocare a resurselor in sistem si ruleaza in propriul sau spatiu de memorie.

In momentul in care se executa o comanda este creat un nou proces. Parintele acelui proces este shell-ul curent. Imaginea procesului reprezinta programul care se executa si care se incarca in memoria RAM.

Exista diferente intre un program si un proces. Acelasi program poate genera mai multe procese diferite.Exemplu: deschiderea simultana a editorului VI sau folosirea de mai multi useri acomenzii ls.

Page 47: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

NotaProcesoarele (exceptie cele dual-core) executa un singur proces la un anumit moment dat. Fiecare primeste un anumit slot de timp in care poate folosi procesorul, apoi ofera posibilitatea altui proces de a folosi CPU. Astfel este creata senzatia de executie simultana.

ImportantFiecare proces care se executa are anumite drepturi asupra sistemului si anume

drepturile userului care l-a executat (user de sistem sau persoana). Un proces pornit de root are drepturile lui root (totale), iar acelasi proces pornit de un user normal are drepturile userului (limitate). Exceptie fac programele care au SUID sau GUID setat. Acestea pleaca cu drepturile ownerului sau grupului owner si nu ale celui care le executa.

Exista comenzi care sunt incluse in shell si care nu se gasesc ca programe independente (fisiere executabile)Exemplu: cd, jobs, alias, umask, ulimit, echo etc Acestea nu creaza un nou proces cand se executa.

6.2 Caracteristici procese

1.Sistemul de operare foloseste functia de sistem fork() pentru a crea noi procese. Prima etapa este crearea unui proces identic cu parintele sau (aceleasi resurse, drepturi, practic se creaza o copie identica a parintelui). Ulterior procesul nou creat "urmeaza propriul sau drum" adica modifica datele primite de la parinte pentru a executa propria sarcina.

2.Fiecare proces are un parinte, cel care l-a creat. Exceptie face procesul init.

3.Procesele sunt identificate dupa un nr. unic pentru intreg sistemul numit PID (Process ID).

4.Parintele fiecarui proces este identificat cu un PPID (Parent Process ID). 5.Procesul init este primul care porneste la butarea sistemului si are PID = 1. Init se mai numeste si parintele tuturor proceselor.6.Un proces dureaza din momentul in care este creat de parintele sau si pana cand programul executat de proces se termina iar rezultatul procesului este intors parintelui. In acest moment parintele comunica Kernelului sa elibereze resursele alocate procesului.

Starile unui proces

Un proces se afla in urmatoarele stari de la nastere (fork()) si pana la terminarea sa.a) created Reprezinta etapa in care procesul este creat si astepta permisiunea schedulerului pentru starea ready. b) ready (waiting sau runnable)Procesul a fost incarcat in memorie si asteapta executia procesorului. Exista mai multe

Page 48: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

procese care se gasesc simultan in aceasta stare. c) blocking (sleeping)Procesul este blocat din cauza unei resurse inaccesibile (fisier, variabila de tip semafor,device). Este sters din lista de asteptare pentru a fi executat de procesor. Daca resursa seelibereaza procesul intra in starea "ready". d) running (active sau executing)Procesul este executat de procesor in acest moment. Daca isi depaseste slice-ul (timpul) alocat pentru executie va trece din nou in starea ready. e) terminated Un proces intra in aceasta stare fie din starea running daca a terminat executia sau dacaeste omorat (killed) printr-un semnal. Daca nu este sters din memorie devine zombie.Daca procesul are copii, acestia sunt preluati de init. f) suspended and waitingReprezinta procesele care au fost indepartate din memoria principala si duse in memoria de tip swap. g) suspended and blockedReprezinta procesele care se gasesc in memoria de tip swap in starea de suspendare.

Atributele unui proces

Un proces detine urmatoarele atribute: a) PID -> Process ID - identificatorul unic al unui procesb) PPID -> Parent Process ID - identificatorul parintelui procesului c) UID -> User ID - Identificatorul userului sub care ruleaza procesul d) GUID -> Group ID - Identificatorul grupului sub care ruleaza procesule) Prioritate6.3 Categorii de procese

In Linux exista urmatoarele categorii de procese:1. Parinte (parent)

Fiecare proces poate genera un alt proces si devine parinte. In afara procesului init fiecare proces are un parinte. 2. Copil (child)

In momentul in care procesul copil se executa, parintele intra in starea de sleeping pana cand copilul termina executia. Daca copilul se executa in background parintele intra/ramane in starea ready. 3. Daemon Reprezinta un proces care ruleaza in background. 4. Orfan (orphan)

Reprezinta procesele ale caror parinti au intrat in starea terminated inaintea lor. Sunt preluate automat de init, parintele tututor proceselor. 5. Zombie (defunct)

Reprezinta procesele care au terminat executia dar nu sunt sterse din tabele de procese. Nu pot fi terminate in modul conventional (folosind comanda kill) ci doar de catre procesul parinte sau init daca procesul parinte termina executia. In general zombie nu fac rau sistemului fiindca nu consuma resurse.

Page 49: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

6.4 Comenzi vizualizare

1. ps (process status) - afisarea tabelara a listei de procese Optiuni:fara optiuni = afiseaza procesele pornite din terminalul curent-e (sau A) = toate procesele tuturor userilor -f = full description-u user = doar procesele userului user.--forest = afiseaza arborescent

Fiindca de cele mai multe ori lista de procese nu incape pe un ecran, comanda ps se foloseste in combinatie cu grep sau less. Exemplups -efps -ef | grep initps -u stud -f | less

2. pstree - afisare arborescenta a proceselor-a = afisarea argumentelor liniei de comanda-c = afisare decompactata a sub arborilor-h = sublinierea procesului curent si a parintilor acestuia-p = afisare PIDExemplu: pstree -ahp

3. pgrep - afiseaza procesele care ruleaza, cautandu-le dupa nume.-l = afiseaza si PID-u username = afiseaza procesele detinute de username (EUID).Exemplu: preg -l -u root,stud sshd

4.top = afisarea in timp real a proceselor cu optiuni diverse de ordonare dupa diferite criteriiOptiuni:-c = afisarea comenzii complete.-p PID = afiseaza doar procesul cu PID-d ss.tt (seconds.tenths)= refresh la fiecare secunda.zecime (sunt permise numere maimici ca 1)-u username = doar procesele care ruleaza sub username.Exemplu: top -d 0.3 = refres la fiecare 3 zecimi de secunda.

In timpul operarii putem apasa urmatoarele taste:

h sau ? = vizualizam un help pentru topq = quitf = selectarea campurilor care vor fi afisate

Page 50: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

o(o mic) = selectarea ordinii de afisareO(O mare) = selectarea campului de sortared = insert delay refreshu = afisarea proceselor doar pentru un user.k = trimite un semnal unui proces.

Semnificatia celor mai importante coloane afisate de top:PID = process idPPID = parent process idUSER = utilizatorul sub care ruleaza procesul PR = prioritatea procesuluiNI = NICE = valoarile negative reprezinta o prioritate mai mare, iar cele pozitive oprioritate mai mica. RES = Resident Size = Cantitatea de memorie non-swap (kb) folosita VIRT = Virtual Image (Swap + Res)SHR = Shared Memory - memoria shared folosita. Acest tip de memorie poate fiimpartita intre mai multe procese.S = Process StatusStatusul unui proces poate fi D = uninterruptible sleep R = running S = sleeping T = stopped Z = zombie%CPU = procentul din timpul CPU folosit de la ultima afisare%MEM = procentul din memorie folositTIMECOMMANDNotaTasks shown as running should be more properly thought of as 'ready to run' -- their task_struct is simply represented on the Linux run-queue. Even without a true SMP machine, you may see numerous tasks in this state depending on top's delay interval and nice value. SMP = Symetric multiprocessing (multiprocessor computing) http://en.wikipedia.org/wiki/Symmetric_multiprocessing

Sortarea dupa un camp afisat de top:b = toggle on/off - afecteaza daca top va arata boldat coloanele dupa care se sorteaza siprocesele running.x = afiseaza boldat coloana de sortarey = afiseaza boldat randurile care reprezinta procesele "running" sau "ready to run"

Pentru a modifica campul de sortare se apasa "O" (o mare) si se alege campul corespunzator. Se poate trece dintr-un camp in altul cu "<" si ">"Shortcuts: M = sort by memoryP = sort by processorR = schimba modul de ordonare (crescator, descrescator).

Page 51: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pentru a salva modificarile facute: W (salveaza in ~/.toprc)

5. nicePentru a modifica prioritatea unui proces se foloseste comanda nice (default +10) Exemplu:nice -n -20 sort nr.txt = prioritate maximanice -n +19 top = prioritate minima

6.5 Comunicatia dintre procese / Semnale

In Linux si Unix procesele comunica prin doua modalitati principale:

1.Pipes (conducte)Procesele pot cumunica prin canale speciale numite pipes. Un proces trimite

informatie pe acest canal care va fi folosita de celalalt proces. Sincronizarea este posibila fiindca in momentul in care un proces doreste sa citeasca dintr-o conducta goala este blocat pana cand exista date disponibile.

Example: sort < numere.txt | head

Comanda sort ordoneaza fisierul numere.txt care reprezinta inputul sau. Outputulcomenzii sort in loc sa fie redirectat catre standard output este conectat la o conducta (care exista doar pe durata executiei comenzilor) care transmite datele ca input comenziihead. Daca conducta "se umple", sort asteapta ca head sa folosesca si sa indeparteze informatia din conducta.

Procesele pot comunica si folosind conducte de tipul named pipes sau domain named sockets.NotaExemplu de procese care folosesc sockets pentru comunicare:Procesul server de e-mail comunica printr-un socket cu procesul antivirus si printr-un alt socket cu procesul care verifica daca un e-mail este spam. Astfel e-mailul este transmis prin socket intre aceste procese, fiecare actionand intr-un anumit mod.

2. Intreruperi software (Semnale)O alta modalitate de comunicare dintre procese este prin semnale sau intreruperi

software. Exista intreruperi software care pot fi ignorate de procese sau care nu pot fi ignorate. Exista multe semnale in Unix (de ordinul sutelor).

Dintre acestea cateva mai importante sunt:

Signal Name Number Description

SIGHUP 1 Hangup (POSIX)

Page 52: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

SIGINT 2 Terminal interrupt (ANSI) - CTRL + C

SIGQUIT 3 Terminal quit (POSIX)

SIGILL 4 Illegal instruction (ANSI)

SIGKILL 9 Kill(can't be caught or ignored) (POSIX)

SIGALRM 14 Alarm clock (POSIX)

SIGTERM 15 Termination (ANSI)

SIGCONT 18 Continue executing, if stopped (POSIX) (bg %jobid)

SIGSTOP 19 Stop executing(can't be caught or ignored) (POSIX)

SIGTTIN 21Background process trying to read, from TTY (POSIX) - (Ctrl + Z)

SIGTTOU 22 Background process trying to write, to TTY (POSIX)

SIGIO 29 I/O now possible (4.2 BSD)

SIGPWR 30 Power failure restart (System V)

Procesele pot ignora, bloca sau "prinde" toate semnalele cu exceptia SIGSTOP siSIGKILL. Daca un process "prinde" un semnal inseamna ca include cod care va actionacorespunzator la primirea semnalului. Daca semnaului nu este "prins" de proces, kernelulva executa actiunea default.

Pentru a trimite un semnal in mod expres unui proces se foloseste comanda kill . Aceasta primeste ca argument PID-ul procesului si tipul de semnal pe care sa-l trimita (default trimite SIGTERM(15))

NotaTrimiterea semnalui SIGKILL (9) lui init nu are niciun efect.

Comanda pkill primeste ca argument numele comenzii care ruleaza in procesul caruia ii va trimite semnalul.Comanda killall se foloseste pentru a trimite semnale tuturor proceselor care ruleaza sub acelasi nume.

Diferenta intre pkill si killall este ca pkill primeste ca argument doar o parte din numele procesului, iar killall primeste ca argument intreg numele. Pentru a specifica semnalul trimis se poate folosi codul numeric al semnalului sau numele acestuia.

Exemplu#ps -ef | grep bash

root 13162 13158 0 11:59 pts/1 00:00:00 -bash

root 13403 13400 0 12:19 pts/2 00:00:00 -bash

Page 53: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

#kill -15 13162sau#kill -SIGTERM 13162sau #pkill bashsau #killall bash

Aplicatii:1) sa se trimita procesului reprezentat de comanda sleep 100 semnalul corespunzator combinatiei Ctrl+Z2) sa se trimita procesului reprezentat de comanda sleep 50 semnalul corespunzator combinatiei Ctrl+C

6.6 Job Control

Job control se refera la posibilitatea de a opri/suspenda executia unui proces si repornirea sa la un moment ulterior. Pentru a rula o comanda in backgroud se foloseste "&" la sfarsitul comenzii. Exemplu: updatedb &

Fiecare job care ruleaza in background primeste un id (incepand cu 1). Comanda jobs afiseaza toate aceste id-uri sub forma [1] 25647. Primul nr. reprezinta Job ID iar cel de-al doilea Process ID.

Daca sunt mai multe joburi in background, semnul "+" identifica job-ul care va fi utilizat ca default in cazul comenzilor bg si fg, iar semnul "-" identifica job-ul care devinedefault daca job-ul curent termina executia.

Exemplufg %job_id - aduce in foreground un job din background.bg %job_id - porneste in background un job suspendat cu Ctrl+Z

La inchiderea terminalului acesta primeste semnalul SIGHUP. Toate procesele pornite din terminal primesc la randul lor semnalul SIGHUP. Comanda nohup este folosita cand se doreste ca un proces sa nu reactioneze la primirea semnalului SIGHUP (hangup). La inchiderea terminalului, parintele (bash) intra in starea terminated si procesul este preluat de init. Exemplu: nohup comanda &

Page 54: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

ExempluSe porneste un proces dintr-un terminal in mod normal (fara nohup) in foreground. Se doreste inchiderea terminalului astfel incat procesul sa isi continue executia#wget -c http://download.fedoraproject.org/.../i386/iso/Fedora-8-i386-DVD.iso

#Ctrl+Z#jobs#bg %jobid#disown -h %jobid

Capitolul 7 - Backup & Administrare software

7.1.1 Strategii de backup

Introducere Pentru orice afacere datele reprezinta una dintre cele mai importante resurse, o resursa strategica fara de care firma respectiva nu poate exista. Toata activitatea unei societati se afla pe hard disk-ul computerelor. O defectiune a acestora, un incendiu sau o inundatie este echivalenta cu pierderea datelor si chiar cu falimentul companiei respective.

Nimeni nu-si poate imagina astazi o banca ce isi pierde toate datele referitoare la clienti, conturi, sume de bani trasferate, sau o companie de telefonie care nu mai gaseste informatiile referitoare la abonati, numerele de telefon inca disponibile, plata facturilor etc. Aceste pierderi fatale pentru o firma nu se intampla in realitate. Va puteti intreba de ce, din moment ce hard diskurile se defecteza mereu, incendiile sau furturile echipamentelor sunt tot mai frecvente? Pentru ca fiecare firma de pe glob care isi desfasoara activitatea fara a se intreba daca a doua zi mai exista, are un sistem de backup al datelor.

Fie ca datele importante sunt copiate manual pe cd/dvd, fie exista un alt computer secundar pe al carui hard disk se afla toate informatiile, fie este implementat un sistem profesionist de back-up pe banda magnetica, o solutie de backup este nelipsita din strategia oricarei companii.Important

Page 55: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Backup-urile trebuiesc depozitate off-site (in alta locatie fizica) in general in seif sau intr un loc sigur astfel incat o compromitere fizica a locului unde se afla datele (incendiu, furt, inundatie) sau nu afecteze si backup-ul.

In principal exista 3 feluri de backup:1. full backup - toate datele sunt salvate 2. backup incremental - doar datele care s-au modificat in raport cu ultimul backup suntsalvate 3. backup diferential - doar datele care s-au modificat in raport cu o perioada de referinta( Exemplu: prima zi a saptamanii) sunt salvate

Medii de stocare1. Hard disk pe un alt calculator, eventual un hard disk extern pe USB sau FireWire de capacitate mare (peste 300 GB) care poate fi depozitat off-site. Avantajele acestei metode sunt multiple; pretul hardisk-urilor tinde sa devina tot mai redus, viteza de copiere si de restaurare este foarte mare, accesul la date este direct. Un dezavantaj este fiabilitatea scazuta. Hard disk-urile sunt sensibile la socuri mecanice, fluctuatii electrice sau magnetice etc. Nu de putine ori auzim ca un anume hard disk s-a ars sau s-a spart.

2. Mediul optic - CD/DVD. Principalul avantaj este costul extrem de redus. Dezavantajele sunt multiple: spatiu foarte redus de stocare (intre 600 MB - 4 GB), imposibilitatea de a fi folosit acelasi cd/dvd un timp intelungat, dificultatea de a automatiza procesul. Aceasta solutie este folosita mai mult de utilizatorii casnici, nu in mediul de afaceri.

3. Benzile magnetice. Acesta solutie este preferata in mediul Enterprise. Fiabilitatea casetelor cu banda magnetica este maxima. O caseta poate fi utilizata in conditii optime pana la 30 de ani fara intrerupere daca sunt respectate recomandarile producatorului (umiditate, temperatura etc). Tape-urile nu au nimic electronic in componenta, doar suport magnetic. Astfel devin imune la socurile mecanice. Informatia de pe o caseta care a fost scapata jos si s-a spart sau a fost udata poate fi recuperata foarte usor (eventual doar o mica parte din informatie a fost deteriorata). Pe o astfel de caseta incap pana la 240 GB. Dezavantaje ar fi timpul lung necesar recuperarii datelor (acces secvential), viteza mica de scriere si citire.

Exista programe de backup profesioniste atat comerciale cat si OpenSource. Un program de referinta este AMANDA (The Advanced Maryland Automatic Network Disk Archiver). Acest sistem solid este folosit cu succes in multe medii de afaceri. Folosind programele clasice de Unix ( tar, dump etc), pentru a realiza un backup incremental pe banda magnetica, recuperarea datelor poate fi facuta doar cu aceste utilitati aflate pe orice sistem Unix/Linux. Ultimele versiuni sunt compatibile cu Samba, astfel incat pot fi incluse in circuitul de backup si share-uri Windows. Alte solutii profesioniste includ Arkeia, Veritas si ARCserve.

Un alt aspect important este recuperarea informatiei aflata in circuitul de backup. Acest proces trebuie sa fie sigur, usor si eficient. Dupa setarea sistemului de backup, trebuie verificat ca in caz de pierdere a fisierelor, bakup-ul chiar functioneaza si datele pot recuperate efectiv. Altfel cel mai complex sistem de backup este nefolositor.

Page 56: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Securitatea datelor nu este de neglijat. De curand o companie aflata in Fortune Top 500 declara ca firma de trasport FedEx a pierdul casetele cu backup in timp ce le transporta intr-o alta locatie. Imaginati-va toate acele informatii in valoare de miliarde de dolari la indemana oricui ! De aceea este recomandat ca datele sa fie criptate. In caz de pierdere/furt nimeni nu le poate accesa.

7.1.2 Comenzi specifice

Comenzi de arhivare si comprimare

1. tar (tape archive) - reprezinta principala comanda de arhivare pe Linux. Tar nu realizeaza comprimare (in mod default) ci doar arhivare.

tar optiuni output_file files/dirs

Comanda tar primeste obligatoriu una dintre optiunile:-c = create - creaza o arhiva -x = extract - extrage fisierele din arhiva -t = table of content (vizualizare continut)-r = adauga la sfarsitul arhivei-u = adauga in arhiva doar fisierele noi

ImportantFolosind optiunea -x se pot suprascrie fisierele care exista pe hard disk cu cele care sedezarhiveaza.

Alte optiuni:-f = file (se specifica fisierul arhiva care se creaza)-v = verbose--atime-preserve = nu schimba atime pentru fisierele adaugate

Exemplua) se creaza arhiva.tar in directorul curent din directorul/home/stud/dir_care_se_arhiveazatar -cvf arhiva.tar /home/stud/dir_care_se_arhiveaza

b) vizualizarea continutului unei arhivetar -tf arhiva.tar

c) adaugare fisier a.txt la arhiva.tartar -rf arhiva.tar a.txt

d) adaugare fisiere noi in arhiva. Acestea sunt adaugate, versiunile mai vechi din arhivanu sunt inlocuite.tar -uf arhiva.tar f*

Page 57: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

e) pastreaza atime pentru fisierele adaugatetar --atime-preserve -cvf arhiva.tar dir1/

f) Extrage doar un fisier din arhivatar -xzvf arhiva.tar a.txt

2. BZIP2, GZIP Programul tar poate fi folosit si pentru a compresa fisiere. Se folosesc optiuni specificecare au drept efect trecerea fisierelor printr-un program de compresie inainte de arhivare.

Optiuni ale comenzii tar pentru comprimare:-j = create bzip2 (fisierul care se arhiveaza sunt trecute prin filtrul de compresie bzip2)

ExempluCreaza in directorul curent arhiva directorului /home/dan/dir1 numita archivefile.tar.bz2 comprimata cu bzip2tar -cvjf archivefile.tar.bz2 /home/dan/dir1 echivalent cu tar -cvf - /home/dan/dir1 | bzip2 > archivefile.tar.bz2Extragere arhiva bz2: tar -xjvf arhiva.tar.bz2echivalent cu bunzip2 arhiva.tar.bz2 - rezulta fisierul arhiva.tartar -xvf arhiva.tar

-z = create gzip arhive

Exemplutar -czvf arhiva.tar.gz dir1/tar -xzvf arhiva.tar.gz

Exista si comenzile zip, unzip, gzip si gunzip dar sunt mai putin folosite datorita faptuluica in general se foloseste comanda tar impreuna cu optiuni de compresie.Exemplu: Backup la directorul /etc in /root : tar -cjvf /root/etc-$(date +%F).tar.bz2 /etc

3. SCP - Secure Copy (Copy over SSH)

Reprezinta posibilitate de a copia fisiere remote de pe calculatoare conectate in LAN sau pe Internet. Copierea are loc criptat. Pentru aceasta avem nevoie de acces prin SSH la calculatorul de pe care dorim sa copiem sau pe care dorim sa copiem. Datele sunt copiate folosindu-se un tunel SSH creat intre sursa si destinatie.

scp optiuni SURSA DESTINATIE

- P = port (poate folosi un alt port - default 22)- p = preserve (atime, mtime si permisiunile)

Page 58: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

- r = recursive copy (pt. directoare)- v = verbose

Exemplua) Se copiaza fisierul arhiva.tar.bz2 de pe calculatorul local pe calculatorul cu IP-ul192.168.0.1 in directorul /home/dan sub numele de arhiva-stud.tar.bz2. Userul dantrebuie sa aiba acces prin ssh la 192.168.0.1scp /home/stud/arhiva.tar.bz2 [email protected]:/home/dan/arhiva-stud.tar.bz2

b) Sursa poate fi host-ul remote identificat prin nume DNS. Conexiunea foloseste portuldestinatie 2323 (daemonul ssh trebuie sa asculte pe acest port). Se copiaza fisierul/etc/passwd in dir. curent.scp -P 2323 [email protected]:/etc/passwd

c)Copiaza recursiv directorul /etc/ sub numele /backup-etc/scp -rpv /etc/ root@backuphost:/backup-etc/

4. rsync Solutie de backup incrementala folosind rsync si Linux

Inainte de a configura o solutie de backup, care este critica pentru orice utilizator privat sau din mediul de afaceri, trebuie sa ne punem cateva intrebari:

La ce vreau sa fac bakup? Pentru cat timp vreau sa pastrez backup-ul? Pe ce mediu vreau sa salvez datele? Ce importanta au datele care sunt salvate?

Cel mai rau lucru care se poate intampla este ca solutia de backup in care ne-am pus toata increderea sa nu functioneze la momentul oportun (dupa ce s-a produs pierderea datelor, sa nu le putem recupera). De acea verificarea functionarii backup-ul este de importanta capitala.

rsync (remote syncronization) este o utilitara inclusa in toate distributiile moderne de Linux. Aceasta realizeaza sincronizarea fisierelor si directoarelor locale cu cele de pe un alt calculator remote sau cu un alt director local.

Sintaxa de baza este:#rsync /sursa /destinatieAcesta comanda copiaza directorul numit /sursa in directorul numit /destinatie (cu creareadirectorul destinatie daca nu exista).

O varianta mai complexa poate fi:# rsync -e ssh -av --delete /usr/local/backup/ [email protected]:/home/backups/

Acesta comanda face un backup incremental (doar diferentele dintre sursa si destinatie) pe un calculator remote.-e ssh: reprezinta modalitatea de transport a datelor folosind protocolul ssh. Se creaza un tunel criptat prin care fisierele si directoarele sunt copiate. Pentru a folosi ssh ca protocol

Page 59: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

de comunicare trebuie sa fie setat ssh sa realizeze autentificare fara parola folosind chei publice si private. Altfel procesul nu poate fi automatizat fiindca trebuie introdusa parola de autentificare. -a: archive mode, echivalent cu -rlptgoD ( r = recursive, l = copiaza si linkurile, p = pastreaza permisiunile fisierelor intre sursa si destinatie, t = pastreaza ctime, atime, mtime, o=pastreaza owner, g=group pt fisier sau director, D = preserve device (numai pt Root))-v: verbose--delete: sterge fisierele sau directoarele de la destinatie care sunt diferite fata de sursa /usr/local/backup reprezinta sursa backup-ului [email protected]:/home/backups -> username daniel pe calculatorul remote backup.host (poate fi dat si ca IP) care are drept de scriere in directorul destinatie, iar /home/backups reprezinta destinatia

Rularea automata a script-ului de back-upPentru a executa un backup incremental automat in fiecare seara, se creeaza un

cronjob. Intr-un script (fisier cu drept de executie pt owner care trebuie sa fie root pentru a evita eventualele probleme legate de drepturile de acces) scriem comanda de mai sus care realizeaza backup incremental apoi ca root executam# crontab -e: deschide fisierul cu cron joburile lui root pentru editare folosind editorul implicit (vi, emacs, etc) 0 0 * * * /calea_catre_scriptul_creat_mai_sus: ruleaza scriptul cu numele calea_catre_scriptul_creat_mai_sus la ora 0:0 in fiecare zi

Alta posibilitate ar fi sa copiem scriptul creat mai sus in /etc/cron.daily (redhat, fedora, slackware etc). Fisierele aflate in /etc/cron.daily se executa automat la ora 22:00 (sau cea configurata in /etc/crontab) a fiecarei zile.

rsync este o unealta cu foarte multe optiuni (vezi man rsync) simpla, dar foarte flexibila.

Exemplu1. Pentru a realiza o sincronizare a doua directoare( /home si /backup/home) de pe acelasi computer: rsync -a --delete /home /backup/home

2. Daca vrem sa sincronizam/copiem un director recursiv, dar vrem sa omitem un anume director sau fisier, putem folosi optiunea -filter rsync -e ssh -aq --delete --filter=': /etc/.rsync-filter' /home/mihai/ 10.0.0.2:/home/mihai/ Aceasta comanda sincronizeaza /home/mihai/ de pe calculator local cu /home/mihai/ de pe calculatorul 10.0.0.2 omitand directoarele /home/mihai/samba, /home/mihai/jeny si /home/mihai/jocuri. Fisierul /etc/.rsync-filter trebuie creat si trebuie sa contina pe cate o linie numele directoarelor sau fisierelor pe care vrem sa le excludem de la sincronizare/copiere (pot sifolosite si regular expressions). In acest exemplu, fisierul .rsync-filter contine:

samba/jeny/jocuri/

Page 60: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

3. Pentru a realiza o arhiva gzip a lui /usr/local/backup si a o copia temporar in /tmp si apoi pe host-ul remote 192.168.3.l ca username jeny cu stergerea ulterioara din /tmp#!/bin/bashDATE=`date +%F`tar -czpf /tmp/backupfile-.gz /usr/local/backuprsync -e ssh -a /tmp/backupfile-$DATE.gz [email protected]:/home/backups

rm /tmp/backupfile-$DATE.gz

4. rsync poate fi folosit si pentru o simpla copiere ( ca si cp) rsync /etc/named.conf /home/omi/named.confComanda este echivalenta cu: cp /etc/named.conf /home/omi/named.conf

rsync poate functiona si client-server. Cu clientul de rsync ne conectam la serverul rsync de pe calculatorul destinatie. Astfel nu mai este nevoie de ssh ca protocol de trasport.

7.2 Cron jobs

Cron daemon Se foloseste pentru a executa o comanda sau program intr-un mod repetat, la un

moment dat in viitor. Programul este executat in background. Crontab este programul care instaleaza, dezinstaleaza si editeaza lista de job-uri pentru fiecare utilizator folosite de cron daemon. Cron daemon cauta fisierele crontab in directorul numit cron spool directory si care este /var/spool/cron/ si unde se gaseste un fisier pentru fiecare user din sistem. Aceste fisiere sunt incarcate in memorie. Fiecare utilizator din sistem are propriile cron job-uri independent de ceilalti useri. Cron daemon verifica la fiecare minut daca mtime al spool directory s-a modificat.

Exista 2 fisiere ( /etc/cron.deny si /etc/cron.allow) care stabilesc userii care au dreptul sa foloseasca crontab. Daca fisierul cron.allow nu exista, dar cron.deny exista si este gol, fiecare user are dreptul sa foloseasca crontab. Daca nici cron.allow nici cron.deny nu exista utilizatorii nu au dreptul sa foloseasca crontab. Daca ambele fisiere exista dar sunt goale, niciun utilizator nu are dreptul sa foloseasca crontab.

Aceste fisiere se editeaza cu username-ul celui la care ne referim (cel care are dreptul sau nu sa foloseasca crontab), cate un username pe fiecare linie. Poate fi folosit cuvantul ALL sau NONE.

Accesul sau restrictia unui utilizator la crontab se refera la dreptul acestuia de a edita fisierul din /var/spool/cron folosind crontab sau direct folosind un editor. Nu se refera la dreptul de a avea si executa cron job-uri. Userul root va putea in continuare sa editeze cron-urile pentru utilizator.

Exista 2 categorii de cron jobs: 1. Joburi pentru fiecare utilizator ( /var/spool/cron)2. Joburi globale

Page 61: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Structura unui fisier crontab este urmatoarea:

Nu se recomanda editarea in mod direct (cu editorul preferat precum VI) a fisierului care este folosit de cron daemon ci folosind crontab. Cron Daemon pastreaza logurile in /var/log/cron. Comentariile sunt permise dar trebuie sa fie unice pe linie. Se foloseste "#".

Exemplu* 12 10-16/2 * * backup.shidentic cu * 12 10,12,14,16 * * backup.sh

Optiune:-e = editare crontab sau creare daca nu exista - foloseste editorul default, cel definit in variabila globala EDITOR sau VISUAL -l = listare cron jobs-r = remove user crontab-i = interactiv la delete

La editarea crontab-ului se pot folosi intervale continue sau discrete folosit caracterul "-"(minus) sau "," (virgula) Exemplu: 1-5 * * 1,2 * script

In afara cronjob-urilor pentru fiecare utilizator care se gasesc in /var/spool/con/, cron daemon foloseste fisierul de configurare numit /etc/crontab. Structura acestuia este urmatoarea: SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly

Page 62: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Dupa declarea variabilelor pe care le va folosi cron, pe fiecare linie se gaseste un job de rulat. Dupa cele 5 coloane care reprezinta timpii folositi de cron se gaseste user-ul care va executa programul si comanda de executat. run-parts este un concept original din Debian care are drept scop executarea tuturor scripturilor dintr-un director. Deci cron daemon va executa la fiecare ora, zi, saptamana si luna scripturile aflate in directoarele /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly si /etc/cron.monthly

Limitari: exista programe care nu pot fi rulate de catre cron ( Exemplu: ssh-agent) acest lucru in special fiindca variabilele de environment nu sunt accesibile lui crond.

ImportantLa specificarea scripturilor care trebuie sa fie rulate in mod repetat este obligatoriu

sa folosim cai absolute fiindca crond nu are acces la variabilele globale ale sistemului si exista astfel posibilitatea sa nu functioneze corect. Aceasta eroare este frecventa si greu de depistat.

7.3 Administrarea pachetelor software

7.3.1 Rpm

RPM reprezinta un acronim recursiv de la RPM Package Manager. Initial s-a numit Red Hat Package Manager si a fost dezvoltat de firma RedHat.

RPM se refera la 2 aspecte:1. Un format de fisier binar care reprezinta un program/aplicatie2. O aplicatie care ruleaza in consola in modul text folosita pentru instalare, dezinstalare,update si interogare a bazei de date cu toate programele RPM instalate.

RPM foloseste o baza de date care se vaseste in /var/lib/rpm. Este formata din fisierul Packages care contine informatii de tip metadata despre rpm-urile instalate precum si alte fisiere folosite cu scop de indexare.

Numele unui packet RPM este de cele mai multe ori conform unui "standard" si contine urmatoarele informatii:a) numele programuluib) versiunea programuluic) package release: identifica distributia pentru care a fost compilat (fc6, mdv, rhel4,suse100 etc)d) arhitectura pentru care a fost compilat (i386, i686, athlon, noarch). noarch se refera lapachete care nu sunt compilate pentru o arhitectura anume ( Exemplu: fonturi, sau alteelemente folosite de alte aplicatii).

Exemplu: apache-1.3.33-6mdk.x86_64.rpm

Page 63: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

lyx-1.4.3-3.fc4.i386.rpm

Un fisier rpm este format din urmatoarele componente:1) Lead (identifica fisierul ca fiind rpm si contine headere absolute)2) Semnatura digitala3) Header (meta information - package name, version, file list, arhitecture)4) arhiva gzip cu binarele programului

Distributiile de Linux care folosesc RPM sunt urmatoarele (lista incompleta): RedHat Enterprise Linux Fedora Core Mandriva CentOS SuSE Yellow Dog (Fedora pentru PowerPC) Turbo Linux

Comanda rpm

rpm OPTIONS package_name

Optiuni:-i = install-q =query-e = erase-F = freshen (upgrade doar daca o versiune mai veche exista deja)-U = upgrade (instaleaza pachet daca pachetul nu exista sau upgrade pachet daca exista.Daca exista versiunea mai veche este stearsa)-v = verbose-f file_name = query package owning file-l = list files in package--force = forteaza instalarea chiar daca nu sunt satisfacute dependintele

Exemplu1. Afiseaza toate fisierele documentatie ale pachetului sambarpm -qd samba 2. Afiseaza numele pachetului din care face parte un fisier din sistem rpm -qf /usr/bin/clamav 3. Afiseaza toate fisierele care fac parte dintr-un pachet rpm -ql tightvnc 4. Reinitializeaza baza de date daca aceasta se corupe rpm --rebuilddb 5. Instalare programe din rpm-uri locale sau direct de pe Internet rpm -ivh httpd-1.3.3.fc4.rpm

Page 64: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

rpm -ivh ftp://rpmfind.net/linux/fedora/core/4/i386/os/Fedora/RPMS/gftp-2.0.18 2.i386.rpm

7.3.2 deb

Un format binar foarte des intalnit si folosit este deb. Acesta isi are originea in Debian si se foloseste acum pe orice distributie Debian Based (Debian, Ubuntu, Kubuntu, Knoppix, Damm Small Linux, Mepis, Linex, Xandros etc).

NotaNumele Debian a fost dat de creatorul acestei distributii Ian Murdock si reprezinta o combinatie intre numele sotiei sale Debra si numele sau Ian.

Un fisier deb este de fapt o arhiva Unix de tip ar care contine 2 alte arhive gzip sau bzip. Intr-una se gasesc informatii metadata (versiune, release, dependinte etc) iar in cealalta binarele efective ale programului care se gasesc in deb.

Programul folosit pentru instalarea, stergerea sau modificarea programelor instalate din deb-uri se numeste dpkg. De multe ori acesta se foloseste cu ajutorul unui alt program numit apt. Synaptic este o interfata grafica pentru apt.

apt-get

apt-get este o aplicatie in linie de comanda folosita pentru managementul pachetelor debsi este considerat user back-end tool pentru apt

Mod folosire:

apt-get [options] [command] [package ...]

Comenzi:

update = se foloseste pentru sincronizarea caracteristicilor pachetelor software instalate in sistem cum ar fi versiunea acestora cu sursele acestora din repositoarele specificate in /etc/apt/sources.list . Se recomanda rularea comenzii apt-get update inainte de rularea lui apt-get folosind optiunea upgrade. Cu ajutorul acestei comenzi apt-get ia la cunostinta despre ultimele versiuni existente in repozitoare.

upgrade = se foloseste pentru instalarea automata a ultimei versiuni a tuturor pachetelor instalate in sistem din repositoarele specificate in /etc/apt/sources.list. Pachetele sunt automat downloadate din repositoare si upgradate la ultima versiune. NU se instaleaza pachete noi si nu se dezinstaleaza pachete deja instalate.

dist-upgrade = pe langa procesul de upgrade, optiunea dist-upgrade are grija in mod inteligent si de dependintele pachetelor care se upgradeaza.

Page 65: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

install nume-pachet1 nume-pachet2 etc = se foloseste pentru instalarea de noi programe din repozitoare impreuna cu dependintele necesare.

remove nume-pachet1 nume-pachet2 etc = se foloseste pentru dezinstalarea respectivelor pachete

check = reprezinta un tool de diagnostic folosit pentru update-ul cache-ului pachetelor precum si verificare dependintelor cu probleme

clean = sterge pachetele downloadate din repositor (cache-ul pachetelor) si care au fost sau nu deja instalate.

Optiuni:-m = ignora pachetele lipsa -d = doar downloadeza pachetele, dar nu le si instaleaza-f = repara "broken dependencies"Exemplu: apt-get -f install bind9-y = se asuma raspunsul yes la orice intrebare. Folositor pentru upgrade automat.-h = printeaza help-ul comenzii-V = printeaza versiunile pachetelor care se instaleazaExemplu: apt-get -V install bind9

7.3.3 Aplicatii pentru managementul programelor

Deoarece comanda rpm este in general greoaie si nu rezolva automat dependintele aparute, exista multe alte aplicatii care au drept scop managementul RPM-urilor. Aceste programe evoluate downloadeaza programul dorit de pe Internet din repositoare speciale impreuna cu toate dependintele sale. Folosind astfel de aplicatii managementul programelor pe Linux este mult mai eficient si usor de realizat decat pe Windows.

ImportantUna dintre cele mai frecvente probleme in Linux legate de instalarea de noi

programe este satisfacerea diferitelor dependinte. O dependinta este un alt program sau o librarie de care depinde programul care se doreste a fi instalat.

Exemplu: Se doreste instalarea Snort (cel mai folosit si cunoscut Intrusion Detection System pentru Linux). Functionarea Snort depinde de alte librarii si programe precum: pcre, libpcap, mysql-headers - daca se doreste salvarea alertelor intr-o baza de date MySql etc. Aceste librarii si programe se numesc dependinte ale lui Snort si nu se gasesc in arhiva cu sursele snortului pe care o downloadam sau in rpm-ul acestuia. Pentru instalarea snortului trebuie mai inainte sa instalam toate dependintele sale.

Dintre cele mai importante, cunoscute si folosite programe pentru managementul programelor din sistem putem enumera:

Page 66: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1. yum 2. YaST (SuSE)3. up2date (RHEL)4. apt/synaptic (initial folosit pentru Debian, merge si pe RedHat sau Fedora)5. Smart Package Manager (Suse, Fedora etc)6. urpmi (Mandriva)

YUM (Yellow Dog Updater Modified) Yum reprezinta rescrierea completa a programului initial YUP (Yellor Dog

Updater) si se foloseste pentru managementul sistemelor bazate pe RPM. Yum este o aplicatie in linie de comanda, dar exista si programe front-end grafice pentru aceasta (pup, pirut, yumex, yum extender)

Fisierul de configurare al lui YUM este /etc/yum.conf[main]cachedir=/var/cache/yumdebuglevel=2logfile=/var/log/yum.logpkgpolicy=newestdistroverpkg=redhat-releasetolerant=1exactarch=1retries=20obsoletes=1gpgcheck=1

# PUT YOUR REPOS HERE OR IN separate files named file.repo# in /etc/yum.repos.d

YUM foloseste repositoare pentru download-ul si instalarea de programe.

DefinitieUn repositor este un director de pe un server HTTP sau FTP la care yum are acces.

Acel repository contine pachetele software precum si fisiere index.

Yum cauta, downloadeaza si instaleaza automat pachetele dorite (impreuna cu toate dependintele) de pe repozitoarele pentru care a fost configurat. Fiecare repozitor poate fi scris in /etc/yum.conf sau in propriul fisier in directorul /etc/yum.repos.d/. Adaugarea de noi repositoare inseamna instalarea acelui repositor.

Repozitoarele care vin default cu Fedora sau cu o alta distributie nu sunt suficiente daca dorim o gama larga de programe. Pentru acestea trebuie sa instalam asa numitele "third party repositories" precum:

The DAG repository ATrpms repository RPMforge repository

Page 67: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

FreshRPMS repository Dries repository

Folosire YUM

1) Pentru a cauta, downloada si instala un packet impreuna cu toate dependintele saleyum install 'nume_packet'

2) Pentru a updata un pachetyum update nume_pachet

3) Pentru a verifica daca exista update-uri disponibileyum ckeck-update

4) Sterge pachetul specificat impreuna cu alte pachete care depind de pachetul specificatyum [ erase | remove ] nume_pachet

5) Afiseaza informatii despre un pachet yum info nume_pachet

6) Cauta pachete dupa descriere sau nume. Util atunci cand nu stim numele exact alPachetuluiyum search cuvantExemplu: yum search sniffer

Optiuni:-y = assume yes at any question-c config_file = folosirea unui fisier de configurare alternativ in loc de /etc/yum.conf-d nr = debug level (intre 0 - minim si 10 - maxim).-R = nr. maxim de minute pe care le asteapta yum pentru a executa o comanda--exclude nume_pachet = exclude un pachet

ImportantEste important ca programele esentiale precum Kernelul, diferite servere de baza

etc sa fie excluse de la instalarea automata. Fiindca intreg sistemul se bazeaza pe functionalitatea si stabilitatea acestora este bine sa se faca o verificare manuala (ce versiune se instaleaza, ce aduce nou noua versiune, daca este necesara, daca s-au raportat bug-uri etc) a acestora inainte de instalare.

Fragment din man page-ul lui yum referitor la cautare si listare:

LIST OPTIONSThe following are the ways which you can invoke yum in list mode.

yum list [all | regexp1] [regexp2] [...]List all available and installed packages.

Page 68: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

yum list available [regexp1] [...]List all packages in the yum repositories available to be installed.

yum list updates [regexp1] [...]List all packages with updates available in the yum reposito- ries.

yum list installed [regexp1] [...]List the packages specified by args. If an argument does not match the name of anavailable package, it is assumed to be a shell-style glob and any matches are printed.

yum list extras [regexp1] [...]List the packages installed on the system that are not available in any yum repository listed in the config file.

yum list obsoletes [regexp1] [...]List the packages installed on the system that are obsoleted by packages in any yumrepository listed in the config file

Specifying package namesAll the list options mentioned above take file-glob-syntax wild- cards or package namesas arguments, for example yum list avail- able foo* will list all available packages thatmatch foo*.

CLEAN OPTIONSThe following are the ways which you can invoke yum in clean mode.

yum clean packagesEliminate any cached packages from the system. Note that pack- ages are notautomatically deleted after they are downloaded.

yum clean headersEliminate all of the files which yum uses to determine the remote availability of packages. Using this option will force yum to download all the headers the next time it is run.

yum clean allRuns yum clean packages and yum clean headers as above.

Page 69: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Capitolul 8 - TCP/IP & Networking

8.1 TCP/IP

Orice calculator comunica in retea folosind stiva de protocoale TCP/IP. TCP/IP este "de facto" industry standard.

Page 70: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

TCP/IP este o colectie de protocoale cele mai cunoscute si importante fiind TCP (Transmission Control Protocol) si IP (Internet Protocol) de unde si numele TCP/IP. Pe langa aceste protocoale exista multe altele fiecare gasindu-se la un anumit layer si avand o anumita functionalitate. Stiva TCP/IP se instaleaza automat la instalarea sistemului de operare (Windows sau Linux).

Acesta stiva de protocoale a fost creata de DoD (Department of Defense, USA) la inceputul anilor '70, avand drept scop crearea unei retele care sa supravietuiasca in orice conditii, chiar in cazul unui atac nuclear. Este impartit in 4 layere: 1. Application Layer La acest layer se gasesc protocoale precum: DNS, HTTP, FTP, TFTP, SMTP, IMAP, POP3, SSL, SNMP etc. La acest layer se gasesc serviciile oferite de retea cele mai apropiate de utilizatorul final. Programele existente sunt client sau server care implementeaza protocoalele enumerate mai sus.

2. Transport Layer La acest layer se gasesc protocoalele TCP si UDP. TCP (Transmission Control Protocol) este un protocol complex care garanteaza ajungerea datelor la destinatie. Inainte de a se initializa transferul datelor are loc un schimb de mesaje intre sursa si destinatie pentru se se sincroniza. Acest fapt il face sa fie "Connection-oriented"

UDP (User Datagram Protocol) este mai simplu decat TCP, nu garanteaza sosirea datelor la destinatie si este "Connection-less"

Layerul Transport este responsabil cu prima impachetare a datelor. Informatia, pe care o primeste de la nivelul aplicatie este impartita in segmente si ii sunt adaugate headere (informatie specifica nivelul transport). La acest nivel are loc segmentarea datelor. Printre altele, headerul contine 2 numere, numite PORTURI. Un port ocupa 16 biti si este intre 0 si 65535.

Cele 2 numere (porturi) se numesc: a) port sursa (identifica programul care a generat mesajul) - adresa aplicatiei sursab) port destinatie (identifica carui program ii este destinat mesajul pe hostul destinatie) adresa aplicatiei destinatie. Acesta este de obicei un server

Exemplu: daca unul dintre cele 2 porturi este 21, programul este FTP, daca este 25 este vorba despre un e-mail, daca portul este 80 programul de la nivelul aplicatie este serverulweb.

IANA este responsabila cu alocarea si inregistrarea porturilor.

IANA a definit 3 categorii de porturi:1. Well Known ports (intre 0 si 1023)

Page 71: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu: 80 pt http, 110 pentru POP3, 993 pentru IMAPs (IMAP over SSL)2. Registered Ports (intre 1024 si 49151)Exemplu: 3036 pentru MySql, 3756 pentru canon 3. Dynamic / Private Ports (intre 49152 si 65535)

Un port se poate afla in urmatoarele 3 stari:1) Deschis (open). Ne putem conecta (folosind 3-way handshake) la un port deschis, exista o aplicatie (server) care accepta conexiuni folosind acel port. Se spune ca aplicatia destinatie (serverul) "asculta" pe acel port.Exemplu: un server web care ruleaza si care este configurat sa asculte pe portul 80. 2) Inchis (close). Nu exista nicio aplicatie care sa primeasca conexiuni pe acel port. 3) Filtrat (stealth). Portul este deschis, dar un firewall sau o lista de acces blocheaza conexiunile catre acel port. Scopurile nivelului transport:a) segmenteaza informatia conform cu lungimea maxima admisa pe canalul de comunicatie (segmentation)b) numeroteaza aceste segmente pentru a-le pune cap-la-cap la destinatie si a forma mesajul initialc) trimite confirmari (acknowledgment) celeilalte parti cum ca a primit pachetele. Se foloseste "positive acknowledgment" - confirmarea se refera la urmatorul segment pe care asteapta sa-l primeasca. Exemplu: daca trimite ca acknowledgment nr. 7, inseamna ca asteapta segmentul cu nr. 7,iar sursa stie ca destinatia le-a primit cu succes pe primele 6d) identifica segmentele primite gresit (cu erori) si notifica destinatia sa le retransmita (error recovery)e) regleaza fluxul datelor (viteza de transmisie) (flow control)

3. Internet LayerLa acest layer se gasesc protocoale precum IP (protocol rutabil sau rutat), ICMP

(protocol de detectare a erorilor si de testare a legaturii), protocoale de rutare (routing protocols) precum RIP, OSPF, EIGRP, IGRP, BGP, IS-IS

Scopul unui protocol rutabil este de a transporta informatia catre destinatie prin incapsulare pe calea pe care protocoalele de rutare o gasesc.

Primeste segmenul de la nivelul transport si ii adauga headerele specifice. Segmentul primit de la Layer Transport se numeste la Layer Internet pachet. La acest nivel are loc impachetarea datelor.

Scopurile nivelului Internet:a) rutarea pachetelor folosind cea mai buna cale (drum) pe care pachetele o pot urma catre destinatie (routing)b) gasirea celei mai bune cai catre destinatie dintre mai multe cai posibile (best effort delivery)c) avertizarea celor implicati in comunicatie print-o serie de mesaje specifice, testarealiniei de comunicatie etc (protocolul ICMP).d) impachetarea datelor ( segmentelor primite de la layer4 li se adauga un Header si devin

Page 72: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

pachete)

Se folosesc 2 adrese, numite si logice (adrese IP):a) adresa sursa (identifica calculatorul sursa)b) adresa destinatie (calculatorul destinatie)

O adresa IP are 32 de biti si se reprezinta prin 4 numere intre 0 si 255 separate prin .(punct) Exemplu: 10.0.0.1 sau 192.89.43.251

4. Network Access LayerLa acest Layer se gasesc protocoale care definesc tipul de retea: Ethernet, WLAN,

PPP, ADSL, CaTV, FrameRelay, ISDN etc Acest layer primeste pachetul de la Layer Internet si ii face o noua impachetare (a

3-a) astfel: adauga in fata pachetului un header si la finalul lui un trailer. Pachetul se va numi la acest layer Frame.

In Frame se vor gasi alte 2 adrese care identifica placa de retea a fiecarui calculator implicat in comunicatie (adrese fizice sau MAC).

O adresa MAC are lungimea de 48 de biti reprezentati prin 12 cifre hexazecimale.Exemplu: 00:01:AC:17:AB:C9

Scopurile nivelului Network Access:a) stabileste topologia retelei (bus, star, extended star, mesh)b) adresarea fizica a fiecarui calculator folosind adrese MACc) identificarea erorilor (nu si corectia sau recuperarea lor)

NotaAdresele de tip MAC exista doar in cadrul retelei locale de tip Ethernet. Acestea nu se transmit pe Internet. Daca se folosesc alte tehnologii la Network Access Layer precum ISDN, PPP, Catv etc adresele MAC nu se folosesc pe linkul respectiv.

ImportantProtocoalele de layerele aplicatie, transport si internet sunt independente de

protocoalele de la Network Access. Protocolul DNS, IP sau TCP functioneaza indentic, fara nicio modificare indiferent daca la layer "Network Access" avem Ethernet, WLAN, ADSL sau ISDN. De fapt protocoalele superioare nu au cunostinta despre protocoalele de la Network Access Layer.

ImportantProcesul prin care datele (email-ul, pagina web etc) sunt transformate in segmente

la Layer4 apoi in pachete la Layer3 apoi in frame-uri la Layer2 si in biti la Layer1 se numeste incapsulare si are loc la sursa care a generat mesajul. Procesul invers se numeste decapsulare si are loc la destinatie. Incapsulare: data->segment->packet->frame->biti Decapsulare: biti->frame->packet >segment->data

Pentru o buna intelegere a modului in care retelele comunica este necesara o cunoastere aprofundata a protocoalelor care fac parte din stiva TCP/IP.

Page 73: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pentru vizualizarea tuturor pachetelor care parasesc interfata (placa de retea) calculatorului sau a celor care sunt primite de interfata calculatorului se folosesc programe numite sniffere.

Cele mai cunoscute si folosite sunt: Wireshark si tcpdump. Acestea sunt cele mai utile programe pentru troubleshooting in retea.

Wireshark functioneaza atat pe Linux cat si pe Windows iar modul in care pachetele sunt afisate este grafic. Tcpdump ruleaza doar pe Linux in linie de comanda.

8.2 Clasificarea adreselor IP

O adresa IP se mai numeste si adresa logica si apartine L3 OSI.Se foloseste pentru a identifica logic hosturile conectate la retea. Rutarea pachetelor

(trimiterea acestora de la sursa la destinarie pe calea cea mai buna) se bazeaza in primul rand pe IP-uri. Fiecare calculator conectat la retea trebuie sa aiba o adresa IP unica pentru acea retea pentru a putea fi identificat.

In comparatie cu adresa MAC care apartine L2 OSI si care nu se poate modifica(teoretic), adresele IP sunt setate de catre user. Fiecare placa de retea poate avea una sau mai multe IP-uri.

O adresa IP este format din 4 bytes (32 de biti in total). Ecesta poate fi scris in baza zece, trasformand fiecare byte din baza 2 in baza 10 si separandu-i prin punct.

O adresa IP este format din 2 parti:

1) Network Address (adresa retelei sau adresa firului) 2) Host Address (adresa hostului din retea). Deci biti componenti ai unei adrese IP se impart in biti de retea si biti de host.

Toate hosturile din aceiasi retea trebuie sa aiba aceiasi Network Address.

Network Mask

Strans legat de IP este notiunea de masca de retea (Network Mask). Scopul acesteia este de a stabili care biti din IP sunt biti de retea si care sunt de host. Adresa IP nu exista fara masca, intotdeauna se configureaza doar impreuna.

Page 74: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu1. 255.0.0.0 sau /8 Daca transformam aceasta masca in baza 2 observam ca primii 8 biti sunt 1. Rezulta ca primii 8 biti din adresa IP sunt biti de network, iar ultimii 24 de host. 2. 255.255.255.0 sau /24Daca transformam aceasta masca in baza 2 observam ca primii 24 biti sunt 1. Rezulta ca primii 24 biti din IP sunt biti de network, iar ultimii 8 de host.

ImportantUn Router realizeaza o operatie de AND LOGIC (si logic) intre IP si masca pentru a afla Network Address.

Varianta simplificata pentru a separa network address de host address este:1) se transforma IP-ul si masca in baza 22) se aseaza IP si masca una sub celalalta, bit sub bit3) biti din IP care sunt in dreptul bitilor de "1" (unu) din masca se numesc biti de retea si formeaza Network Address. Biti din IP care sunt in dreptul bitilor de zero ("0") se numesc biti de host.

Masca se mai poate scrie si sub forma slash ("/") urmat de nr. bitilor de 1. Network Prefix este sinonim cu Network Address

Exemplu255.0.0.0 sau /8255.255.0.0 sau /16255.255.255.0 sau /24255.255.128.0 sau /17

Clasificarea adreselor IP

1. In functie de primii biti din primul octet exista 5 clase de IP-uri.

bitii primului octet interval primul octet Masca default

clasa A 0xxxxxxx 0-127 255.0.0.0 sau /8

clasa B 10xxxxxx 128-191 255.255.0.0 sau /16

clasa C 110xxxxxx 192-223 255.255.255.0 sau /24

clasa D 1110xxxx 224-239 Nu exista

clasa E 1111xxxx 240-255 Nu exista

Exemplu10.0.0.1 - IP de clasa A 2.12.255.8 - IP de clasa A189.189.189.189 - IP de clasa B

Page 75: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

213.12.0.1 - IP de clasa C135.9.9.1 - IP de clasa B224.0.0.10 - IP de clasa D (clasa de multicast)249.90.90.1 - IP de clasa E (clasa rezervata)

Nota1. 127.0.0.1 este rezervata si folosita ca adresa de loopback. Se foloseste de hosturi entru redirecta traficul pentru ele insele. Cel mai folosit caz concret este atunci cand atat clientul cat si serverul se afla pe acelasi host. Exemplu: instalam un server Apache si ne conectam la acesta de pe acelasi calculator folosind un Browser 2. Clasa D este o clasa speciala folosita pentru multicast. Nu se configureaza interfetesau placi de retea cu aceasta adresa. 3. Clasa E este rezervata pentru studii sau cercetari. Nu este foloseste in realitate.

Adrese IP speciale

1. Clasa E (adrese experimentale - rfc 3330) - 240.0.0.0 - 255.255.255.254 2. Clasa D (Multicast) - 224.0.0.0 - 239.255.255.2553. Link-local address: 169.254.0.0 - 169.254.255.255 si se foloseste de hosturi pentru setarea automata a unui IP cand nicio alta metoda nu este disponibila (DHCP, BootP, PPP, static etc). Se pot folosi doar in reteau locala, iar TTL este 1. 4. TEST-NET Address: 192.0.2.0 - 192.0.2.255 - teaching and learning purpose. Pot fi folosite in documentatii si exemple. Device-urile le accepta in configuratie. Se gasesc in multe ori in RFC pt. IP ale domeniilor example.com, example.net sau indocumentatii ale producatorilor5. Loopback: 127.0.0.1

2. In functie de destinatia pachetelor, adresele IP pot fi:

a) Unicast Identifica un sigur host intr-o retea.b) Multicast Identifica un grup de hosturi dintr-o retea. Un calculator sursa poate comunica simultan cu un grup de calculatoare folosind adresa IP destinatie de tip multicast.c) Broadcast Indentifica toate hosturile dintr-o retea.

Exista 2 categorii de Broadcast Address: a. Directed Broadcast Address Se calculeaza punand toti bitii din portiunea de host address pe "1"

Exemplu1. Pentru IP-ul 192.168.0.1/24. Masca este /24 sau 255.255.255.0 adica din cei 32 de biti ai mastii primii 24 sunt 1 iar restul 0. Rezulta ca Network Address este reprezentata de primii 24 de biti din IP (atitia cati biti de 1 sunt in componenta mastii). Restul bitilor se pun pe valoarea 0. Network Address = 192.168.0.0Daca primii 24 biti din IP identifica Network Address, restul bitilor pana la 32 (8 biti)

Page 76: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

identifica bitii de host. Pentru a afla broadcast address se scrie adresa de retea (192.168.0.0) si se pun toti bitii din Host Address pe 1. Rezulta Broadcast Address= 192.168.0.255 2. Pentru IP-ul 10.0.0.0/8 broadcast address este 10.255.255.255.0 3. Pentru IP-ul 190.190.0.17/26 broadcast address este 190.190.255.255. 4. Pentru IP-ul 210.210.210.67/27 broadcast address este 210.210.210.95

b. Limited Broadcast Address. Este invariabil 255.255.255.255

3. In functie de modul de procurare si utilizare exista IP-uria) Publice- se cumpara sau se inchiriaza de la un LIR (Local Internet Registry) sau de la un ISPLocal.- sunt publice, oricine poate afla informatiile despre proprietarul unui IP (adresa, nume,email de contact etc).- indentifica in mod unic un host pe Internet. Fiecare calculator conectat DIRECT laInternet trebuie sa aiba o adresa publica.

b) Private- nu se cumpara, nu se inchiriaza, nu se platesc- sunt folosite doar in cadrul unui LAN- pachetele de date nu au voie sa contina pe Internet IP sursa sau destinatie de tip privat (vor fi blocate la primul Router)- un Router trebuie sa fie configurat pentru NAT (Network Address Translation) astfel incat un LAN care foloseste IP-uri private sa poate comunica pe Internet - IETF (Internet Engineering Task Force) a definit clasele de IP-uri private in RFC1918.

Acestea sunt:

a) de clasa A -> 10.0.0.0 - 10.255.255.255 b) de clasa B -> 172.16.0.0 - 172.31.255.255 c) de clasa C -> 192.168.0.0 - 192.168.255.255

4. In functie de modul de alocare IP-urile pot fi:

a) Statice sunt configurate pentru fiecare interfata de catre administrator sau userb) Dinamice sunt configurate prin intermediul unor programe speciale fara interventia user-ului. Exemplu: DHCP, BootP sau PPP pentru DialUp Important

Cunoasterea in profunzime a protocoalelor din stiva TCP/IP precum si modul acestora de functionare reprezinta un aspect extrem de importat pentru o cariera perfomanta in domeniul Networking.

Page 77: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

8.3 Configurare retea

Configurarea statica a interfetelor de retea

Pentru a comunica intr-o retea TCP/IP un host trebuie sa fie configurat cu:1) IP (obligatoriu)2) Network Mask (obligatoriu) - se configureaza impreuna cu IP

Exista 2 posibilitati de a configura IP-ul si masca:a) Editand fisierul in care se salveaza configuratia placii de retea.

Acesta poate sa difere de la distributie la distributie. In RedHat, Fedora core si SUSE acesta este /etc/sysconfig/network-scripts/ifcfg-ethNr, unde Nr reprezinta numele interfetei de retea Ethernet.

Exemplu: fisierul ifcfg-eth0 sau ifcfg-eth1. In acest caz modificarea configuratiei se salveaza la reboot.

#confinutul fisierului ifcfg-eth0 pentru interfata eth0 DEVICE=eth0BOOTPROTO=staticBROADCAST=192.168.0.255HWADDR=00:06:4F:00:6E:F4IPADDR=192.168.0.13NETMASK=255.255.255.0NETWORK=192.168.0.0ONBOOT=yesTYPE=Ethernet

In Ubuntu exista un singur fisier pentru toate interfetele si anume /etc/network/interfacesauto loiface lo inet loopbackiface eth1 inet staticaddress 192.168.0.100netmask 255.255.255.0gateway 192.168.0.1auto eth1 b) Folosind comanda ifconfig. Modificarea configuratiei nu se salveaza la reboot, iar sintaxa acesteia este identica pe orice distributie de Linux.Exemplu1. Afiseaza configuratia interfetelor active ifconfig 2. Afiseaza configuratia tuturor interfetelor instalate si recunoscute de sistem ifconfig -a 3. pornesete/opreste o interfata (enable/disable)ifconfig eth0 down | up 4. Configureaza IP si Masca pentru o interfata

Page 78: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 5. Schimba adresa MAC interfataifconfig eth0 hw ether 31:32:33:34:35:366. Modificare MTUifconfig eth0 mtu 14127. Crearea subinterfata si setare IP si Mascaifconfig eth0:0 10.0.0.0 netmask 255.0.0.0 broadcast 10.255.255.255

3) Default Gateway (optional) Se poate configura de asemenea in 2 moduri:a) Editand fisierul in care se gaseste. Pe RedHat Family acesta este /etc/sysconfig/network echo "GATEWAY=192.168.0.1" >> /etc/sysconfig/network

In Ubuntu se gaseste in acelasi fisier cu IP-ul si Masca ( /etc/network/interfaces)

b) Folosind comanda routeroute add default gw 192.168.0.1 Comanda route fara optini listeaza tabela de rutare a hostului.

4) Servere DNS (optional)Se configureaza in /etc/resolv.conf pentru ORICE distributie de LinuxContinut /etc/resolv.conf:nameserver 193.231.236.3nameserver 193.231.236.25

Pentru a crea o mapare statica IP/NUME se editeaza fisierul /etc/hosts Continut /etc/hosts192.168.0.1 gateway192.168.0.18 server82.34.1.9 home

Fisiereul /etc/host.conf determina ordinea de translatare a domeniului in IP (default: /etc/hosts si apoi query catre serverele DNS). Dupa fiecare modificare a parametrilor interfetelor de retea, serviciul retea trebuie restartat: /etc/init.d/networking restart.

Page 79: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

8.4 Managementul serviciilor si Procesul de Butare

Linux Boot Process

Page 80: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

O sarcina importanta a oricarui administrator de sistem este de a stabili ce servicii pornesc automat la butare, ce servicii trebuie oprite etc.

Etapele butarii unei calculator care ruleaza Linux sunt urmatoarele:

Page 81: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1) BIOS executa POST (Power on Self Test) si conform cu configuratia sa (de unde este configurat sa buteze: Hard Disk, CD-ROM, DVD-ROM etc) citeste MBR-ul care reprezinta primul sector al hard diskului (primii 512 bytes). 2) In MBR (Master Boot Record - primul sector al Hard diskului) se gaseste un boot loader (GRUB sau LILO) care incarca in memorie de pe disk, kernelul si initrd inainte sa monteze root file system. Functionalitatea interna a lui GRUB permite sa citeasca de pe disk kernelul si initrd si sa le incarce in memorie intainte sa monteze partitia pe care acestea se gasesc. Kernelul se decomprima si foloseste modulele din initrd (monteaza initrd) pentru a buta de pe disk. Daca nu exista initrd funtionalitatea pt. a buta de pe disk trebuie sa fie compilata in kernel.

Notainitrd reprezinta un RAMDISK Fizic acesta este un fisier. Exemplu: /boot/initrd.img-2.6.22-14-server initrd contine module necesare kernelului in prima faza a procesului de butare inainte sa monteze root file system. Exemplu: initrd ar putea contine un modul care reprezinta driver pentru SATA si care nu a fost compilat in kernel. Kernelul are nevoie de acest driver pentru a putea monta hard diskul.

3) Primul program pe care kernelul il executa de pe disk este init (parintele tuturor proceselor). Fisierul de configurare al lui init este /etc/inittab. Acesta controleaza modul in care init initializeaza sistemul.

ImportantFisierul /etc/inittab stabileste runlevelul in care sistemul buteaza:

# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# 1 - Single user mode# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)# 3 - Full multiuser mode# 4 – unused# 5 - X11# 6 - reboot (Do NOT set initdefault to this)# id: 5:initdefault:

4) Ubuntu/Debian: /etc/rc.d/rcS se executa precum si toate scripturile din directorul /etc/rcS.d/ Fedora/RedHat/SuSe: /etc/rc.sysinit se executa5) In functie de runlevelul in care intra sistemul se executa /etc/rc*.d/** (asterix) reprezinta runlevelul in care intra sistemul. Poate fi 0,1,2,3,4,5 sau 6.Exemplu: Daca se intra in runlevel 3 se executa scripturile din /etc/rc3.d/

Page 82: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Daca se intra in runlevelul 5 se executa scripturile din /etc/rc5.d/

Pentru fiecare serviciu exista in /etc/rc[0-6].d/ un fisier de forma SnrNumeServiciu si KnrNumeserviciu.Exemplu: S10network si K10network. Fisierele care incep cu litera S se executa la intrarea in runlevelul respectiv iar cele care incep cu litera K se executa la iesirea din runlevelul respectiv. Ordinea de executie a fiecarui serviciu este importanta si se stabiliteste in functie de numarul care urmeaza dupa litera S sau K. Fisierele din /etc/rc[0-6].d/ sunt de fapt symlinkuri catre fisierele din /etc/init.d/ - directorul global cu startup files. Fiecare fisier din /etc/init.d/ trebuie sa poata primi ca parametru start|stop|reload|restart.

Exemplu: executia fisierului /etc/rc3.d/S10network este echivalenta cu executia scriptului /etc/init.d/network start.

Notarc = Runlevel Script / resource control

Managementul serviciilor

Pentru a stabili ce servicii pornesc la butare avem mai multe optiuni: 1) Varianta 1a) se creaza un script in /etc/init.d/ care sa porneasca serviciul atunci cand primeste parametrul start si sa-l opreasca atunci cand primeste parametrul stop.b) se creaza 2 sym linkuri in /etc/rc[0-6].d/ catre /etc/init.d/nume_script. Un symlin trebuie sa fie de forma SnrNume iar celalalt KnrNume.* (asterix) reprezinta runlevelul in care intra sistemul.

2) Varianta 2a) Fedora/RedhatSe foloseste comanda chkconfig pentru a stabili ce servicii vor porni la butare.

chkconfig - se foloseste pentru crearea/stergerea automata a symlinkurilor din /etc/rc[06].d/ --lists = listeaza toate serviciile precum si modul in care sunt configurate sa porneasca infiecare runlevel.--add service_name = adauga un serviciu pentru a fi administrat cu chkconfig.--del service_name = sterge un serviciu--level = stabileste runlevelul pentru care se configureaza serviciul.Exempluchkconfig --list sendmail chkconfig –list chkconfig --add sendmailchkconfig --del sendmailchkconfig --level 35 sendmail on

Page 83: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

b) UbuntuSe foloseste comanda update-rc.d

Exemplu1. Pornire serviciu ssh in mod default (cuvantul cheie default porneste serviciul in runlevel 2,3,4 si 5 si-l opreste in 0,1 si 6)update-rc.d script_name defaults

2. Remove the symlink from /etc/rc[0-6]d/. Serviciul nu va mai porni in runlevelul specificat.update-rc.d ssh remove

3. Stabilire runlevel explicit in care se porneste/opreste serviciul update-rc.d ssh start 0123 stop 456

Oprire/Pornire de servicii:

Pentru a opri/porni un serviciu exista in principiu 2 modalitati.1. Folosind startup scripts si pasand argumentul start, stop sau restart.Exemplu: /etc/init.d/sendmail start/etc/init.d/sshd restart2. Folosind comanda serviceExemplu: service sendmail startservice httpd stopservice sshd restart

Comanda service ruleaza scriptul pe care il primeste ca parametru ( Exemplu: sendmail)cu optiunile aferente (start, stop etc). Scriptul trebuie sa se gaseasca in /etc/init.d/

Nota/sbin/service este un script de shell

Daca nu dorim sa cream cate un script pentru fiecare serviciu putem adauga comenzi in fisierul /etc/rc.local care este executat dupa terminarea tuturor celorlalte scripturi de initialiazare. Trebuie sa existe un symlink catre el in /etc/rc[0-6].d/

Linux Server Administration

Page 84: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Capitolul 1 – Shell Scripts

1.1 Introducere Bash

Shellul este interpretorul de comenzi. Acesta parseaza comenzile introduse de utilizator, le verifica din punct de vedere al sintaxei si le trimite kernelului spre executie. Exista mai multe shelluri (Bourne, Korn, C Shell etc), dar default pe Linux este shellul numit Bash (Bourne Again Shell). Fizic Bash-ul este reprezentat de fisierul /bin/bash

Pe langa interpretarea si executia comenzilor, Bash-ul ofera si alte facilitati printre care: editarea liniei de comanda, history, alias-uri, dar si un limbaj de programare structurat propriu.

Un script de shell este un fisier text (ASCII) care contine comenzi de shell organizate intr-un mod logic. Pe langa comenzi, script-ul mai contine si variabile (locale sau globale), parametri pozitionali precum si structuri de programare specifice (if..then..else, while, do, until, for, case, selsect etc).

Un script este folosit pentru a imbina comenzi si diverse structuri de control pentru a oferi o noua functionalitate sau a automatiza task-uri.

Etapele crearii unui script sunt:a) crearea unui fisier text folosind editorul preferat ( Exemplu: vim)b) editarea fisierului pentru a contine functionalitatea doritac) testarea scriptului adica executia/rularea acestuia

Moduri de executie a unui script numit script1:

1. Din directorul care contine scriptul se ruleaza : ./script1 Fisierul script1 trebuie sa aiba dreptul de executie. Fiindca directorul curent (.) nu

se afla in $PATH (altfel grave probleme de securitate), scriptul trebuie sa fie executat cu calea absoluta sau cu ./nume_script In acest caz se porneste un shell nou ca sub proces al shellului curent in care se executa comenzile din script.

2. Din directorul care contine fisierul script1 se ruleaza: . script1 sau source script1. Se executa comenzile din script1 in shell-ul curent. Fisierul script1 nu trebuie sa aiba dreptul de executie. Una dintre diferentele dintre prima si a doua varianta este ca variabilele exportate sau globale sunt vizibile in shell-ul curent in varianta a doua, dar nu si in prima varianta.

NotaVarianta cea mai folosita de executie a unui script este prima: ./script

Un script trebuie sa contina pe prima linie o referire la programul cu care se executa (Bash, Perl, PHP, Python etc). Astfel prima linie a unui script Bash este invariabil: #!/bin/bash. In interiorul scriptului #(diez) reprezinta un comentariu. Exceptie face prima linie.

Page 85: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

echo se foloseste pentru afisa un string (sir de caractere) sau o variabila la consola. Exemplu: echo "Linux"

Exemplu1. Script care afiseaza mesajul: Acesta este primul exemplu ! #!/bin/bash echo "Acesta este primul exemplu !" 2. Script care creaza un fiser numit continut_etc.txt in directorul curent ce contine fisierele si directoarele din directorul /etc, iar apoi afiseaza spatiul total, ocupat si liber de pe fiecare partitie de pe Hard Disk. #!/bin/bash ls -l /etc > continut_etc.txt echo "Fisierul continut_etc.txt a fost creat in directorul curent!" echo "Informatii partitii:" df -h

ImportantO cunoastere acceptabila a modului de creare de scripturi este esentiala pentru orice

Administrator de sistem. In cazul persoanelor incepatoare care nu au experienta in programare (orice limbaj) procesul de scripting pare la prima vedere extrem de complicat. Este nevoie de multe exercitii si exemple pentru o intelegere aprofundata. Intotdeauna se incepe cu exercitii simple si anume scripturi formate din cateva randuri.

1.2 Variabile, constante si functii

Prezentare generala:1. O variabila reprezinta un nume pentru o locatie de memorie unde se gaseste o valoare. Se obisnuieste (nu este obligatoriu) ca variabilele sa se scrie cu litera mare.

2. Comparativ cu alte limbaje de programare (C/C++, JAVA) variabilele in Bash nu au tip. Ele sunt string-uri, dar in functie de context pot fi evaluate ca intreg, double etc.

3. O variabila se declara: NUME_VAR=valoare ImportantNu se foloseste spatiu intre NUME_VAR si valoare. i = 1 reprezinta eroare. Sintaxa bash - ului este extrem de stricta. Un spatiu in plus sau in minus reprezinta o eroare fatala.

Exemplu: NUME="dan"varsta=20

4. Pentru a ne referi la continutul unei varibile se foloseste semnul $ (dollar) in fata numelui variabilei. Exemplu: echo $varsta

5. Variabilele pot fi locale sau globale. Cele locale sunt vizibile doar in shell-ul curent, iar cele globale sunt vizibile in shell-ul curent si in toate subprocesele shell-ului curent.

Page 86: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Astfel in interiorul unui script daca se foloseste o variabila globala aceasta va fi accesibila oricarei comenzi/program lansata din acel script. Variabilele globale nu sunt accesibile parintelui unui proces, adica shell-ului de unde s-a executat scriptul. Exceptie face varianta 2 de executie a unui script adica folosind source nume_script

6. Pentru a declara o variabila globala aceasta trebuie exportata. Se foloseste cuvantul cheie export

Exemplu: export VARSTA=20 variabilele globale se numesc de environment; pentru a vizualiza variabilele locale se foloseste comanda set; pentru a vizualiza variabilele globale se foloseste comanda env; pentru sterge o variabila se foloseste comanda unset NUME_VAR;

Exemplu de varibile globale predefinite:

PATH -> contine o lista de directoare in care shell-ul cauta comanda care se executa. Pentru a concatena un string la variabila PATH se foloseste caracterul : (doua puncte).

ExempluDaca dorim sa adaugam directorul /home/dan/scripts in PATH: export PATH=PATH:/home/stud/scriptsDupa aceasta scripturi si comenzi din /home/stud/scripts pot fi rulate in orice director ne am afla doar prin numele lor. Altfel trebuie folosita calea absoluta sau aflandu-ne in director se executa: ./nume_comanda

HOSTNAME -> contine hostname-ul calculatorului SHELL -> contine shell-ul defaultHISTSIZE - contine nr. de comenzi care vor fi memorate in historyUSER -> contine EUIDPWD -> contine directorul curentOLDPWD -> contine directorul precedent si se foloseste de comanda: cd –

HOME -> contine home directory al EUIDRANDOM -> variabila al carei continut este pseudoaleatorTMOUT -> nr in secunde dupa care se face logout automat daca nu se executa niciocomanda

7. Diferenta dintre ghilimele simple(apostrof) si ghilimele duble este aceea ca ghilimele simple nu interpreteaza $ ca si caracter special. In interiorul ghilimelelor simple fiecare caracter special cu exceptia ' (ghilimea simpla) este interpretat literal.

Page 87: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exempluvarsta=20 echo "$varsta" ##se afiseaza 20 echo '$varsta' ##se afiseaza $varsta

8. O variabila poate fi declarata read-only sau de tip array. O variabila read-only se mai numeste si constanta.

Exemplu1. var1 este readonly. Aceasta nu poate fi modificata sau stearsa folosind unset.declare -r var1=7 2. Pentru a declara un array/vector: ARRAY=(unu doi trei) echo ${ARRAY[*]} echo ${ARRAY[1]} i=2 echo${ARRAY[]} unset ARRAY[1] unset ARRAY

ARRAY nu este cuvant cheie. In loc de ARRAY poate fi orice cuvant.

9. Pentru a citi o variabila de la tastatura se foloseste cuvantul cheie read

Exemplu:#!/bin/bash echo "Introdu nume fisier:" read FILE echo "Fisierul introdus este $FILE"

10. In bash exista caractere speciale care sunt interpretate in mod deosebit.Exemple: $ (dollar), "(ghilimea dubla) sau \ (backslash). Pentru a anula efectul special alcaracterului, acesta se precede cu \ (backslash). Exemplu: echo \$var -> Afiseaza $var. $ nu mai este caracter special.

1.3 Parametri pozitionali

Bash-ul foloseste parametri speciali la care ne putem referi in interiorul unui script pentru a avea acces la anumite valori. Acesti parametri speciali se pot folosi ca si variabilele, doar ca exista default si nu trebuie creati. Continutul acestora este de asemenea standard.

Acestia sunt:

1. $0 - contine numele scriptului

Page 88: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Scriptul poate actiona diferit in functie de numele cu care a fost rulat ( Exemplu: daca se ruleaza folosind un simlink al scriptului. Vezi comanda /bin/egrep care este un simlink catre /bin/grep dar are totusi functionalitate diferita).

2. $1 - reprezinta primul argument al scriptului, $2 al doilea argument al scriptului etc. Incepand cu argumentul 10 acesta trebuie incadrat intre acolade ${10}, ${11} etc. Se folosesc pentru a evita erori in momentul in care scriptul este rulat fara argumente sau cu un alt nr. de argumente (iar acesta asteapta sa primeasca argumente).

3. $? - reprezinta statusul ultimei comenzi executate. In Bash Zero este statusul pentru non-error iar diferit de zero este statusul pentru eroare. Orice comanda/program are un status de exit, zero sau non-zero. Se foloseste pentru a continua executia scriptului (sau a modifica comportamentul acestuia) in functie de statusul comenzilor anterioare.

4. $# - reprezinta nr. de argumente ale scriptului Se poate lua o decizie in functie de nr. de argumente cu care a fost rulat scriptul.

5. $* - reprezinta toate argumentele date scriptului.

6. $$ - reprezinta PID shell.Astel in functie de cum rulam scriptul $$ are alta valoare:source f1 - $$ reprezinta

PID bash (shell curent) ./f1 - $$ reprezinta PID noului sub-shell creat in care se executa comenzile

7. $! - reprezinta PID ultimului proces executat in background.

Exemplu1. Script care sterge fisierul sau directorul pe care-l primeste ca argument #!/bin/bash rm -rf $12. Afisarea numelui scriptului #!/bin/bash Echo "Numele scriptului executat este: $0"

1.4 Alte facilitati Bash

1.4.1 Alias

Un alias reprezinta un mod prin care o comanda sau o serie de comenzi se executa folosind un alt nume.Pentru a crea un alias se foloseste comanda: alias comanda_noua='comanda_substituita'

Exemplu1. alias copy='cp'2. alias search='grep'3. alias ls='ls -F'

Page 89: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

4. alias rm='rm -i'5. alias ll='ls -l'6. alias stop='kill -9'

Daca aliasul este compus din mai multe cuvinte acestea trebuie incadrate intre ghilimele simple (apostrof).Pentru a vizualiza toate aliasurile din sistem se foloseste comanda alias fara nici un argument.Pentru a executa comanda originala in locul aliasului se foloseste \ (backslash) urmat de comanda.

Example: \ls

Pentru a sterge un alias se foloseste comanda unalias Example: unalias ls

NotaUn alias exista doar in shell-ul curent (nu exista nici macar in subshell-urile shell-uluicurent).

1.4.2 Customizare Environment

Prompting variables (prompt strings)

Bash foloseste 4 variabile speciale numite "prompt strings": PS1, PS2, PS3 si PS4.

1. PS1 este numit "primary prompt string" si reprezinta prompterul curent.De cele mai multe ori acesta se modifica pentru a arata informatii cat mai utile despre sesiunea curenta.

PS1 foloseste niste macro-uri care se expandeaza cu un anumit continut astfel:\A - current time in HH:MM hours format \d - current date \@ - the current time in 12 hours format \H - the hostname \h - the hostname up to the first dot (.) \s - the name of the shell \u - username of the EUID \w - the current working directory \W - the current working directory (basename) - relativ \$ - if EUID==0 print # else print $

NotaUn exemplu excelent de modificare PS1 este: export PS1='[\u@\h \w]$' Avand acest prompter adminul are intotdeauna informatii despre userul cu care s-a conectat, host-ul pe care este conectat precum si calea absoluta a directorului curent. Linia

Page 90: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

de mai sus se adauga in fisierul de customizare ~/.bashrc

2. PS2 este numit "secondary prompt string" si are valoarea default > (mai mare).Se foloseste atunci cand se scrie o comanda incompleta si se apasa ENTER. Exemplu: echo "dfasfdas

3. PS3 se numeste "prompt string for the select command" si se foloseste in scripting impreuna cu comanda select

4. PS4 se numeste "prompt string for the xtrace option" si reprezinta un prompt string folosit in debugging si flow control.

Environment

Fiecare utilizator are propriul mediu de lucru numit si Environment. Customizarea Environmentului presupune modificarea unor variabile si parametri astfel incat mediul de lucru sa fie cat mai prietenos si sa ne ofere cat mai multe informatii.

Din mediul de lucru al unui utilizator fac parte: aliasurile sale, umask, modul de afisare al prompterului, variabila PATH in care shellul cauta comenzile, ulimit etc

Exista fisiere de initializare pentru fiecare user care sunt citite de shell la fiecare pornire a acestuia:~/.bashrc - este primul fisier citit de shell la login. In acest fisier trebuie declarate variabile, alias-uri etc pentru fiecare user. ~/.bash_profile - este citit dupa ~/.bashrc ~/.bash_logout - este citit de shell inainte de logout. In acest fisier se pot reseta variabile, sterge fisiere temporare sau alte functii care vrem sa aiba loc inainte de logout.

Fisierul /etc/profile este un alt fisier de customizare "system-wide". Acesta nu apartine unui anumit user, iar in el se configureaza mediul pentru toti userii. Il folosim de exemplu daca dorim setarea unui alias pentru toti userii din sistem.

Aceste fisiere nu sunt recitite automat de shell dupa modificare. Toate configurarile au efect dupa o noua logare in cazul ~/.bashrc sau ~/.bash_profile sau dupa o restartare a sistemului in cazul /etc/profile.Pentru a forta recitirea lor se foloseste comanda source sau . (dot) urmata de nume fisier. source sau . executa comenzile din interiorul fisierului in shell-ul curent.

Exemplu: source ~/.bashrc sau . ~/.bashrc

Daca ~/.bash_profile nu exista shell-ul cauta ~/.bash_login. Daca nici aceasta nu exista cauta ~/.profile.

In aceste fisiere speciale de initializare se seteaza: PS1, TMOUT, PATH, alias, umask etcpentru fiecare utilizator

Nota

Page 91: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Fisierele de initializare pentru fiecare utilizator se gasesc in home directory al acestuia (~) si sunt ascunse fiindca incep cu .(punct). Pentru vizualizarea lor se foloseste comanda ls cu optiunea -a Exemplu: ls -la ~

NotaIn functie de distributia de Linux numele si ordinea de citire a fisierelor de customizare a mediului de lucru pentru fiecare user poate sa difere. Totusi, pe marea majoritate a distributiilor de Linux (RedHat, Fedora, CentOS, Suse, Ubuntu, Kubuntu, Debian) exista ~/.bashrc. In acest caz se recomanda folosirea doar a acestuia

Exemplu ~/.bashrc: # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias cauta=find alias muta=mv alias S='ssh -l root -p 7890 ssh.crystalmind.ro' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi export PS1='[\u@\h \w]$' export PATH=:/home/dan/scripts umask=0022

1.5 Flow Control

1.5.1 Conditii de testare

NotaInformatiile din acesta pagina au scopul de referinta pentru testele folosite de structurile de control ce urmeaza a fi prezentate. Ele nu trebuie invatate la acest moment in afara conextului de flow control ci doar impreuna cu structurile if..then..else, while, case etc

Structurile de control (if..then..else, while etc) presupun conditii de testare.Acestea sunt: 1. Pentru fisiere -e = fisierul exista-f = fisierul exista si este de tipul regular fileExemplu: -f $FILE-s = fisierul nu are dimensiunea zero-d = fisierul exista si este de tip director-c = fisierul exista si este de tip char device-b = fisierul exista si este de tip block device-r = fisierul exista si are permisiunea read-w = fisierul exista si are permisiunea write-x = fisierul exista si are permisiunea execute -g = fisierul are GUID setat-u = fisierul are SUID setat-k = fisierul are sticky bit setat-nt = fisierul este mai nou decat un alt fisierExemplu: file1 -nt file = file1 is newer than file2! -> inverseaza sensul (neaga)

Page 92: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2. Pentru comparatie -eq = equal to-ne = not equal to-gt = greater thanExemplu: $i -gt -$j-ge = greater than or equal-lt = less than-le = less than or egal

3. Pentru stringuri (siruri de caractere)-z = lungimea sirului este zero-n = lungimea sirului este non-zero= egal (comparativ cu alte limbaje de programare operatorul de comparatie este un singur egal)!= diferitExemplu: $str1 != $str2

-a = SI LOGIC (AND)-o = SAU LOGIC (OR)

Exemplu1. Testul este adevarat daca ambele conditii sunt adevarate simultan (valoarea variabilei USER este root si valoarea variabilei SHELL este bash)$USER = "root" -a $SHELL = "bash"In cazul comparatiei a doua stringuri din punct de vedere al sintaxei bash este obligatoriu un spatiu inainte de = (egal) si un spatiu dupa = (egal).Exemplu: $USER="root" este gresit, $USER = "root" este corect. 2. Testul este adevarat daca una dintre conditii este adevarata(i mai mic ca 10 SAU i mai mare ca 100)$i -lt 10 -o $i gt 100

NotaContiditiile de testare prezentate mai sus sunt doar cele mai folosite. Pentru lista completa executati: man test test EXPR sau [ EXPR ] au acelasi rezultat.

1.5.2 If..then..else

Cea mai simpla constructie de flow control este cea conditionala reprezentata de if. In functie de o valoarea de adevar a unei conditii se stabilesc instructiunile ce trebuie executate. Conditiile de test se refera la proprietati ale fisierelor, comparatii numerice sau sunt referitoare la stringuri.

Page 93: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Sintaxa pentru if este: if [ conditie_de_test ] then lista_de_instructiuni fiDaca conditia de test este adevarata se executa lista de instructiuni, altfel aceasta nu se executa.

Exemplu1. Daca primul argument al scriptului este fisier se executa: cat fisier if [ -f $1 ] then cat $1 fi2. Daca valoarea variabilei i este 10 se afiseaza mesajul "Variabila i are valoarea 10" if [ $i -eq 10 ] then echo "Variabila i are valoarea 10" fi

Sintaxa pentru if..else este: if [ conditie_de_test ] then lista_de_instructiuni else lista_de_instructiuni_default fiData conditia de test este adevarata se executa lista_de_instructiuni, altfel se executalista_de_instructiuni_default

ExempluDaca valoarea variabilei VARSTA citita de la tastatura este mai mica decat 18 se afiseaza mesajul "Esti minor!", altfel se afiseaza mesajul "Esti major!" #!/bin/bash echo "Introdu varsta:" read VARSTA if [ $VARSTA -lt 18 ] then echo "Esti minor!" else echo "Esti major!" fi

Sintaxa pentru if..elif..else este: if [ conditie_de_test1 ] then lista_de_instructiuni1 elif [ conditie_de_test2 ] then lista_de_instructiuni2 elif [ conditie_de_test3 ] then lista_de_instructiuni3 else lista_de_instructiuni_default fi

ExempluDaca variabila ORA citita de la tastatura este mai mica decat 12 se afiseaza mesajul "Buna dimineata" daca este intre 12 si 18 se afiseaza mesajul "Buna ziua", daca este intre 18 si 24 se afiseaza "Noapte Buna!". Pentru orice alta situatie se afiseaza mesajul "Eroare!".#!/bin/bash read i if [ $i -lt 12 ] then echo "Buna dimineata!" elif [ $i -ge 12 -a $i -lt 18 ] then echo "Buna ziua!" elif [ $i -ge 18 -a $i -le 24 ] then echo "Noapte buna !" else echo "Eroare!" fi

-a reprezinta SI LOGIC (AND). Testul este adevarat daca ambele conditii sunt adevarate simultan.-o reprezinta SAU LOGIC (OR). Testul este adevarat daca una dintre contitii este adevarata.

Exemplu1. Testul este adevarat daca ambele conditii sunt adevarate (primul parametru este fisier si exista SI are permisiunea de read). Ambele conditii sunt adevarate simultan.

Page 94: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

if [ -e $1 -a -r ]2. Testul este adevarat daca primul parametru primit de script este fisier SAU acesta este director. Una dintre conditii este adevarata. if [ -f $1 -o -d $1 ]

1.5.3 For

For se foloseste pentru a executa o sectiune de cod de un numar repetat de ori (ciclu). Varianta clasica de for din Bash este diferita de cea din alte limbaje de programare.

Sintaxa pentru for este:for VAR in lista_de_valori do instructiuni done

Se executa instructiunile specificate de atatea ori cate valori avem in lista. Pentru fiecare iteratie variabila VAR ia o valoare din lista_de_valori. Separatorul pentru valorile din lista este default spatiu sau valoarea variabilei globale IFS.

Exemplu1. Script care exemplifica ciclul de tip for prin trimiterea unui pachet ping la fiecare din cele 3 IP-uri.Instructiunile dintre do si done se executa de atatea ori cate valori avem in lista (3 valori). Pentru fiecare ciclu valoarea variabilei IP este o valoare din lista. Valorile din lista sunt separate prin spatiu. #!/bin/bash for IP in 192.168.0.1 192.168.0.2 192.168.0.3 do ping -c 1 $IP done2. Exemplu for modificand valoara variabilei IFS care este separatorul valorilor. #!/bin/bash #Acest script afiseaza fiecare director din $PATH pe cate un rand IFS=: for DIR in $PATH do echo $DIR done

In Bash exista si structura de tip for ca in C/C++. Aceasta este insa mai putin folosita.

Exemplu for ca in C/C++: LIMIT=10 for((a=0;a<=$LIMIT;a++)) do echo $a done

1.5.4 While

Structura de tip while se foloseste pentru a executa o serie de instructiuni (cele dintre do si done) atata timp cat conditia de test este adevarata. while [ conditie_de_test ] do lista_de_instructiuni done

Exemplu while: #!/bin/bash #script care afiseaza numerele intre 0 zi 100 LIMIT=100 i=0

Page 95: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

while [ $i –le $LIMIT ] do echo "i=$i" let i=i+1 done

1.5.5 Case

Structura de tip case se foloseste pentru a executa o serie de instructiuni in functie dediferite conditii de testare.

Sintaxa pentru case este: case VARIABILA in valoare1) instructiuni1 ;; valoare2) instructiuni ;; *) instructiuni_default ;; esac

* -> reprezinta instructiunile ce se vor executa default daca variabila nu are niciuna dintre valorile de mai sus.

Exemplu#!/bin/bash echo "Introdu nr:" read nr case $nr in 1) echo "nr este 1" ;; 2) echo "nr este 2" ;; *) echo "nr are alta valoare" ;; esac

Structura de tip case poate fi oricand inlocuita cu o structura de tip if..elif..else

Exemplu de mai sus folosind if..elif..else este:

#!/bin/bash echo "Introdu nr:" read nr if [ $nr -eq 1 ] then echo "nr este 1" elif [ $nr -eq 2 ] then echo "nr este 2"

Page 96: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

else echo "nr este altceva" fi

Important Structura de tip case este foarte importanta si trebuie inteleasa bine. Toate

scripturile de initializare a serviciilor (cele din /etc/init.d ) folosesc o structura de tip case.

Structura unui script de initializare din /etc/init.d este: case $1 in start) instructiuni de pornire serviciu ;; stop) instuctiuni de oprire serviciu ;; restart) instructiuni de restartare serviciu ;; *) afisare help script esac

$1 reprezinta primul parametru al scriptului si poate fi start, stop sau restart.

Exemplu: Pentru restartarea retelei se foloseste: /etc/init.d/network restart, unde network este scriptul de initializare iar restart primul parametru pe care-l primeste.

ExempluPresupunem ca am compilat si instalat serverul Apache in directorul /opt/apache. Daemonul http se porneste ruland comanda: /opt/apache/bin/apachectl start, se opreste cu /opt/apache/bin/apachectl stop si se restarteaza cu /opt/apache/bin/apachectl restart. Se doreste pornirea serverului la butarea sistemului, mai exact la intrarea in runlevel 3.

Etape: 1. Se creaza un script in /etc/init.d. Numele poate fi ales aleator, in exemplul nostru acesta se numeste init_apache2. Se creaza un symlink catre /etc/init.d/init_apache in /etc/init.d/rc3.d numit S99Apache. Numele symlinkului este important sa inceapa cu litera S urmata de un umar intre 0 si 99. La intrarea in runlevell 3 se va rula automat acest script cu parametrul start.

Structura scriptului /etc/init.d/init_apache este: #!/bin/bash case $1 in start) echo "Starting Apache..." /opt/apache/bin/apachectl start echo "OK" ;; stop) echo "Shutting down Apache..." /opt/apache/bin/apachectl stop echo "OK" ;; restart) $0 stop $0 start

Page 97: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

;; *) echo "init_apache <start|stop|restart>" esac

NotaPentru detalii complete despre modul de pornire a serviciilor la butare cititi capitolul "Managementul Serviciilor" din cursul "Linux Basic Administration" disponibil de asemenea online.

1.5.6 Select

Structura de tip select este specifica doar Bash-ului si se foloseste pentru crearea de meniuri.

Sintaxa acesteia este: select MENUITEM in menu_list do lista_de_comenzi done

Detalii: - menu_list este lista de meniuri. Valorile din lista sunt separate prin spatiu; - intre do si done sunt instruciunile ce se executa in functie de meniul ales; - intre do si done avem acces la urmatoarele 2 variabile: MENUITEM care contine meniul selectat si REPLY care se creaza automat si contine inputul userului (ce a scris acesta la consola); - PS3 contine prompterul de selectare a meniurilor; - userul alege un meniu din lista folosind un nr. de ordine: alege 1 pentru primul meniu, 2 pentru al doilea etc;

Exemplu: #!/bin/bash PS3="Alege:" select ITEM in "Afiseaza continut /etc" "Afiseaza spatiu liber" "Exit" do case $REPLY in 1) ls -l /etc ;; 2) df -h ;; 3) exit 0 ;; *) echo "Optiune incorecta" esac

Page 98: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

done

1.6 Substituirea comenzilor

Unei variabile i se poate asigna o valoare in 2 moduri: 1. Folosind NUME_VAR=valoareExemplu: EDITOR="VIM"

2. Substituind o comanda cu outputul eiExemplu: VAR=`ls /etc` -> in acest exemplu comanda ls /etc se substituie sau inlocuieste cu outputul ei care se asigneaza variabilei VAR. Variabila VAR va contine outputul comenzii ls -l.

NotaSubstituirea unei comenzi cu outputul ei reprezinta unul dintre caracteristicile cele mai puternice ale Bashului, iar majoritatea scripturilor folosesc acest mod de lucru.

Pentru a substitui o comanda cu outputul ei exista 2 variante:1. Comanda sa incadreza in backquotes ( ``). Atentie, backquotes nu sunt apostroafe sau ghilimele simple. Exemplu: ME= `whoiam ` -> variabila ME va contine outputul comenzii whoami

2. Comanda se incadreza intre $( si )Exemplu: ETH0= $(ifconfig eth0) -> variabila numita ETH0 va contine outputul comenzii ifconfig eth0

Exemplu script ce nu poate fi rulat de catre root

#!/bin/bash if [ "$(whoami)" = "root" ] then echo "Esti root, sorry !" exit 1; fi #incep instructiunile ce nu pot fi rulate de catre root" ls -la ~

NotaIn momentul in care o variabila de tip string este testat folosind un test pentru stringuri este bine ca aceasta sa fie incadrata intre ghilimele duble pentru a forta tipul ei catre string.Exemplu: VAR="`ifconfig eth0`" if [ -z "$VAR" ] then echo "Interfata eth0 nu exista!" fi

rights reserved

Page 99: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Capitolul 2 - Compilare Kernel

2.1 Introducere, necesitate compilare

Kernelul sistemului de operare Linux reprezinta componenta cea mai importanta a acestuia. Toata functionalitatea sistemului este realizata de kernel.

Dintre cele mai importante functii ale kernelului Linux amintim:- alocarea resurselor diferitelor procese (o parte din RAM, o parte din CPU etc); - contine drivere pentru toate dispozitivele hardware de la placa de baza, placa video, placa de sunet, placa de retea, monitor, tastatura etc; - lucrul cu sistemele de fisiere; - orice operatie de creare, stergere, citire, modificare fisier sau director este realizata de o functie din Kernel; - firewall & routing; - QoS;

Orice administrator de sistem s-a lovit macar o data de necesitatea upgrade-arii kernelului. Un upgrade de kernel se poate face in 2 moduri:1. Folosind o versiune de kernel direct compilata pentru o anumita distributie si arhitectura. In acest caz noul kernel se instaleaza dintr-un fisier RPM sau DEB.

Aceasta metoda are numeroase dezavantaje printre care cele mai importante sunt: - kernelul este compilat pentru o arhitectura generica. Acesta nu este optimizat special pentru tipul nostru de procesor, placa de baza etc. Astfel performantele vor fi mai scazute; - facilitatile oferite sunt generice si anume acesta include facilitati necesare majoritatii utilizatorilor;Exemplu: poate include suport pentru RAID, iar serverul nostru nu foloseste RAID, nu va include suport pentru un firewall la nivel de aplicatie, iar necesitatile serverului nostru presupun folosirea unui astfel de firewall, nu va include driver pentru o anumita placa de retea wireless pe care o folosim daca aceasta este putin mai "deosebita" etc; - kernelul cuprinde multe optiuni nefolositoare in cazul nostru particular;Exemplu: va cuprinde drivere pentru majoritatea placilor de baza, a placilor de retea, diferite aplicatii pe care nu le folosim niciodata etc; - dupa aparitia unei noi versiuni de kernel dureaza o perioada de timp pana cand apare forma sa compilata ca RPM sau DEB. In acest fel exista un "vulnerability window" in care nu suntem protejati impotriva ultimelor vulnerabilitati sau pur si simplu kernelul nostru nu acopera diferite buguri;

Page 100: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2. Compiland direct sursele kerneluluiAceasta este metoda preferata in cele mai multe cazuri. Dorim sa compilam un nou kernel in urmatoarele conditii:a) vrem sa includem drivere pentru hardware nou aparut sau pentru hardwareul ale carui drivere nu sunt incluse in versiunea standard de kernel care vine cu distributia;b) includerea de optiuni pentru diferite aplicatii sau servicii (QoS - HTB, firewall la nivel de aplicatie, criptografie, LVM, RAID etc);c) vrem sa acoperim diferite bug-uri sau probleme de securitate. In medie apare o noua versiune de kernel la circa 2 saptamani. Aceasta acopera bug-urile din versiunea trecuta descoperite intre timp;d) dorim un "fine tuning" al kernelului exact pentru configuratia hardware a serverului nostru (tipul nostru de procesor in special);

NotaIndiferent de distributia de Linux folosita, kernelul este acelasi. Acesta este marcainregistrata a lui Linus Torvalds, iar dezvoltarea sa este supravegheata si avizata deacesta.

2.2 Structura Kernel Linux

Numele kernelul de linux are forma: linux-major.minor.patchlevel.extra_versionExemplu: linux-2.6.25.12 lansat in Iulie 2008 Important

Versiunile minore pare sunt stabile, iar cele impare sunt pentru teste (development). Pe un server in productie se instaleaza doar versiuni stabile de preferat ultima versiune. Versiunile de test se folosesc doar pentru developerii de kernel sau testeri. Un kernel se poate gasi in 2 forme:

1. ModularUn kernel modular se caracterizeaza prin faptul ca intreaga sa functionalitate nu

este inclusa in acesta ci in alte fisiere numite module si care se pot incarca/descarca in/din kernel in timp ce acesta este incarcat in RAM si ruleaza.

Exemplu: Kernelul nu include suport pentru ipv6 sau pentru ntfs. Suportul pentru ipv6 sau ntfs se gaseste in fisiere separate numite module. Acestea se pot incarca in kernel in momentul in care avem nevoie de respectiva functionalitate respectiv dorim sa folosim ipv6 sau sau sa montam o partitie ntfs.

2. NemodularUn kernel nemodular se caracterizeaza prin faptul ca intreaga sa functionalitate este

inclusa in acesta. Nu se pot incarca/descarca module din kernelul care ruleaza. Important

Kernelul de linux este reprezentat fizic printr-un SINGUR fisier care se gaseste de obicei in directorul /boot sub numele /boot/vmlinuz-versiune

Page 101: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Acesta reprezinta imaginea compilata si compresata a kernelului care se incarca in RAM la butare si doar la butare.

Exemplu: /boot/vmlinux-2.6.25.12

Fiecare optiune pe care kernelul o ofera poate fi compilata ca parte integranta a kernelului sau ca modul.

LKM (Loadable Kernel Modules) sunt fisiere binare care contin cod folosit pentru a extinde functionalitatea kernelului care ruleaza (the base kernel). Acestea se compileaza odata cu kernelul.

Comenzi folosite pentru listare/incarcare/descarcare module din kernel:

lsmod - listeaza modulele incarcate in memorie

Pentru a incarca/descarca module in/din kernel se foloseste comanda modprobe (fisierul de configurare este /etc/modprobe.conf) modprobe nume_modul - incarca un modul-l = listeaza toate modulele disponibile (nu neaparat incarcate in kernel)-r module_name = descarca un modul din kernel

Exemplu: modprobe ip6_tunnel

Modulele se gasesc fizic pe hard disk in /lib/modules intr-un director cu numele kernelului si intr-o categorie anume.

NotaKernelul de Linux precum si marea majoritate a serverelor si programelor sunt scrise in limbajul de programare C

2.3 Ghid compilare kernel

De cele mai multe ori compilarea kernelului se realizeaza cu ajutorul unui ghid de compilare. Exista mai multe astfel de ghiduri si anume pasi care trebuie urmati pentru compilarea kernelului. Toate acestea au in comun aceiasi pasi importanti.

Ghidul de compilare prezentat mai jos a fost testat cu succes pe majoritatea distributiilor de Linux. In exemplul nostru compilarea s-a realizat pentru o distributie FEDORA. Puteti urma aceiasi pasi identici sau doar cu mici modificari pentru orice alta distributie.

Etape compilare kernel

Etapa 1

Page 102: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Download ultima versiune de kernel de la www.kernel.org, decomprimarea si dezarhivarea sa intr-un director la alegere. Dupa decomprimarea arhivei ne mutam in directorul nou creat.

ImportantToate operatiile si comenziile care vor urma se vor executa din directorul care

contine sursele kernelului. Pana la ultima etapa si anume restartarea calculatorului ramanem in acest director.

In exemplul acestui curs sursele kernelului se downloadeaza in /home/dan, iar in urma decomprimarii arhivei cu sursele rezulta directorul /home/dan/linux-2.6.25.12. Toate comenzile vor fi executate din directorul /home/dan/linux.2.6.25.12

In functie de versiunea kernelului si de directoarele din propriul sistem, caile absolute si relative pot diferi. Acestea trebuie ajustate corespunzator.

Exemplu1. cd /home/dan 2. wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.12.tar.bz2

3. tar -xjvf linux-2.6.25.12.tar.bz2

Etapa 2 (Aceasta etapa este optionala, dar foarte recomandata)Fiind cea mai importanta componenta a sistemului, este aproape obligatoriu sa

verificam semnatura digitala a arhivei. Aceasta operatie garanteaza faptul ca avem o versiune de kernel originala (nemodificata si downloadata fara erori).Pentru verificarea semanturii digitale a unui fisier avem nevoie de urmatoarele:1. Fisierul a carui semnatura digitala se verifica (in acest caz arhiva care contine sursele kernelului)2. Fisierul care reprezinta semnatura digitala. In acest exemplu acesta este linux 2.6.25.12.tar.bz2.sign. Acesta se obtine din acelasi loc din care se downloadeaza kernelul ( www.kernel.org)3. Cheia publica a celui care a semnat fisierul si anume producatorul kernelului.4. Un program care verifica semanatura digitala si care este invariabil gpg.

NotaIntreaga teorie legata de criptografie si semanaturi digitale este prezentata in cursul "Advanced Linux & Infosec" disponibil de asemenea online.

Exemplu1. Download semnatura digitala wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.12.tar.bz2.sign 2. Importarea chei publice cu care s-a semnat. Fiecare cheie are un ID unic. gpg --keyserver wwwkeys.pgp.net --recv-keys 517d0f0e 3. Verificaregpg --verify /home/dan/linux-2.6.25.12.tar.bz2.sign /home/dan/linux-2.6.25.12.tar.bz2

Page 103: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Etapa 3Kernelul foloseste un fisier de configurare numit .config. Acesta se numeste "kernel

configuration starting point". La acest pas copiem fisierul de configurare .config al kernelului care ruleaza in directorul cu sursele kernelului abia downloadat si care se doreste a fi compilat.

Fisierul .config pentru kernelul care ruleaza se gaseste cel mai probabil in directorul /usr/src/kernels/VERSIUNE_KERNEL_CARE_RULEAZA sau in directorul /boot

NotaPe Fedora Core 9 fisierul de configurare al kernelului care ruleaza este /boot/config2.6.25-14.fc9.i686 pentru versiunea 2.6.25.14

NotaCompilarea unui nou kernel presupune pornirea de la o baza de facilitati si anume cele oferite de kernelul care ruleaza. Practic pentru noul kernel adaugam facilitati noi sau renuntam la facilitati in raport cu "running kernel". Acesta este motivul pentru care avem nevoie de .config al kernelului care ruleaza.

Daca .config nu exista in directoarele specificate mai sus, se poate downloada un kernel in format RPM pentru distributia si arhitectura respectiva si i se foloseste fisierul .config.

Fisierul de configurare al kernelului este format din optiunile care vor fi incluse in kernel, una pe cate o linie urmate de y (yes) daca se compileaza in imaginea kernelui sau m daca se compileaza ca modul.

Exemplu1. cp /boot/config-2.6.25-14.fc9.i686 /home/dan/linux-2.6.25.12 2. cd /home/dan/linux-2.6.25.123. mv config-2.6.25-14.fc9.i686 .config

Etapa 4Executam comanda: make oldconfigAtentie ! Aceasta comanda precum si urmatoarele se executa din directorul cu sursele kernelului.

Rularea comenzii determina aparitia unei interfate text care foloseste fisierul de configurare de la kernelul vechi ( .config) pe care il modifica astfel incat sa introduca noile optiuni din kernelul nou care se compileaza, in vechiul fisier de configurare.

Etapa 5Executam comanda: make menuconfig

Comanda make gconfig reprezinta o alternativa grafica la make menuconfig

Page 104: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Rularea comenzii determina aparitia unei interfete text sau grafice pentru a alege optiunile ce vor fi incluse in kernel la compilare.

Important Acesta este momentul in care trebuie sa adaugam optiunile pe care le dorim in

kernel, sa le scoatem pe cele in plus etc. Pentru compilarea kernelului in cele mai optime conditii este nevoie de o cunoastere foarte buna a hardware-ului hostului.

Etapa 6Executam comanda: make

In acest moment are loc compilarea kernelului si a modulelor, rezultand imaginea comprimata a acestuia numita bzImage. Aceasta operatie poate sa dureze mult (1-2 ore).

Etapa 7Executam: cp System.map /boot/System.map-2.6.25.12ln -sf /boot/System.map-2.6.25.12 /boot/System.map

Un simbol reprezinta un nume de variabila sau un nume de functie. System.map reprezinta un tabel cu echivalenta dintre numele simbolurilor si adresele acestora din memorie si este folosit de kernel.

Etapa 8Executam: make modules_installComanda de mai sus instaleaza modulele. Etapa 9 Executam: cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.25.12In functie de arhitectura directorul x86 poate sa fie i386.

bzImage vine de la "big zImage" - Imagine kernelului comprimata cu algoritmul zlibCu toate ca numele nu este important, prin conventie se foloseste denumirea de

vmlinuz sau bzImage pentru imaginea binara comprimata a kernelului.

NotaIntreg kernelul se gaseste intr-un singur fisier si anume fisierul bzImage sau vmlinuz. Sursele kernelului nu mai sunt necesare si pot fi sterse.

Etapa 10 Executam: /sbin/mkinitrd /boot/initrd-2.6.25.12.img 2.6.25.12 pentru

RedHad/Fedora/SuSE sau mkinitramfs -o /boot/initrt-2.6.25.12.img 2.6.25.12 pentru Ubuntu/Kubuntu/etc

Exemplu: Se doreste suport pentru RAID, LVM sau SATA sau pentru alte functionalitatilow level. Comanda de mai sus creaza un RAM Disk care contine modulele necesare la butarea sistemului.

Page 105: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

NotaPrimul argument al comenzii mkinitrd este fisierul de tip RAM Disk care se va crea. Al doilea argument si anume 2.6.25.12 este numele directorului din /lib/modules in care se gasesc modulele noului kernel. Automat in fata argumentului 2 se pune /lib/modules/

Etapa 11 Se modifica bootloaderul si anume grub.conf pentru a adauga noul kernel.

NotaKernelul compilat nu este inca folosit de sistem. Acesta va fi folosit doar dupa restartarea calculatoruliu si alegerea sa din lista de kernele din meniul Grub. Referirea la vechiul kernel din grub.conf NU se sterge !

ImportantPosibilitatea ca sistemul sa nu mai buteze datorita unei erori sau datorita lipsei unei

optiuni incluse in kernel este destul de mare. Este extrem de important sa nu stergem vechiul kernel (cel butabil) pentru a buta cu el in caz de nevoie. Eroarea fatala care poate sa apara este KERNEL PANIC.

Capitolul 3 - Serverul DHCP

3.1 Protocolul DHCP

Protocolul DHCP (Dynamic Host Configuration Protocol) este definit in RFC2131 si se foloseste pentru configurarea automata a placii de retea (IP, Network Mask, Default Gateway, DNS Servers etc).

DHCP ruleaza client-server, serverul fiind acela care inchiriaza o anumita configuratie clientului pentru o anumita perioada de timp numita "lease time".

NotaDHCP este urmasul protocolului BOOTP.

Toate sistemele de operare moderne includ un client de DHCP. Cel mai folosit server DHCP OpenSource este cel de la ISC (Internet System Consortium).

Page 106: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

DHCP - mod operare

Comunicatia dintre client si server se imparte in 4 faze distincte si anume exista 4 tipuri de mesaje care se schimba intre client si server.

1. DHCP DiscoveryClientul trimite DHCP Discovery folosind IP destinatie de tip "limited broadcast" si

anume 255.255.255.255 iar ca IP sursa 0.0.0.0 Se foloseste protocolul UDP. Clientul utilizeaza portul 68, iar serverul 67. Acestea nu trebuie sa fie filtrate de vreun firewall.

IP Sursa=0.0.0.0IP Destinatie=255.255.255.255Port Sursa=68Port Destinatie=672. DHCP Offer

Serverele DHCP (pot exista mai multe intr-un LAN) care au primit DHCP Discovery raspund cu un mesaj numit DHCP Offer in care ofera clientului o anumita configuratie (IP, Masca, DG, DNS etc). Configuratia poate fi statica, stabilita apriori de catre administrator in functie de MAC.

IP Sursa=Server_IPIP Destinatie=255.255.255.255Port Sursa=67Port Destinatie=68

3. DHCP Request Clientul alege o oferta (daca exista mai multe servere de la care a primit) trimitand

un pachet numit DHCP Request - in general pe prima primita - si trimite un broadcast in care isi face cunoscuta alegerea. In pachet se gaseste IP-ul serverului ales astfel incat toate celelalte servere sa cunoasca alegerea clientului si sa elibereze oferta facuta in caz ca nu a fost aleasa de client.

IP Sursa=0.0.0.0

Page 107: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

IP Destinatie=255.255.255.255Port Sursa=68Port Destinatie=67

4. DHCP AcknowledgmentServerul ales trimite DHCPACK clientului in care precizeaza "lease time" precum

si alte informatii necesare.

IP Sursa= DHCP_Server_IPIP Destinatie=255.255.255.255Port Sursa=67Port Destinatie=68

NotaIn momentul in care "lease time" pentru oferta primita expira, clientul trebuie sa reinnoiasca configuratia de la server. Acesta trimite doar DHCP Request pentru aceiasi configuratie, iar serverul raspunde cu DHCP ACK.

ImportantPentru o buna intelegere a protocolului DHCP se recomanda: a) citirea RFC2131 care reprezinta de fapt documentatia oficiala.b) pornirea unui sniffer precum Wireshark sau tcpdump si urmarirea modului de comunicatie dintre client si server.

3.2 Compilare si instalare server

ISC este o organizatie non-profit al carei scop este dezvoltarea de software pentru Internet. Cele mai cunoscute aplicatii sunt serverul DNS numit BIND si serverul DHCP. Ambele sunt si cele mai folosite servere de DNS respectiv de DHCP OpenSource. ISC DHCP reprezinta o suita de programe (dhcp daemon, dhpc client si dhcp relay agent) care implementeaza toate aspectele protocolului DHCP definit in RFC2131.

Pasi de urmat: 1. Download sursele ultimei versiuni ISC DHCP de pe site-ul producatoruluiwww.isc.org

Se ruleaza: wget -c http://ftp.isc.org/isc/dhcp/dhcp-3.0.7.tar.gz

2. Verificare integritate arhiva tar.gz folosind hash-ul sau semnatura digitala (Optionaldar foarte recomandat)

3. Decomprimare si dezarhivare arhivaSe ruleaza: tar -xzvf dhcp-3.0.7.tar.gz

Page 108: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

4. Rularea scriptului configure care verifica sistemul si anume daca acesta contine toate componentele necesare compilarii si instalarii serverului DHCP. Se ruleaza: ./configure

NotaInstalarea prin compilare a serverului DHCP este atipica datorita faptului ca nu se pot transmite parametri scriptului configure si deci nu se poate instala serverul intr-un anumit director sau compila cu anumite optiuni speciale.

5. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat. In urma compilarii rezulta din fisierele sursa fisiere executabile.Se ruleaza: make

6. InstalareInstalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii in directoarele corespunzatoare precum /sbin/, /usr/bin etc. Comanda poate fi executata doar de root.Se ruleaza: make install

3.3 Configurare server

Ca si in cazul celorlalte servere configurarea serverului dhcp presupune editarea catorva fisiere text de configurare.Serverul ISC DHCP foloseste 2 fisiere:1. In fisierul /var/state/dhcp/dhcpd.leases se pastreaza informatii despre configuratiile inchiriate deja clientilor, leased time pentru fiecare etc

NotaDupa instalarea serverului prin compilare acest fisier nu exista. El trebuie creat manual altfel serverul nu porneste.Se ruleaza: touch /var/state/dhcp/dhcpd.leases

2. Fisierul de configurare al serverului care este by default /etc/dhcpd.conf

Exemplu /etc/dhcpd.conf authoritative; #(diez) reprezinta un comentariu

Page 109: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

ddns-update-style interim; #interim sau none. DHCPD face update la fisierul zona al clientului de pe serverul DNS #ignore client-updates; #allow client-updates; #vezi man dhcpd.conf subnet 192.168.0.0 netmask 255.255.255.0 { #stabileste subnetul pentru care va furniza servicii range 192.168.0.50 192.168.0.60; #range-ul de IP furnizat range 192.168.0.100 192.168.0.120; #un al doilea range #allow unknown-clients; default-lease-time 600; #lease time default daca clientul nu cere un anumit timp max-lease-time 7200; #max lease time option routers 192.168.0.1; option subnet-mask 255.255.255.0; option domain-name-servers 193.231.236.25,193.231.236.30; option domain-name "crystalmind.ro"; host pc1 { hardware ethernet 00:03:47:F6:B0:44; fixed-address 192.168.0.125; option routers 192.168.0.10; #primeste Default Gateway diferit } }

Detalii fisier dhcpd.conf:- fiecare linie se termina cu ";" (punct si virgula) - sintaxa este extrem de sensibila, orice caracter precum ; (punct si virgula) lipsa reprezinta o eroare fatala; - semnul "#" (diez) inseamna un comentariu; - subnet 192.168.0.0 netmask 255.255.255.0 - se stabileste subnetul din care serverul va furniza IP-uri - range 192.168.0.50 192.168.0.60; - se stabileste range-ul din care serverul va funiza IP uri. In exemplul nostru primul client va primi 192.168.0.50, al doilea 192.168.0.51 etc. Pot exista mai multe directive range. Atentie ! Ip-urile setate static pe alte hosturi trebuie excluse; - option routers 192.168.0.1; - stabileste Default Gateway oferit clientilor; - option subnet-mask 255.255.255.0; - stabileste masca retelei oferite clientilor - option domain-name "crystalmind.ro"; - stabileste un domeniu care va fi oferit clientilor, acestia facand parte din el; - daca se doreste furnizarea unei configuratii in functie de MAC-ul clientului, pentru FIECARE astfel de client in fisierul de configurare al serverului si anume dhcpd.conf trebuie sa apara un container de tip host in care se specifica MAC-ul precum si configuratia

Page 110: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

oferita. Daca nu se specifica un anumit parametru (exemplu servere DNS), clientul respectiv va primi serverele DNS specificate in sectiunea globala; - allow unknown-clients; - specifica daca serverul va oferi configuratie clientilor al caror MAC nu se gaseste intr-un container de tip host;

Pornire serverRuleaza serverul in foreground cu trimiterea mesajelor de debug la consoladhcpd -d -f

Optiuni dhcpd:-cf file.conf #specificarea unui fisier de configurare alternativ-p port #specifica un alt port pe care sa asculte serverul. By default foloseste portul UDP 67.-t #testeaza fisierul de configurare fara a porni serverul.

NotaPornirea serverului in modul Debug are loc doar dupa instalare sau in perioade de teste pentru a observa modul de comunicatie al acestuia cu clientii. Pe un server stabil, serverul DHCP trebuie sa porneaza automat la butare folosind fisierele de management al serviciilor (/etc/inid.d/). In cazul compilarii, fisierul care porneste serverul nu exista si trebuie creat. Pentru detalii citeste capitolul "Managementul serviciilor" din cursul "Linux Basic Administration" oferit de asemenea online.

Clientul DHCP pe LinuxProgramul se numeste dhclient si se gaseste cel mai probabil in /sbin. Foloseste fisierulde configurare /etc/dhclient.confUtilizare:Activeaza modul de configurare al interfetei prin DHCP dhclient nume_interfataExemplu: /sbin/dhclient eth0

Returneaza serverului configuratia primitadhclient -r nume_interfataExemplu: dhclinet -r eth0

Fisierul /var/lib/dhcp/dhclient.leases este folosita de dhclient pentru a tine evidenta configuratiilor primite.

La pornire dupa ce citeste /etc/dhclient.conf, dhclient citeste /var/lib/dhcp/dhclient.leases

Nota

Page 111: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Numele interfetei si anume eth0 poate sa difere de la caz la caz. Acesta se afla cucomanda ifconfig.

Capitolul 4 - Serverul FTP

4.1 Protocolul FTP

FTP (File Transfer Protocol) este un protocol de nivel aplicatie OSI care foloseste TCP la nivelul transport si se foloseste pentru a transfera fisiere intre 2 hosturi, client si server. Protocolul FTP este definit in RFC959.

Server de FTP = calculator pe care ruleaza un program numit server de FTP (Linux: ProFTP, Pure-FTP, Windows: BulletProofFTP, CureFTP etc)

Client de FTP = calculator pe care este instalat un program care se conecteaza la serverul de FTP (Linux: gftp, Krusader Windows: Total Commander, FTP Commander etc)

Orice sistem de operare (Windows, Linux, Unix, *BSD) include un client ftp in linie de comanda. Acesta este comanda ftp. Exista si se prefera a se folosi clienti de FTP in modul grafic.

Page 112: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

FTP este un protocol considerat complex ca mod de operare si asta fiindca foloseste mai multe canale de comunicare si doua moduri de operare complet diferite (modul pasiv si modul activ).

FTP foloseste un canal de comunicare pentru control sau comenzi specifice protocolului (portul 21) si un canal pentru transferul datelor (portul 20 pentru FTP active sau un alt port pentru FTP pasive). Deci orice conexiune FTP presupune 2 etape:a) conectarea la server folosind portul de control (21)b) conectarea folosind portul de date (in functie de modul de operare poate fi sau nu portul 20) ImportantIntreaga comunicatie dintre client si server se realizeaza in cazul FTP in clar necriptat. Orice dispozitiv intermediar sau host din LAN care ruleaza un atack gen ARP Spoofing poate intercepta informatia schimbata intre client si server.

4.2 Moduri de operare

Protocolul FTP include 2 moduri diferite de operare: activ si pasiv.

Page 113: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

FTP activ Caracteristica generala a acestui mod este ca in prima etapa clientul se conecteaza la server la portul 21 pentru a schimba comenzi folosind un port aleator mai mare ca 1023, iar apoi serverul devine activ si se conecteaza el la client pentru a schimba date cu acesta. Deci in etapa 2 se poate spune ca serverul a devenit client, iar clientul server.

Etape: 1. Clientul se conecteaza la server la portul destinatie 21 (portul de comanda) folosind portul sursa N (N > 1023). Clientul trimite serverului comanda PORT N+1 si incepe sa asculte pe portul N+1 pentru conexiuni de date. 2. Serverul trimite ACK la client pentru portul de comanda de la pasul anterior.3. Serverul se conecteaza la client folosind ca port sursa portul 20 (port date) iar ca port destinatie N+1 (portul de date al clientului) trimis anterior de client.4. Clientul trimite ACK serverului pentru pasul 3.

Din punctul de vedere al clientului conexiunea serverului de la punctul 3 este vazuta ca o conexiune din exterior si este de cele mai multe ori blocata de orice firewall (inclusiv firewall standard din Windows). Clientii care se afla in spatele unui Router si folosesc NAT nu pot folosi de multe ori modul activ fiindca conexiunea serverului de la pasul 3 nu poate trece de router catre client.

Concluzie: Modul activ este extrem de dezavantajos pentru client, dar este avantajos pentru server.

FTP pasiv Reprezinta o alternativa la modul activ si anume permite clientilor care se afla in

spatele unui Router si fac NAT sa se conecteze la server. Clientii cu firewall pot de asemenea folosi modul pasiv. Aceasta este modalitatea folosita in majoritatea cazurilor. Caracteristica genera a modului pasiv este ca atat pentru sesiunea de control cat si pentru sesiunea de date clientul este cel care initializeaza conexiunea. Serverul asculta pe portul 21 pentru control dar nu mai exista portul 20 pentru date.

Etape: 1. Clientul deschide 2 porturi: N si N+1 si se conecteaza la server folosind portul sursa N (N>1023) si portul destinatie 21. In loc sa trimita comanda PORT ca in cazul FTP activ,

Page 114: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

trimite comanda PASV prin care anunta serverul ca este pregatit pentru modul pasiv.2. Serverul deschide portul M ( M > 1023) si-l trimite clientului pentru ca acesta sa se conecteze la portul M folosind portul sursa N+1 pentru a transfera date.3. Clientul se conecteaza la portul destinatie M folosind portul sursa N+1.4. Server trimite ACK clientului.

Concluzie: Modul pasiv este avantajos pentru client, dar este complet dezavantajos pentru server. Acesta trebuie sa deschida porturile mai mari ca 1023 pentru a se conecta clientul la acestea.

4.3 Compilare si instalare server

Cele mai cunoscute si folosite servere de FTP pe Linux sunt ProFTPD si PureFTP. In exemplul acestui curs vom instala si configura serverul ProFTPD.

Instalarea prin compilare a ProFTPD se realizeaza in mod standard fara probleme deosebite. Exemplu de mai jos s-a realizat pe Fedora Core 9. In mod IDENTIC se compileaza si instaleaza pe orice distributie Linux.

Pasi de urmat: 1. Download sursele ultimei versiuni ProFTPD de pe site-ul producatorului www.proftpd.org. Acestea pot fi downloadate in orice director din sistem. wget -c ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz2. Verificare integritate arhiva tar.gz folosind hash-ul sau semnatura digitala (Optional dar foarte recomandat)3. Decomprimare si dezarhivare arhiva Se ruleaza: tar -xzvf proftpd-1.3.1.tar.gz4. Rularea scriptului configure care verifica sistemul si anume daca acesta contine toate componentele necesare compilarii si instalarii serverului ProFTPD. Dorim instalarea in directorul /opt/proftpd astfel incat sa putem urmarii si studia toate componentele cu care vine serverul. Se recomanda rularea scriptului configure de catre un user neprivilegiat. Se ruleaza din directorul cu surse: ./configure --prefix=/opt/proftpd

NotaFara optiunea --prefix=/opt/profptd instalarea are loc in directoarele standard precum /usr/bin, /usr/sbin, /etc. In acest caz ne va fi greu sa gasim fisierele componente ale serverului sau sa-l dezinstalam/stergem.

5. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat.In urma compilarii rezulta din fisierele sursa fisiere executabile.Se ruleaza: make6. InstalareInstalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii din directorul cu surse in directorul dorit ( /opt/proftpd). Comanda poate fi executata doar de root.Se ruleaza: make install

Page 115: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

4.4 Configurare minimala server

Fisierul de configurare al serverului ProFTPD este proftpd.conf Acesta este format din directive si valorile acestora care stabilesc modul in care serverul functioneaza.

Exemplu: proftpd.conf #serverul asculta pe portul 21 pentru conexiuni de control Port 21

Se recomanda pornirea de la un "schelete" de fisier de configurare care se modifica in functie de necesitati. O astfel de mostra este /opt/proftpd/proftpd.conf. Aceasta nu contine toate directivele de configurare ci doar pe cele mai importante.

Configurarea minimala a serverului ProFTPD presupune:

1. Crearea unui user si a unui grup sub care sa ruleze serverul.Fisierul default de configurare cu care vine serverul si anume /opt/proftpd/proftpd.conf in cazul compilarii in directorul /opt/proftpd specifica faptul ca acesta ruleaza ca user nobody si grup nogroup. Acest user si grup sunt folositi in mod default de multe servere ceea ce duce la probleme de securitate.

Exemplu: In cazul in care exista un server Apache si un server Proftpd care ruleaza ca nobody si nogroup, iar serverul Apache este compromis, crackerul va avea acces total si la serverul Proftpd fiindca ruleaza sub acelasi user.

Important Din punct de vedere al securitatii sistemului este obligatoriu ca fiecare server sa ruleze sub propriul user si group, iar acestea sa nu mai fie folosite in alt scop.

proftpd.conf # Set the user and group under which the server will run. User ftpuser Group ftpgroup

2. Stabilirea modului de acces la sistemul de fisiere a unui utilizator odata logat.Trebuie stabilit daca acesta este blocat (chrooted/jailed) in propriul home directory sau se poate "plimba" in mod liber prin tot sistemul de fisiere.Directiva DefaultRoot NUME_DIRECTOR stabileste directorul in care un user odata logat este plasat. Pentru respectivul utilizator radacina sistemului de fisiere este NUME_DIRECTOR. Acesta nu poate iesi din director.

proftpd.conf

Page 116: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

DefaultRoot ~

ImportantDefault directiva DefaultRoot este comentata ceea ce inseamna ca un user conectat prin ftp la server poate iesi din propriul home directory si se muta in orice director din sistemul de fisiere.

3. Activare/dezactivare modul anonymous Protocolul FTP face referire la un mod special si anume modul anonymous. Acesta se foloseste in momentul in care se doreste logarea userilor fara autentificare.

Exemplu: downloadarea serverului ProFTPD s-a realizat prin FTP. Clientul de FTP s-a conectat la serverul FTP pe care se gaseau sursele logandu-se anonim (fara username sauparola). De multe ori username-ul introdus este anonymous iar parola o adresa de e-mail.

Fisierul sample profptd.conf face referire la sfarsitul sau la modul anonymous. Daca se doreste dezactivarea acestui mod (de recomandat daca nu este un server public) trebuie comentata intreaga sectiune.

Detalii sectiune anonymous din proftpd.conf Specifica directorul home al userilor anonimi. Acesta poate fi modificat, dar atentie la permisiunile pentru acel director. <Anonymous /var/ftp>

Specifica userul care se va loga anonim. Acesta este ftp sau anonymous (directiva UserAlias) User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp

Limit the maximum number of anonymous logins MaxClients 10

4. Alte configuratii a) specificarea porturilor pasive pe care le va folosi serverul. Default acesta poate trimite clientului care doreste folosirea modului pasiv orice port mai mare ca 1023 pentru ca acesta sa se conecteze la server la portul trimis. Se recomanda limitarea intervalului de porturi pasive folosite.PassivePorts 49152 65534b) modificare umask si anume pentru stabilirea permisiunilor default cu care se creaza noile fisiere si directoare. Umask 0022 c) modificare umask doar pentru un anumit director. <Directory ~/test> umask 0066 0077 </Directory>

Page 117: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

d) Dezactivare logarii userului root. Se recomanda din considerente de securitate. RootLogin off

Exemplu configuratie completa server proftpd:

server asculta pe portul tcp/21 pentru conexiuni pentru sesiunea de control (default); serverul ruleaza sub userul ftpuser si ftpgroup; fiecare user conectat si autentificat la server este "jailed" sau izolat in propriul home directory; nr. maxim de conexiuni concurente este 10; modul anonymous este dezactivat; autentificarea userilor are loc pe baza informatiilor din /etc/passwd si /etc/shadow; porturile pasive folosite de server sunt doar cele din intervalul 49152-49172; login-ul userului root nu este permis;

Exemplu proftpd.conf complet:

ServerName "ProFTPD Default Installation" ServerType standalone DefaultServer on # Port 21 is the standard FTP port. Port 21 # Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. Umask 022 # To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd). MaxInstances 10 # Set the user and group under which the server will run. User ftpuser Group ftpgroup # To cause every FTP user to be "jailed" (chrooted) into their home # directory, uncomment this line. DefaultRoot ~ # Normally, we want files to be overwriteable. AllowOverwrite on # Bar use of SITE CHMOD by default <Limit SITE_CHMOD> DenyAll </Limit> # stabilirea umask pentru directorul test din home directory al userului

Page 118: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

# care se conecteaza pentru fisiere respectiv directoare <Directory ~/test> umask 0066 0077 </Directory> #Porturile pe care le deschide serverul pentru conexiuni pasive (default sunt porturile mai mari ca 1023) PassivePorts 49152 49172 #Important ! Fara urmatoarele 2 directive serverul ar putea incerca rezolvarea inversa a IP-ului clientului #care se conecteaza ceea ce duce la delay foarte mare la conectare UseReverseDNS off IdentLookups off RootLogin off # A basic anonymous configuration, no upload directories. If you do not # want anonymous users, simply delete this entire <Anonymous> section. #<Anonymous ~ftp> # User ftp # Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # Limit the maximum number of anonymous logins # MaxClients 10 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. # DisplayLogin welcome.msg # DisplayChdir .message # Limit WRITE everywhere in the anonymous chroot # <Limit WRITE> # DenyAll # </Limit> #</Anonymous>

4.5 Configurare avansata server

4.5.1Modalitati de autentificare

ProFTPD poate folosi 5 modalitati diferite de autentificare a userilor care se logheaza la server. Acestea sunt:

1) mod_auth_unix Este metoda default si se foloseste schema clasica de autentificare din Unix/Linux. Userii care se conecteaza la server sunt cei definiti in / etc/passwd, grupurile sunt cele din /etc/group, iar informatiile de autentificare sunt cele din /etc/passwd si /etc/shadow

Page 119: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2) mod_auth_file Se foloseste un alt fisier, diferit de /etc/passwd sau /etc/group in care se gasesc userii si parolele acestora. Acestia se numeste si useri virtuali.

3) mod_ldap Se folosesc informatii din LDAP Directories (Lightweight Directory Access Protocol).

4) mod_radius Se foloseste un server RADIUS (Remote Authentication Dial In User Service ) pentru autentificare.

5) mod_sql Informatiile despre utilizatori sunt pastrate intr-o baza de date MySql.

5.2 Virtual Users

Modalitatea default de autentificare la serverul FTP este cea folosind un username definit in /etc/passwd si parola din /etc/shadow.

Pentru un server cu putine conturi aceasta varianta de autentificare este optima, dar in cazul unui server pe care se gasesc sute de conturi ( Exemplu: un server dedicat de hosting) varianta clasica de autentificare nu mai este scalabila si nici optima.

Pentru fiecare cont FTP dintre cele cateva sute, ar trebui creat un cont de sistem identificat prin username, parola dar si un intreg mediu de lucru (home directory, variablede mediu precum PATH, shell default etc). Userii respectiv sunt folositi doar pentru conectarea la serverul FTP, nu se doreste autentificarea acestora la server prin ssh, logarea acestora printr-o consola etc.

Solutia este folosirea de useri virtuali numiti si "FTP only users". Acestia nu exista in sistem ci sunt folositi doar de FTP.

Variantele cele mai folosite pe care le avem la dispozitie ar fi: mod_sql si anume informatiile despre useri sa gasesc intr-o baza de date mysql si mod_auth_file caz in care informatiile despre useri se gasesc in fisiere speciale altele decat /etc/passwd si /etc/shadow. Configurarea ProFTPD pentru useri virtuali folosind mod_auth_file

Etape:

1. Editare proftpd.conf pentru folosire useri virtuali #specificarea fisierului cu userii virtuali. Acesta nu exista si va trebui creat. Poate fi folosit orice nume AuthUserFile /opt/proftpd/etc/passfile #specificarea fisierului cu grupurile virtuale. Acesta nu exista si va trebui creat. Poate fi folosit orice nume AuthGroupFile /opt/proftpd/etc/grpfile #ordinea in care proftpd incearca sa autentifice userii.

Page 120: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

AuthOrder mod_auth_file.c mod_sql.c mod_auth_unix.c #userii care se autentifica la server nu sunt useri de sistem si deci nu necesita shell valid RequireValidShell off

2. Crearea fisierelor in care se gasesc userii si grupurile si crearea conturilor virtuale(username+parola+grup la care apartine user)Pentru a creare useri/grupuri virtuale se foloseste un script in perl numit ftpasswd. Acesta se gaseste in directorul contrib din directorul cu sursele serverului (in exemplul nostru este /home/dan/proftpd-1.3.1/contrib).

Exemplu de folosire ftpasswd:

a) Creare user virtual numit tom cu uid 1003 si fara shell valid /home/dan/proftpd-1.3.1/contrib/ftpasswd --passwd --file=/opt/proftpd/etc/passfile – name=tom --uid=1003 --home=/opt/proftpd/tom --shell=/bin/false

b) Creare grup virtual numit programatori cu gid 1000/home/dan/proftpd-1.3.1/contrib/ftpasswd --group --name=programatori --gid=1000 – member=bob --member=tom --file /opt/proftpd/etc/grpfile

c) Schimbare parola user virtual./home/dan/proftpd-1.3.1/contrib/ftpasswd --passwd --name=bob --change-password – file=/opt/proftpd/etc/passfile

Se poate folosi orice ID pentru userii virtuali, doar ca este bine sa fie diferit (nu obligatoriu) de ID-urile userilor din /etc/passwd pentru a pastra diferite nivele de securitate. Daca avem acelasi UID, userii din /etc/passwd vor avea aceleasi drepturi.

ImportantFisierul cu useri virtuali si anume cel definit de directiva AuthUserFile trebuie sa poata fi citit doar de userul care ruleaza daemonul proftpd. Default fisierul nu exista dar este creat la prima rulare a comenzii ftpasswd

3. Setare permisiuni useri virtuali Userul virtual nu va avea acces la propriul home directory cel definit la crearea sa fiindca sistemul verifica in /etc/passwd owner-ul, iar userul virtual nu exista in /etc/passwd. Pentru aceasta se foloseste comanda chown care ia drept argument uid-ul userului virtual pentru a schimba ownerul directorului home al userului virtual. UID-ul ownerului unui director se vizualizeaza cu comanda ls -n

NotaPentru folosirea diferitelor moduri de autentificare precum mod_sql, mod_ldap sau mod_radius, serverul trebuie sa fi fost compilat cu suport pentru acestea.

Page 121: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Capitolul 5 - NFS - Network File System

5.1 Prezentare generalaNFS (Network File System) reprezinta un protocol dezvoltat initial de Sun

Microsystems in 1984 care permite accesarea de resurse (file sharing) intre calculatoarele dintr-o retea. Exista mai multe versiuni, ultima fiind 4 care a fost standardizata de IETF in RFC 3530.

NFS ruleaza pe arhitectura client-server, astfel serverul este hostul care ofera resurse si anume unul sau mai multe directoare al caror continut poate fi accesat de pe alte hosturi numite clienti. Clientii monteaza local directoarele shared de pe server. NFS se foloseste de RPC (Remote Procedure Call). RPC reprezinta o modalitate prin care se pot rula functii si metode low-level de catre un host, remote prin retea pe un alt host.

ExempluPresupunem ca un host client monteaza directorul /backup de pe un server NFS. Pentru a putea modifica, sterge sau crea fisiere in directorul /backup (care se gaseste pe un alt host) clientul trebuie sa ruleze functii precum fread(), fwrite(), fopen() etc pe server unde se gasesc fisierele. RPC realizeaza acest aspect.

5.2 Configurare

Configurarea NFS presupune:

1. Pe server a) Daemonul nfsd trebuie sa ruleze. b) Procesul portmap sau rpcbind (in functie de distributie) trebuie sa ruleze. Pentru a obtine informatii despre rpcbind se ruleaza comanda: rpcinfo -p c) Fisierul /etc/exports stabileste accesul la resurse. Acesta contine o lista de directoare ce pot fi exportate in retea precum si permisiunile cu care acestea pot fi montate local de catre clienti.

Fisierul /etc/exports face referire la cate un director pe fiecare linie. Structura sa este: dir_to_export host_allowed_to_mount(option1,option2,option3) unde dir_to_export este directorul care se doreste a fi exportat, host_allowed_to_mount reprezinta IP-ul hostului client care are permisiunea sa monteze directorul, iar cele mai folosite optiuni sunt: ro, rw, root_squash si no_root_squash

Detalii:ro -> directorul se monteaza read/only pe client;rw -> directorul se monteaza read/write pe client;root_squash -> userul root de pe client nu va avea drepturi de root in sistemul de fisiere remote;

Page 122: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

no_root_squash -> userul root pe client are drepturi de root si pe sistemul remote care se monteaza local;

Exemplu /etc/exports: /home/shared 192.168.0.2(rw,no_root_squash) /backup 192.168.0.1(rw,no_root_squash) /home/projects 192.168.0.0/24(ro,root_squash)

d) Se ruleaza comanda exportfs -a care exporta toate directoarele specificate in /etc/exports.

2. Pe client Se monteaza directorul remote astfel: mount -t nfs 192.168.0.1:/shared_dir /mnt,

unde 192.168.0.1 este IP-ul serverului NFS.

NotaDaca se doreste montarea automata la butare pe client se modifica fisierul /etc/fstab adaugand linia de mai sus.

ImportantComunicatia dintre client si server se realizeaza in cazul NFS in clar. Nu se recomanda montarea de directoare remote peste Internet folosind NFS din motive de securitate !

Capitolul 6 Serverul DNS

6.1 Protocolul DNS6.1.1 Spatiul de nume DNS

DNS - Domain Name System - reprezinta un protocol la nivelul aplicatie (layer 7) al modelului de referinta OSI care are drept scop principal translatarea numelor de domenii in adrese logice sau IP. Acesta este definit de IETF intr-o serie de RFC-uri.

NotaDNS reprezinta un acronim care inseamna "Domain Name System" si NU "Domain Name Server"

Page 123: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Protocolul DNS cuprinde un ansamblu de concepte si programe printre care:

1. Spatiul de nume DNS2. Servere DNS3. Clienti DNS sau DNS Resolver

Spatiul de nume DNS reprezinta ansamblul de nume DNS. Acest spatiu are o structura arborescenta asemanatoare cu structura sistemului de fisiere din Linux. Fiecare nume de domeniu complet reprezinta o cale in acest arbore inversat numit spatiul de nume. IANA este organizatia care se ocupa de alocarea si managementul numelor de domenii.

ImportantSpatiul de nume DNS este unic in Internet asa cum un IP public este de asemenea unic. Nu pot exista 2 sau mai multe domenii identice.

In varful arborelui se gaseste domeniul radacina (root). Acesta se reprezinta printr-un punct ("."). Urmeaza pe urmatorul nivel domenii generice numite TLD (Top Level Domains).

Exemplu: com, net, org, biz, ro, de , fr, eu, bg etc.

Page 124: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Fiecare nod al arborelui are o eticheta (label) - cu exceptia root - formata din maximum 63 de caractere fara punct (litere, cifre si semnul minus "-"). Underscore nu este permis. Fiecare nod poate fi la randul sau radacina pentru un subarbore al arborelui general.

DefinitieUn nume complet se numeste FQDN (Fully Qualified Domain Name) si se

specifica de la frunza pana la radacina "." (punct) care trebuie specificata.

Exemplu: www.invata-online.ro. sau mail.yahoo.com. sau calendar.google.com.

6.1.2 Delegare

Fiecare domeniu se gaseste in administrarea unei organizatii.Exemplu: Domeniul yahoo.com se gaseste sub administrarea lui Yahoo, domeniul invataonline.ro se gaseste sub administrarea organizatiei Crystal Mind Academy etc.

O organizatie cumpara sau inchiriaza un domeniu la fel ca pe o adresa IP publica. O organizatie care administreaza un domeniu poate sa-l imparta in subdomenii si sa delege administrarea acestora catre alte organizatii. Delegarea de autoritate presupune ca pentru noul domeniu toate informatiile despre translatarea acestuia in adrese IP se afla in grija organizatiei catre care se face delegare.

Impartirea unui domeniu in subdomenii presupune crearea de noduri sub nodul principal. Aceasta impartire se gaseste la libera dorinta a organizatiei care detine domeniul.

Exemplu: Domeniul test.com poate fi impartit in subdomenii in urmtorul mod:www.test.com, login.test.com, mail.test.com, linux.test.com etc

Nu este obligatoriu ca intreg domeniul sa fie delegat ci doar subdomenii din acesta.

ExempluSubdomeniul cursuri.crystalmind.ro se poate gasi in administrarea unei companii, examene.crystalmind.ro se poate gasi in administrarea unei alte companii iar crystalmind.ro poate fi sub autoritatea unei alte organizatii. Compania care detine crytalmind.ro a delegat autoritatea catre celelalte pentru subdomeniile respective.

Cine deleaga autoritatea pentru un domeniu, al cui este domeniul?

Domeniul din varful arborelui DNS si anume root reprezentat prin punct "." apartine lui IANA. Aceasta a delegat autoritatea catre domeniile TLD ( ro, de, uk, com, net, biz etc) catre alte organizatii.

Exemplu: Domeniul ro se afla sub autoritatea ROTLD, domeniul de se afla sub autoritatea DENIC, domeniul eu se afla sub autoritatea NICEU etc.

Page 125: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Faptul ca domeniul ro se afla sub autoritatea ROTLD presupune ca doar ROTLD poate sa creeze subdomenii ro si sa delege autoritatea. In momentul in care dorim sa cumparam un domeniu ro precum invata-linux.ro trebuie sa facem cererea la ROTLD si sa indicam numele si IP-ul serverului care va fi autoritativ pentru noul domeniu. Acest server poate fi orice calculator conectat la internet care ruleaza un server DNS. Acesta va face translatiile in IP si din IP pentru respectivul domeniu.

Ca proprietari ai domeniului invata-linux.ro putem crea subdomenii in numar nelimitat precum www.invata-linux.ro sau login.invata-linux.ro, iar o parte din acestea pot fi date in administrarea unei alte companii (delegare de autoritate).

NotaDomeniile ro se inchiriaza pe timp nelimitat de la ROTL, iar pretul unui domeniu este de circa 50$. Marea majoritate a restului de domenii precum com, biz, net, org, eu etc se inchiriaza pe o perioada de un an, iar pretul unui domeniu este de circa 10$.

6.1.3 Servere DNS

Prin procesul de delegare un server DNS este responsabil doar cu o parte din spatiul de nume si nu cu intreg domeniul. Astfel un domeniu poate fi imprastiat pe mai multe servere.

O zona DNS este acea parte din spatiul de nume DNS care se gaseste pe un anumit server. O zona poate cuprinde un domeniu intreg sau doar o parte din acesta, restul subdomeniilor aflandu-se pe alte servere in alte zone.

Fisierul zona este acela care pastreaza informatiile referitoare la zona aflata in administrarea serverului.

Page 126: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Serverul care stocheaza fisierul zona se numeste autoritativ pentru acea zona. Un server poate fi autoritativ pentru o zona sau mai multe zone.

Serverele DNS se impart in 2 categorii:

1. Primary Master Name ServerCiteste informatiile referitoare la zona dintr-un fisier aflat pe hard disk-ul sau. Este

acela declarat in resursa SOA. Modificarile referitoare la o zona se pot face doar pe primary master. 2. Secondary master name server sau slav

Isi ia informatia referitoare la zona automat de la un alt server numit masterul sau. Acesta poate fi primary master sau un alt server secondary master.

Informatia referitoare la zona nu se poate modifica pe secondary master. In momentul in care porneste, secondary master contacteaza primary masterul sau pentru a-si copia fisierului zona. Aceasta operatiune se numeste "zone transfer".

Ulterior serverul slave face backup la fisierul zona pe propriul HDD, iar la urmatorul restart incarca intai fisierul local si apoi contacteaza masterul sau pentru a vedea daca informatia mai este actuala. Atat primary master cat si secondary master sunt autoritativi pentru acea zona.

Notiunile de Primary Master si Secondary Master (slave) sunt relative. Un server poate fi primary master pentru o zona si secondary master pentru alte zone. Negative caching

In momentul in care un alt server DNS trimite serverului nostru o informatie despre un domeniu inexistent, serverul face cache si la acea informatie. Urmatoarele cereri pentru domeniu vor fi raspunse din cache.

Clientul DNS Este reprezentat printr-un modul al sistemului de operare numit "DNS resolver".

Rezolverul DNS primeste din partea aplicatiei (firefox, thunderbird etc) sarcina de a transforma numele domeniului intr-o adresa logica sau IP. Acesta interogheaza serverul DNS configurat in sistem.

Serverul DNS va raspunde cu informatia ceruta sau cu o eroare. DNS resolver dispune de un cache propriu local in care salveaza raspunsurile de la cererile facute. In Windows cache-ul local poate fi vizualizat cu comanda ipconfig /displaydns si sters cu comanda ipconfig /flushdns

6.1.4 DNS Queries

Un client DNS poate trimite catre server 2 categorii de query:

1. Query iterativClientul trimite un query serverului iar acesta trebuie sa raspunda IMEDIAT fie din

fisierul zona (daca este autoritativ) fie din cache-ul sau (daca nu este autoritativ) dar are

Page 127: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

raspunsul. Serverul trebuie sa dea cel mai bun raspuns pe care il stie chiar daca acesta nu este raspunsul final.

Daca informatia ceruta nu ii este cunoscuta serverului DNS, acesta raspunde cu un "referal" adica o lista de servere DNS care ar putea furniza raspunsul.

ExempluDaca cererea clientului incearca sa translateze numele www.crystalmind.ro in IP, serverul DNS ar putea raspunde cu o serie de servere autoritative pentru domeniul ro. In acest caz cade in sarcina clientului sa contacteze serverele respective pentru a afla raspunsul.

Mod functionare query interativ.Presupunem ca DNS resolverul doreste translatarea numelui de domeniu www.invata

online.ro in IP.

Etape:1. Clientul trimite query iterativ la serverul DNS default (cel configurat in /etc/resolv.conf).2. Daca serverul DNS este autoritativ (are in fisierul zona de pe propriul hard disk informatia) raspunde cu valoarea adresei IP. Daca nu este autoritativ incearca sa caute in

Page 128: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

cache. Fiecare server mentine un cache cu ultimele cereri facute de clienti, astfel incat in momentul in care un nou client face o cerere daca aceasta a mai fost facuta de un alt client in trecut, serverul va raspunde din cache. Daca serverul nu este autoritativ si nici nu are raspunsul in cache trece la pasul 3.3. Serverul DNS trimite query iterativ in care doreste aflarea ip-ului pentru domeniul www.invata-online.ro la unul dintre serverele root (cele autoritative pentru domeniul "." (punct))

NotaOrice server DNS cunoaste default fara nicio configuratie numele si IP-urile serverelor autoritative root. Acesta sunt in nr. de 13 distribuite geografic in mod uniform in toata lumea.

4. Serverul root va raspunde cu un referal si anume numele si ip-ul serverului autoritativ pentru domeniul ro. Serverul root cunoaste informatia fiindca el a facut delegarea de autoritate pentru domeniul ro (domeniul ro se afla sub el si este un subdomeniu).

ImportantUn server cunoaste numele si ip-urile tuturor serverelor pentru domeniile imediat de sub domeniul pentru care este autoritativ.

5. Serverul nostru trimite acelasi query iterativ catre serverul autoritativ pentru domeniul ro aflat la pasul 4. Serverul autoritativ pentru domeniul ro raspunde cu un referal care indica numele si ip-ul serverului autoritativ pentru domeniul invata-online.ro. Acesta cunoaste informatia fiinca el a facut delegarea de autoritate (domeniul invata-online.ro este un subdomeniu al domeniului ro) 6. Serverul nostru trimite query iterativ catre serverul autoritativ al domeniului invata online.ro. Acesta din urma fiind autoritativ raspunde cu ip-ul domeniului www.invata online.ro

ImportantIn general un server este autoritativ (are informatia pe propriul hard disk) pentru doar cateva domenii, dar poate raspunde la query pentru orice domeniu din Internet folosind query iterative din aproape in aproape.

2. Query recursiv

Page 129: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Clientul trimite un query serverului, iar acesta trebuie sa furnizeze valoarea finala ceruta sau un mesaj de eroare. Serverul este acela care trebuie sa contacteze alte servere DNS in cazul in care nu cunoaste raspunsul la intrebare. Aceasta modalitate este cea mai des intalnita. In mod implicit orice client dns trimite la server query recursive (doreste raspunsul final nu raspunsul intermediar adica un referal - un alt server pe care sa-l intrebe). Astfel ramane in sarcina serverului sa afle prin cereri iterative valoarea ceruta de client.

NotaUn forwarder este un server DNS catre care alte servere DNS trimit query recursive pentru a evita parcurgerea arborelui de nume de sus in jos pentru aflarea raspunsului. Forwarderul este acela care trebuie sa afla valoarea ceruta prin cereri iterative si sa o transmita serverului initial. In general Forwarderul este un server mai puternic, eventual cel furnizat de ISP.

6.1.5 Rezolutii DNS

Protocolul DNS defineste 2 tipuri de rezolutii sau translatii.

1. Rezolutia directaPresupune translatarea unui nume de domeniu in IP. Se foloseste RR de tip A.

NotaExemplu de query trimis de client la server este: www.test.com A

Page 130: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2. Rezolutia inversa Presupune transformarea adreselor IP in nume de domeniu. Rezolutia directa si

inversa sunt doua concepte diferite. Cu ajutorul protocolului DNS NU se realizeaza echivalente intre domenii si IP ci doar corespondente intr-un singur sens. Astfel nu orice nume de domeniu care se rezolva intr-un IP se poate rezolva si invers adica IP-ul sa rezolve sau sa se translateze in domeniu.

Pentru rezolutia inversa se foloseste un domeniu special si anume in-addr.arpa. Acesta are ca subdomenii (noduri) octetii corespunzatori adresei IP scrisi de la stanga la dreapta.

Nodul in-addr.arpa. poate avea 255 subdomenii, iar fiecare nod mai departe poate avea 256 subdomenii. Numerele de mai sus sunt aproximative fiindca exista IP-uri rezervate. Pentru rezolutia inversa se solicita serverului un Resource Record (RR) de tip-ul PTR.

NotaExemplu de query pentru rezolutia inversa trimis de client la server este: 191.17.1.1 PTR

6.1.6 RR (Resource Records)Serverul DNS foloseste o baza de date in care pastreaza informatiile pe care le va

furniza clientilor pentru un anumit domeniu pentru care este autoritativ. Tipurile de informatii pe care le pastreaza un server DNS autoritativ pentru un domeniu in fisierul zona al acelui domeniu se numesc Resource Records (RR).

Tipuri de RR.

SOAStart of Authority - declara serverul autoritativ pentru acea zona. In fiecare fisier zona trebuie sa existe un RR de tip SOA. Poate fi unul singur pentru o zona. Este obligatoriu sa se gaseasca in fiecare fisier zona.

NSName server - declara numele serverului autoritativ pentru acel domeniu. Este obligatoriu sa se gaseasca in fiecare fisier zona.

Page 131: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

A IPv4 Address - Declara o corespondenta intre domeniu si IP (rezolutie directa)

PTRPointer - declara o echivalanta intre IP si domeniu (rezolutie inversa). Acest RR este optional

CNAMECanonical Name - declara un alias al unei resurse. Un alias reprezinta un alt nume pentru acelasi lucru. Acest RR este optional

MX

Mail Exchanger - declara un server de e-mail pentru acea zona. Se foloseste impreuna cu o prioritate (preferinta ) care poate fi intre 0 si 65535. Cu cat nr. este mai mic cu atat serverul este de preferat. Se pot seta astfel servere de Backup. Acest RR este optional.

6.2 Serverul BIND6.2.1 Compilare si instalare

Instalarea prin compilare a BIND-ului se realizeaza in mod standard fara probleme deosebite. Exemplu de mai jos s-a realizat pe Fedora Core 9. In mod IDENTIC se compileaza si instaleaza pe orice distributie Linux.

Pasi de urmat: 1. Download sursele ultimei versiuni BIND de pe site-ul producatorului www.isc.org. Acestea pot fi downloadate in orice director din sistem. Se ruleaza: wget http://ftp.isc.org/isc/bind9/9.5.0-P2/bind-9.5.0-P2.tar.gz

2. Verificare integritate arhiva tar.gz folosind hash-ul sau semnatura digitala (Optional dar foarte recomandat)3. Decomprimare si dezarhivare arhivaSe ruleaza: tar -xzvf bind-9.5.0-P1.tar.gz4. Rularea scriptului configure verifica sistemul si anume daca acesta contine toate componentele necesare compilarii si instalarii serverului DNS. Dorim instalarea in directorul /opt/bind astfel incat sa putem urmari si studia toate componentele cu care vine BIND. Se recomanda rularea scriptului configure de catre un user neprivilegiat.Se ruleaza: ./configure --prefix=/opt/bind

NotaFara optiunea --prefix=/opt/bind instalarea are loc in directoarele standard precum /usr/bin, /usr/sbin, /etc. In acest caz ne va fi greu sa gasim fisierele componente ale serverului sau sa-l dezinstalam/stergem.

5. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat.In urma compilarii rezulta din fisierele sursa fisiere executabile.Se ruleaza: make

Page 132: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

6. InstalareInstalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii din directorul cu surse in directorul dorit ( /opt/bind). Comanda poate fi executata doar de root. Se ruleaza: make install

6.3 Configurare BIND6.3.1 Aspecte generale

In urma compilarii si instalarii serverului DNS in directorul /opt/bind sunt formate mai multe subdirectoare care contin fisierele necesare functionarii serverului DNS BIND.

Dintre cele mai importante enumeram: /opt/bind/bin - contine utilitare pentru testarea functionalitatii serverului precum dig, host,nslookup nsupdate/opt/bind/include - contine headere care contin constante si alte date necesare/opt/bind/lib - contine librarii necesare serverului /opt/bind/man - contine man page-uri pentru utilitarele cu care a venit pachetul BIND/opt/bind/sbin - contine daemonul dns reprezentat prin fisierul named precum si alte utilitare dintre care cele mai importante:rndc - utilitar de control al serverului (start, restart, stop etc)rndc-confgen - utilitar de configurare al modului de comunicare intre rndc si servernamed-checkconf - utilitar de validare a fisierului de configurare named.conf named-checkzone - utilitar de validare a fisierelor zona

Configurarea serverului DNS BIND pentru un domeniu autoritativ presupune:

Page 133: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1. Editarea fisierului global de configurare numit named.conf care se gaseste in /opt/bind/etc. In acest fisier se definesc aspecte care tin de functionarea generala a serverului precum si referire la zonele/domeniile pentru care serverul este autoritativ

NotaIn cazul in care instalam serverul dintr-un pachet binar deja compilat precum rpm sau deb sau daca il compilam fara optiunea --prefix a scriptului configure, fisierul global de configurare named.conf se va gasi cel mai probabil in /etc

2. Crearea si editarea fisierelor zona pentru domeniile pentru care serverul este autoritativ. Exista un fisier zona pentru fiecare domeniu autoritativ

3. Alte configurari specifice cum ar fi controlul logurilor, controlul accesului etc.

6.3.2 Master pentru domeniu autoritativ

In exemplul nostru ne propunem configurarea serverului ca autoritativ pentru domeniul invata-linux.ro. Configurea serverului BIND ca master pentru un domeniu autoritativ presupune:

1. Editarea fisierului global de configurare named.conf

Detalii named.conf: - fiecare linie se termina cu ";" (punct si virgula) - sintaxa este extrem de sensibila, orice caracter precum ; (punct si virgula) lipsa reprezinta o eroare fatala; - fisierul contine 2 sectiuni, sectiunea globala care se refera la modul de functionare al intregului server si care se defineste in containerul options si sectiunea zonelor pentru care serverul este autoritativ; - directiva directory din options defineste un director in care serverul va cauta fisierele la care ne referim in continuare folosind calea relativa; Exemplu: daca ne referim la fisierul zoneInvata-linux.ro, serverul il va cauta in /opt/bind/etc; - pentru fiecare zona pentru care serverul este autoritativ trebuie sa specificam numele zonei, faptul ca serverul este master sau slave precum si numele fisierului zona (in exemplul nostru zoneInvata-linux.ro). Numele fisierului poate fi ales fara vreo restrictie; - ultima linie se refera la o cheie folosita pentru comunicatia dintre rndc si named. Pentru a genera cheia se foloseste comanda /opt/bind/sbin/rndc-confgen -a;

Exemplu named.conf minimal

options{ directory "/opt/bind/etc";

Page 134: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

}; zone "invata-linux.ro" { type master; file "zoneInvata-linux.ro"; }; include "/opt/bind/etc/rndc.key";

2. Crearea si editarea fisierului zona pentru respectivul domeniu

Detalii fisier zona pentru domeniu invata-linux.ro:

- fisierul zona este format din linii care contin: nume_domeniu tip_RR valoare_RR

Exemplu:ns1.invata-linux.ro. A 192.168.0.1 www A 192.168.0.1

- in intreg fisierul zona, numele de domenii trebuie sa fie FQDN si sa se termine cu punct (domeniu root)

Exemplu: login.invata-linux.ro. A 192.168.0.1

In momentul in care un domeniu nu se termina cu punct, acesta este considerat un subdomeniu al domeniului pentru care serverul este autoritativ (se adauga ca sufix intreg domeniul)

Exemplu: www A 192.168.0.1

este echivalent cu

www.invata-linux.ro. A 192.168.0.1

- @ este un caracter special si reprezinta FQDN. In cazul nostru @ se inlocuieste cu invata-linux.ro. - in fisierul zona conteaza indentarea

Exemplu: @ SOA ns1.invata-linux.ro. admin.invata-linux.ro. ( 3 3h 5m 3w 1h )

Page 135: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

NS ns1.invata-linux.ro. MX 10 mail.invata-linux.ro.

Fiindca pe linia care contine RR NS este liber pe prima pozitie (pozitie rezervata numelui de domeniu), se preia automat numele de domeniu de deasupra adica @ care reprezinta invata-linux.ro.

In exemplu nostru NS ns1.invata-linux.ro. este echivalent cu invata-linux.ro. NS ns1.invata-linux.ro. Echivalent si pentru RR-ul MX. Nr. 10 de pe linia care defineste MX reprezinta prioritatea serverului de e-mail. In cazul in care se definesc mai multe servere de e-mail pentru domeniu in scop de backup cel cu prioritate minima va fi folosit. Atentie: valoarea resursei MX nu poate fi definita ca CNAME. Acesteia trebuie sa i se ataseze o resursa de tip A. In tutorialul video in mod intentionat a fost definit domeniul mail.invata-linux.ro. ca CNAME (alias) al lui www rezultand astfel o eroare.

Exemplu fisier zona pentru domeniul invata-linux.ro. Fisierul se numeste zoneInvata linux.ro

$TTL 3h; @ SOA ns1.invata-linux.ro. admin.invata-linux.ro. ( 3 ;serial 3h ;refresh in 3 hours 5m ;retry in 5 minutes 3w ;expire in 3 weeks 1h ;min in 1 hour ) NS ns1.invata-linux.ro. MX 10 mail.invata-linux.ro. ns1.invata-linux.ro. A 192.168.0.16 invata-linux.ro. A 192.168.0.16 mail A 192.168.0.1 www CNAME mail pc1 A 192.168.0.11 pc2 A 192.168.0.12

Cei 5 timpi au urmatoarea semnificatie: serial = orice nr. intre 0 zi 4294967295. Trebuie modificat de fiecare data cand se modifica fisierul zonarefresh = timpul dupa care serverele slave vor incerca sa reciteasca fisierul zona de pe masterretry = timpul dupa care serverele slave vor incerca sa faca retry la citirea zonei de pe master daca are loc o eroareexpire = timpul dupa care serverul slave nu mai este autoritativ pentru o zona. Are efect in cazul in care nu poate face zone-tranfer. Nu va mai raspunde la query pentru acea zonamin = perioanda de timp in care negative response sunt pastrate in cache. In aceasta perioada slave-ul raspunde NXDOMAIN. Dupa ce perioada expira incerca din nou interogarea masterului.

Page 136: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

6.3.3 Rezolutia inversa

Rezolutia inversa presupune translatarea de catre serverul DNS a IP-urilor in nume de domenii. Rezolutia inversa nu este obligatorie, dar se recomanda in anumite cazuri.

Exemplu: Daca exista un server de email

Configurarea serverului pentru rezolutie inversa pentru domeniu autoritativ presupune:

1. Definirea unei noi zone in named.conf si anume zona pentru rezolutia inversa In named.conf se adauga: zone "0.168.192.in-addr.arpa"{ type master; file "zone192.168.0.0"; };

2. Crearea si editarea unui fisier zona pentru rezolutia inversa

Detalii:- ca si in cazul fisierului zona pentru rezolutia directa sunt obligatorii RR-urile SOA si NS. In plus apare RR-ul PTR folosit special pentru translatia ip-ului in nume de domeniu;

Fisier zona pentru rezolutia inversa. Acesta este zone192.168.0.0:

@ SOA ns1.invata-linux.ro. root.invata-linux.ro ( 1 1h 2h 3h 1h ) NS ns1.invata-linux.ro. 1 PTR www.invata-linux.ro. 1 PTR mail.invata-linux.ro. 11 PTR pc1.invata-linux.ro. 12 PTR pc2.invata-linux.ro.

Detalii: randul: 1 PTR www.invata-linux.ro. este echivalent cu 1.0.168.192.in-addr.arpa PTR www.invata-linux.ro, fiindca numele domeniului si anume 1 nu este FQDN, caz in care i se adauga ca sufix zona pentru care este serverul autoritativ si anume 0.168.192.in addr.arpa

www.invata-linux.ro se va translata in 192.168.0.1, iar pc2.invata-linux.ro se va translata in 192.168.0.12

Page 137: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

6.3.4 Server Slave

Configurarea unui server DNS slave autoritativ pentru un domeniu presupune:- editarea fisierului global de configurare named.conf al acestuia; - editarea fisierului global de configurare al masterului astfel sa permita conectarea serverului slave pentru copierea fisierului zona pentru domeniu (zone transfer);

Exemplu named.conf pentru slave: options { directory "/opt/bind/etc"; }; zone "invata-linux.ro" { type slave; file "zoneInvata-linux.ro"; masters { 192.168.0.13; }; }; 192.168.0.13 reprezinta IP-ul serverului Master.

In fisierul named.conf al masterului in cadrul containerului options trebuie adaugat: allow-transfer { 192.168.0.15; };

Serverul master permite serverului slave cu IP-ul 192.168.0.15 sa se conecteze pentru zone trasfer. Astfel named.conf al serverului master devine:

options{ directory "/opt/bind/etc"; allow-transfer { 192.168.0.15; }; }; zone "invata-linux.ro" { type master; file "zoneInvata-linux.ro"; }; include "/opt/bind/etc/rndc.key";

NotaFisierul zona pentru slave nu trebuie creat/editat de catre admin. Acesta este copiat automat de pe master in momentul in care slave-ul face zone transfer. Slave-ul are o copier read-only a fisierului zona. Orice modificare a fisierului zona are loc pe master si trebuie sa fie insotita de incrementarea numarului serial pentru zona respectiva.Slave-ul face zone transfer doar daca fisierul zona de pe master are numarul serial mai mare decat copia locala de pe slave.

ImportantAcelasi server poate sa fie master pentru un domeniu sau mai multe si slave pentru alte domenii.

Page 138: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

6.3.5 Delegare

Cerinta: se doreste delegarea autoritatii pentru subdomeniul servers.invata-linux.ro unui alt server.

Implementare: - in fisierul zona al serverului autoritativ pentru domeniul invata-linux.ro se adauga un RR de tip NS care indica numele serverului catre care se deleaga autoritatea ( Exemplu: ns1.servers.invata-linux.ro) - in acelasi fisier zona se adauga un RR de tip A pentru numele serverului catre care se face delegarea si anume ns1.servers.invata-linux.ro

In fisierul zona al serverului autoritativ pentru domeniul invata-linux.ro adaugam: servers.invata-linux.ro. NS ns1.servers.invata-linux.ro. ns1.servers.invata-linux.ro. A 192.168.0.111

ImportantServerul catre care s-a realizat delegarea trebuie configurat pentru domeniul servers.invata-linux.ro in acelasi mod in care serverul principal a fost configurat pentru domeniul invata-linux.ro

NotaPresupunem cumpararea unui domeniu ro si anume crystalmind.ro Serverul autoritativ pentru domeniul ro trebuie sa delege autoritatea catre noul subdomeniu crystalmind.ro In formularul de la www.rotld.ro ne sunt cerute urmatoarele informarii: numele serverului autoritativ pentru domeniul crystalmind.ro si IP-ul acestuia. Presupunand ca furnizam ca informatie ns1.crystalmind.ro si 88.0.0.1, administratorul domeniului ro adauga in fisierul zona al acestuia:crystalmind.ro. NS ns1.crystalmind.ro.ns1.crystalmind.ro. A 88.0.0.1

6.3.6 Logging

Serverul BIND este extrem de complex de multe ori fiind foarte complicat sa facem troubleshooting. Un aspect foarte important in vederea procesului de troubleshooting reprezinta logarea/salvarea informatiilor despre modul in care acesta functioneaza.

NotaUnii administratori de sistem logheaza toate cererile clientilor catre serverul DNS ceea ce poate fi interpretat ca o incalcare a dreptului la intimitate. Salvand toate query-urile catre

Page 139: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

server avem informatii despre fiecare web site vizitat, frecventa cu care un user intra pe un site, domeniile unde userul are cont de email, nr. de accesari al acestuia etc

Pentru logarea activitatii BIND trebuie: - modificare named.conf; - modificare fisier configurarea syslog (serverul responsabil cu procesul de logare din intreg sistemul); In named.conf se adauga:logging { channel my_syslog { syslog local1; severity info; }; category queries { my_syslog; }; category default { my_syslog; }; }; In /etc/syslog.conf se adauga:local1.info /var/log/bind

NotaPentru ca modificarile sa fie preluate, ambele servere (Syslogd si Bind) trebuie restartate Syslog este prezentat in capitolul "Managementul Logurilor".

6.4 DNS Troubleshooting6.4.1 nslookup

nslookup este un utilitar care are drept scop interogarea manuala a serverelor DNS. Se foloseste in scop de troubleshooting si pentru aflarea de informatii despre diferite domenii

ExempluServerul DNS default este cel configurat in /etc/resolv.conf

1. Interogheaza serverul DNS default cerand valoarea resursei de tip A pentru domeniu nslookup www.crystalmind.ro

2. Interogheaza serverul default folosind rezolutia inversa (translatarea IP-ului in domeniu) nslookup 192.168.0.1

3. Interogheaza un alt server DNS si anume cel de la IP-ul 88.0.0.1 nslookup crystalmind.ro 88.0.0.1 4. Interogheaza un alt server (cel de la 88.0.0.1) folosind rezolutia inversa (translatarea IP-ului 64.233.167.99) nslookup 64.233.167.99 88.0.0.1

5. Interogheaza serverul DNS de la 193.25.112.245 pentru valoarea resursei de tip MX

Page 140: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

nslookup -type=MX mail.crystalmind.ro 193.25.112.246

6. Modul interactiv al lui nslookup

nslookup -all > www.domeniu.com >mail >192.168.0.1 >server DNS_SERVER_IP //urmatoarele interogari vor fi facute catre acest server > set type=soa > ro >set type=mx >crystalmind.ro

ImportantComanda nslookup exista si pe Windows, iar sintaxa este identica.

6.4.2 dig

dig este un utilitar complex cu foarte multe optiuni folosit pentru interogarea manuala a unui server DNS.

Exemplu1. Interogarea serverului DNS care ruleaza pe localhost (translatarea domeniuluiwww.cma.ro in IP)dig @localhost www.cma.ro

2. Interogarea serverului DNS care ruleaza la 88.0.0.1 (translatarea domeniului www.cma.ro in IP)dig @88.0.0.1 www.cma.ro 3. Interogarea de tip rezolutie inversa a serverului care ruleaza pe localhost (translatarea IP-ului 192.167.34.2 in domeniu)gig @localhost -x 192.167.34.2

4. Interogarea serverului care ruleaza la 88.0.0.1 despre resursa de tip MX a domeniului crystalmind.rodig @88.0.0.1 -t mx crystalmind.ro

Dig output

Flags:qr = query responseaa = authoritative answerrd = recursion desiredra = recursion availablead = authenticated data (DNSSEC)

DNS status:

Page 141: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

NOERR = No errorFORMERR = Format error. serverul DNS nu a putut interpreta querySERVFAIL = Server fails. Serverul nu a putut satisface cererea datorita unor erori.NXDOMAIN = Name error. Domeniul din query nu exista.NOTIMP = Not implemented. REFUSED

Capitolul 7 Serverul Apache

7.1 Protocolul HTTP

HTTP (Hypertext Transfer Protocol) reprezinta un protocol la nivel de aplicatie care defineste modalitatea de comunicatie dintre un server care implementeaza protocolul HTTP si un client. Dintre serverele HTTP cele mai folosite sunt Apache si Microsoft IIS, iar dintre clientii HTTP Mozilla Firefox, Internet Explorer si Opera.

Dezvoltarea protocolului HTTP a fost coordonata de organizatia W3C (World Wide Web Consortium) care a culminat cu publicarea a o serie de RFC-uri de catre IETF dintre care RFC2616 defineste HTTP/1.1

Protocolul HTTP este cel care a dus la formarea World Wide Web care reprezinta o colectie de documente interconectate prin link-uri.

NotaUn server HTTP se mai numeste si server web. Un client HTTP se mai numeste si Browser.

Rolul unui server WEB este de a translata adrese numite URL-uri cerute de browser in fisiere si trimiterea continutului acestora prin retea (Internet sau LAN) la client. Protocolul HTTP foloseste default portul TCP/80. Acesta este portul pe care serverul web asculta dupa conexiuni de la clienti.

Un URL (Uniform Resource Locator) este format din:<scheme>://<host>/<path>

<scheme> reprezentat de http ceea ce indica protocolul folosit de client si server;<host> reprezinta numele sau IP-ul serverului WEB la care se conecteaza browserul cumar fi www.crystalmind.ro sau 88.0.0.1;<path> reprezinta calea catre fisierul cerut de client relativ la DocumentRoot;

Page 142: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Browserul primeste de la server DOAR continut text formatat dupa standardul HTML. Folosind plugin-uri speciale clientul poate primi si un fisier non-text in format binar precum flash, audio, video, pdf etc

ImportantDocumentRoot reprezinta un termen generic dar si o directiva de configurare a unui

server web care reprezinta un director din sistemul de fisiere al serverului de unde acesta va servi fisierele cerute de clientii. ExempluDaca DocumentRoot este directorul /var/web, iar un client se conecteaza la server folosit schema http://www.crystalmind.ro/cursuri/linux.html, atunci serverul va translata http://www.crystalmind.ro/cursuri/linux.html in /var/web/cursuri/linux.html si va incerca sa livreze fisierul clientului.

HTTPS HTTP este un protocol text (tot ceea ce transmite serverul clientului este text in format HTML) si in clar (informatia nu se cripteaza).

Odata cu dezvoltarea exploziva a web-ului si cu aparitia de servicii critice care folosesc HTTP (online banking, online shopping etc) modul in clar de operare a HTTP-ului a inceput sa reprezinta un mare dezavantaj. Informatia dintre client si server poate fi usor interceptata folosind un simplu sniffer precum tcpdump sau wireshark.

HTTPS inseamna HTTP Secure sau HTTP over SSL (Secure Socket Layer) si este un protocol cu acelasi scop ca si HTTP la care comunicatia dintre client si server este criptata folosind SSL/TLS.

Initializarea unei sesiuni criptate presupune folosirea schemei https in loc de http ceea ce are ca efect conectarea la serverul web pe portul tcp/443 in loc de tcp/80.

Exemplu: https://mail.google.com

7.2 Prezentare generala server

Apache reprezinta un server care implementeaza protoculul HTTP (Hyper Text Transfer Protocol) si care ruleaza pe mai toate sistemele de operare (Windows, Linux, Unix, BSD, MacOS etc). Este cel mai folosit server web din lume fiind instalat pe zeci de milioane de hosturi. Cota sa de piata variaza intre 60-70%.

Dintre cele mai populare web site-uri care ruleaza Apache enumeram: Google (ruleaza o versiune putin modificata de Apache numita GWS - Google Web Server), Cisco Systems, Wikipedia etc

Apache a pornit ca un proiect al National Center for Supercomputing Applications (NCSA) pentru crearea unui server web. In momentul in care coordonatorul de proiect Robert McCool a parasit NCSA in 1994, dezvoltarea proiectului a fost sistata. Ulterior ceilalti membri ai echipei au infiintat "Apache Group" si au continuat dezvoltarea serverului.

Page 143: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Initial aplicatia s-a numit NCSA HTTPd.Din punct de vedere istoric numele Apache are 2 radacini:

1. Conform cu FAQ de la Apache Group: The name 'Apache' was chosen from respect for the Native American Indian tribe of Apache, well-known for their superior skills in warfare strategy and their inexhaustible endurance.2. Fiind bazat pe cod initial (de la NCSA) serverul s-a dezvolatat prin adaugarea de patch-uri. (a patchy server)

7.3 Compilare si instalare

Instalarea prin compilare a Apache-ului se realizeaza in mod standard fara probleme deosebite. Exemplu de mai jos s-a realizat pe Fedora Core 9. In mod IDENTIC se compileaza si instaleaza pe orice distributie Linux.

Pasi de urmat: 1.Download sursele ultimei versiuni Apache de pe site-ul producatorului httpd.apache.org. Acestea pot fi downloadate in orice director din sistem. Se ruleaza: wget http://mirrors.evolva.ro/apache.org/apache-dist/httpd/httpd-2.2.9.tar.bz2

2. Verificare integritate arhiva tar.bz2 folosind hash-ul sau semnatura digitala (Optional dar foarte recomandat)3. Decomprimare si dezarhivare arhiva. Se ruleaza: tar -xjvf httpd-2.2.9.tar.bz24. Rularea scriptului configure care verifica sistemul si anume daca acesta contine toate componentele necesare compilarii si instalarii serverului Apache. Dorim instalarea in directorul /opt/apache astfel incat sa putem urmari si studia toate componentele cu care vine serverul. Se recomanda rularea scriptului configure de catre un user neprivilegiat. Se ruleaza din directorul cu surse: ./configure --prefix=/opt/apache --enable-so --enable-mods shared=all

Nota Fara optiunea --prefix=/opt/apache instalarea are loc in directoarele standard precum /usr/bin, /usr/sbin, /etc. In acest caz ne va fi greu sa gasim fisierele componente ale serverului sau sa-l dezinstalam/stergem. Optiunea --enable-so are rolul de a compila serverul cu suport modular, iar optiunea enable-mods-shared=all are rolul de a compila toate modulele disponibile. Acestea se vor gasi in directorul /opt/apache/modules si trebuie incarcate la pornirea serverului pentru ca acesta sa se foloseasca de functionalitatea oferita de acestea. Scriptul configure al serverului are foarte multe optiuni de compilare.Pentru vizualizarea tuturor optiunilor se poate rula din directorul cu surse ./configure --help | less

5. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat. In urma compilarii rezulta din fisierele sursa fisiere executabile. Se ruleaza: make

Page 144: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

6. Instalare Instalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii din directorul cu surse in directorul dorit ( /opt/apache). Comanda poate fi executata doar de root. Se ruleaza: make install

NotaDupa instalare se recomanda editarea fisierului /etc/man.config pentru includerea man page-urilor utilitarelor venite odata cu instalarea serverului.In /etc/man.config se adauga: MANPATH /opt/apache/man

7.4 Structura Apache

In mod standard o versiune compilata a serverului contine in directorul reprezentat prin ServerRoot (in cazul nostru /opt/apache) urmatoarele directoare si utilitare:- bin - contine daemonul httpd (serverul web) precum si alte utilitare cum ar fi apachectl folosit pentru controlul serverului si anume pornirea, oprirea sau restartarea acestuia, httpasswd folosit pentru crearea de useri pentru accesul restrictionat la anumite directoare, ab folosit pentru benchmarking, apxs (APache eXtenSion tool) folosit pentru extinderea functionalitatii Apache prin compilarea de noi module, logrotate folosit pentru rotirea logurilor etc; - man - contine man pages (help-ul oficial) pentru aplicatiile instalate ( httpd, apachectl, htpasswd etc); - htdocs - contine fisierele care vor fi servite clientilor. Acest director si toate de sub el poata denumirea generica de WebSpace si sunt accesibile tuturor (Atentie Securitate!). Directorul /opt/apache/htdocs este default DocumentRoot; - logs - contine logurile serverului Apache. Exista 2 fisiere importante access_log si error_log; - cgi-bin - contine scripturi CGI (Common Gateway Interface); - conf - contine fisiere de configurare dintre care cel mai important este httpd.conf; - modules - contine module DSO (Dynamic Shared Objects) reprezentate prin fisiere executabile ce sunt incarcate de server la pornire pentru a-si extinde functionalitatea; - manual - contine manualul de utilizare si configurare al serverului in format HTML; - error - contine fisiere care reprezinta pagini HTML ce vor fi servite clientilor in caz de eroare standard. Fiecare eroare standard are un cod unic ( Exemplu: 404 - Page not found);

NotaApache poate fi compilat modular sau nemodular. In primul caz functionalitatea sa se gaseste in fisiere speciale numite module. In al doilea caz functionalitatea sa se afla chiar in daemonul httpd. Pentru a afisa modulele compilate in daemon se ruleaza: /opt/apache/bin/httpd -l. In cazul in care Apache se compileaza modular (optiunea --enable-so a scriptului configure), modulele se gasesc in directorul /opt/apache/modules (si mai corect in directorul numit modules din directorul reprezentat de directiva ServerRoot care este in cazul nostru /opt/apache). Daca acesta este gol cu toate ca s-a dorit compilarea modulara inseamna cel mai probabil o optiune eronata a scriptului configure.

Page 145: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

7.4.1 Configurare Apache

Configurarea serverului Apache presupune editarea fisierului de configurare httpd.conf sau a altor fisiere care ulterior sunt incluse in acesta.

Exista peste 300 de directive de configurare, iar fiecare directiva este introdusa de un anumit modul (daca serverul a fost compilat modular), deci directiva exista si poate fi folosita in masura in care modulul a fost incarcat in server.

Un modul este reprezentat printr-un fisier executabil din directorul modules din ServerRoot (Exemplu: /opt/apache/modules).

Pentru ca serverul sa incarce un modul, in httpd.conf trebuie adaugat in acesta: LoadModule NUME_MODULCALEA_CATRE_FISIERUL_CARE_REPREZINTA_MODULULExemplu: LoadModule alias_module modules/mod_alias.so

Fisierul de configurare este citit de catre Apache doar la pornire (ca la toate serverele Linux de altfel). Orice modificare in fisierul de configurare presupune restartarea serverului.

Serverul se porneste, opreste sau restarteaza folosind utilitarul apachectl din directorul /opt/apache/bin. Acesta primeste ca parametri start, stop sau restart. Exemplu:cd /opt/apache/bin ./apachectl restart

7.4.2 Configurare Minimala

Configurarea serverului Apache presupune editarea fisierului de configurare httpd.conf. In general se porneste de la un schelet de fisier cu care serverul "vine" in mod default.

Important Serverul Apache este extrem de complex. O intelegere aprofundata a modului in care acesta opereaza poate fi dobandita numai dupa foarte multa de experienta. Pentru un server in productie, modificarea fisierului de configurare trebuie facuta cu grija dupa intelegerea rolului si scopului fiecarei directive pe care o modificam.

In primele randuri ale fisierului mostra httpd.conf gasim un avertisment din partea Apache Group: "Do NOT simply read the instructions in here without understanding what they do. They're here only as hints or reminders. If you are unsure consult the online docs. You have been warned." Configurarea minimala a serverului presupune:- modificarea ServerRoot cu directorul in care acesta este instalat; - stabilirea IP-ului si portului pe care asculta serverul: directiva Listen;

Page 146: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

- stabilirea userului si grupului sub care ruleaza serverul: directivele User si Group. Acestea nu trebuie sa fie sub nicio forma useri generici folositi si de alte servere. Trebuie creat un user si un group pentru Apache care sa nu mai fie folosit in alt scop; - modificarea ServerName cu numele sau IP-ul serverului; - stabilirea DocumentRoot, directorul din care serverul va furniza fisiere clientilor; - stabilirea fisierelor default pe care serverul le ofera clientilor: directiva DirectoryIndex; - configurarea modului de logare, fisierele in care serverul salveaza logurile si cantitatea de informatii logata; - alte configuratii cum ar fi documentele standard de eroare etc;

7.4.3 Directive principale

1. Adresa si portul pe care va asculta serverul. Listen 192.168.0.13:80

In cazul in care serverul are mai multe interfete si deci IP-uri si se doreste ca Apache sa asculte pe toate interfetele se foloseste: Listen *:80

2. Userul si grupul sub care ruleaza Apache User wwwuser Group wwwgroup

3. Numele folosit de server pentru a se identifica clientilor. Valoarea directivei ServerName este in mod normal numele serverului ( Exemplu: www.crystalmind.ro). Se poate folosi si adresa IP. ServerName 192.168.0.13:80

4. Directiva ServerRoot reprezinta directorul in care se gaseste Apache si toate fisierele necesare lui. Daca pe viitor in fisierul de configurare NU se va folosi o cale absoluta si o cale relativa aceasta va fi adaugata la ServerRoot. ServerRoot /opt/apacheExemplu: dir1/access inseamna /opt/apache/dir1/access

5. Directorul din care Apache va servi continut clientilor. Acesta este Webspace-ul. Se poate folosi directiva Alias pentru a indica alte locatii DocumentRoot /opt/apache/htdocs

6. Modulul dir_module introduce directiva DirectoryIndex.DirectoryIndex reprezinta fisierul servit default clientilor in momentul in care acestia nuspecifica in mod express un fisier.

Exemplu: daca DirectoryIndex are valoarea index.php, iar un client se conecteaza la server folosind http://www.crystalmind.ro, serverul va furniza clientului fisierul index.php din DocumentRoot ca si cand acesta s-ar fi conectat la server folosind http://www.crystalmind.ro/index.php LoadModule dir_module modules/mod_dir.so <IfModule dir_module> DirectoryIndex index.html index.php home.php </IfModule>

Page 147: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

7. Directiva IndexOptions genereaza index-ul unui director automat, asemanator comenzii ls. Directiva este introdusa de autoindex_module LoadModule autoindex_module modules/mod_autoindex.so IndexOptions FancyIndexing FoldersFirst IndexIgnore *.jpeg

8. Directivele Alias si ScriptAlias se folosesc pentru a mapa un URL cu un director din sistemul de fisiere care se gaseste in afara directorului definit de DocumentRoot. Browserul poate accesa astfel fisiere din afara lui DocumentRoot. Directiva ScriptAlias se foloseste daca directorul target contine doar scripturi CGI. Cele 2 directive sunt introduse de alias_module care trebuie incarcat. LoadModule alias_module modules/mod_alias.so Alias /icons /var/apache/images

Alias se foloseste pentru a mapa o resursa din webspace cu una locala, iar Redirect pentru a mapa o resursa cu una remote. Directiva Redirect este introdusa de mod_alias Redirect /help http://www.invata-online.ro

9. Directiva ErrorLog stabileste fisierul in care serverul va salva mesajele de eroare. Foarte util pentru troubleshooting si debugging.

ErrorLog logs/error_log #LogLevel: Control the number of messages logged to the error_log. #Possible values include: debug, info, notice, warn, error, crit, alert, emerg. LogLevel warn

10. Directiva ErrorDocument specifica fisierul sau mesajul pe care serverul il returneaza in caz de eroare standard. Fiecare eroare este identifica printr-un cod.

#Modificarea paginilor default care vor fi furnizate in caz de eroare ErrorDocument 500 "The server made a boo boo." ErrorDocument 404 "Lipseste!" #ErrorDocument 404 http://www.google.com #ErrorDocument 404 /missing.html ErrorDocument 402 http://www.example.com/subscription_info.html

NotaApache status return codes (lista incompleta):

400 Bad Request - HTTP_BAD_REQUEST401 Authorization Required - HTTP_UNAUTHORIZED402 Payment Required - HTTP_PAYMENT_REQUIRED403 Forbidden - HTTP_FORBIDDEN404 Not Found - HTTP_NOT_FOUND405 Method Not Allowed - HTTP_METHOD_NOT_ALLOWED406 Not Acceptable - HTTP_NOT_ACCEPTABLE407 Proxy Authentication Required

Page 148: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

HTTP_PROXY_AUTHENTICATION_REQUIRED408 Request Time-out - HTTP_REQUEST_TIME_OUT409 Conflict - HTTP_CONFLICT410 Gone - HTTP_GONE411 Length Required - HTTP_LENGTH_REQUIRED413 Request Entity Too Large - HTTP_REQUEST_ENTITY_TOO_LARGE414 Request-URI Too Large - HTTP_REQUEST_URI_TOO_LARGE500 Internal Server Error - HTTP_INTERNAL_SERVER_ERROR501 Method Not Implemented - HTTP_NOT_IMPLEMENTED503 Service Temporarily Unavailable - HTTP_SERVICE_UNAVAILABLE505 HTTP Version Not Supported - HTTP_VERSION_NOT_SUPPORTED

11. Pentru a seta optiuni pentru un anumit director din WebSpace se folosesc directive in cadrul unui container de tipul <Directory> <Directory directorul_caruia_ii_setam_optiunile> Optiune1 Optiune2 </Directory>

Exemplu: <Directory /opt/apache/htdocs/docs> Options Indexes FollowSymLinks #apartine modulului core si poate sa apara doar in <Directory> global. Specifica directivele care pot aparea in .htaccess si suprascriu directivele din contextul global sau <Directory>. Daca AllowOverride este NONE, serverul nici macar nu va mai incerca sa citeasca .htaccess AllowOverride ALL </Directory>

Important.htaccess este un fisier special care se foloseste pentru a seta optiuni pentru un director din WebSpace. La pornire serverul scaneaza directoarele din WebSpace pentru fisierul .htaccess si incarca directive folosite in acesta. Este modalitatea prin care se pot seta optiune pentru diferite directoare fara a modifica fisierul global de configurare httpd.conf. Nu orice directiva poate fi folosita in .htaccess.Deci pentru a seta optiuni pentru un director acestea pot sa apara in fisierul global de configurare (doar root il poate modifica) sau intr-un fisier numit .htaccess in directorul respectiv (orice user cu drepturi de scriere pe director poate crea si modifica .htaccess).

12. Directiva FilesMatch se foloseste de cele mai multe ori pentru restrictionarea accesului la anumite fisiere. Exemplu: se doreste configurarea serverului astfel incat acesta sa nu transmita clientilor anumite fisiere cum ar fi imagini sau documente.

Poate fi folosita si in .htaccess (in contrast cu <Directory> si <Location> care nu pot fi folosite in .htaccess) Permite folosirea de regular expressions. Este echivalenat cu directiva <Files>, dar de preferat. Daca se foloseste <Files>, stringul care trebuie "prins" de regular expression trebuie precedat cu "~" (tilda).

<FilesMatch "^\.ht">

Page 149: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Order allow,deny Deny from all </FilesMatch> <Files ~ "\.(gif|jp?g|png)$"> Order allow,deny Allow from 192.168.0.2 </Files>

Pentru detalii despre directivele Order, Allow si Deny cititi capitolul "Controlul accesului la resurse" a acestui curs.

13. Modulul mime_module se foloseste pentru a asocia o anumite actiune a serverului in functie de extensia fisierului cerut de client. Detalii.

Exemplu: clientul cere serverului un fisier html sau un fisier pdf.

LoadModule mime_module modules/mod_mime.so DefaultType text/plain TypesConfig conf/mime.types

De obicei exista fisierul mime.types care contine toate informatiile necesare despre tipurile de fisiere si care se include in httpd.conf

7.5 Virtual Hosting

De cele mai multe ori pe un server Apache se doreste gazduirea mai multor web site-uri. In cazul unui server dedicat de hosting, pot fi gazduite cateva sute de site-uri.

NotaGazduirea mai multor site-uri pe un sever poarta denumirea de Virtual Hosting.

Serverul Apache trebuie sa poata face diferenta intre site-uri si sa serveasca continutul corespunzator.

Exista 2 modalitati de virtual hosting: 1. IP-based Virtual Hosting

Serverul web se configureaza cu mai multe IP-uri, cate unul pentru fiecare site. IP-urile se configureaza pentru fiecare interfata sau se pot crea interfete virtuale astfel incat unei singure interfete fizice i se pot asocia mai multe IP-uri.

Fiecare nume de domeniu care reprezinta un site se translateaza intr-un alt IP. In functie de IP-ul destinatie din pachet, serverul web alege DocumentRoot al unui anume site si serveste continutul din acesta.

ExempluPresupunem gazduirea a 3 site-uri pe un server. Acestea sunt www.crystalmind.ro, www.invata-online.ro si www.limbistraine.net. Serverul trebuie configurat cu 3 IP-uri cate unul pentru fiecare

Page 150: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

site. In functie de IP-ul destinatie din pachetele pe care le primeste serverul identifica site ul la care se conecteaza clientul si serveste continutul astfel (fiecare site are propriul DocumentRoot): pentru primul IP DocumentRoot este /opt/apache/htdocs/crystal, pentru al doilea IP DocumentRoot este /opt/apache/htdocs/invata, iar pentru al 3-a IP Apache serveste clientilor fisiere din /opt/apache/htdocs/limbistraine

In cazul unui numar mare de site-uri IP-based Virtual Hosting nu este o configuratie scalabila mai ales daca ne referim la un server conectat direct la Internet care trebuie configurat cu IP-uri publice. 2. Named-based Virtual Hosting

Reprezinta varianta cea mai folosita si la indemana de gazduire a mai multor site-uri pe un singur server. Acesta este configurat cu un singur IP catre care sunt rezolvate prin DNS toate domeniile.

ExempluPresupunem gazduirea a doua site-uri www.crystalmind.ro si www.invata-linux.ro. Cele 2 domenii se translateaza catre unicul IP public al serverului care este 88.0.0.1. Un user de pe Internet se va conecta atat la www.crystalmind.ro cat si la www.invata-linux.ro folosind IP-ul 88.0.0.Intrebarea care apare este: cum diferentiaza serverul web la ce site s-a conectat clientul?Raspunsul sta in implementarea protocolului HTTP/1.1 si anume folosirea unui header din protocolul HTTP de catre client numit HOST. Astfel un client va folosi IP-ul destinatie 88.0.0.1 si HOST www.crystalmind.ro pentru a se conecta la primul site si IP-ul destinatie 88.0.0.1 si HOST www.invata linux.ro pentru cel de-al doilea site. In functie de valoarea HOST serverul Apache stabileste DocumentRoot din care trebuie sa serveasca continutul.

Pentru configurarea Named-based VirtualHosting in httpd.conf se adauga: NameVirtualHost 88.0.0.1 <VirtualHost www.crystalmind.ro> ServerName www.crystalmind.ro ServerAdmin [email protected] DocumentRoot /opt/apache/htdocs/crystalmind ErrorLog/opt/apache/error/crystalm_erorr TransferLog /opt/apache/logs/crystalm_access_log </VirtualHost> <VirtualHost www.invata-linux.ro> ServerName www.invata-linux.ro ServerAdmin [email protected] DocumentRoot /opt/apache/htdocs/invata-linux ErrorLog /opt/apache/error/invatal_erorr TransferLog /opt/apache/logs/invatal_access_log </VirtualHost>

Detalii:

Page 151: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Directiva NameVirtualHost specifica serverului Apache ca requesturile catre IP-ul 88.0.0.1 trebuie mai departe sub divizate; pentru fiecare site este nevoie de un container <VirtualHost>; <VirtualHost www.crystalmind.ro> - specifica numele site-ului. Poate fi folosit si IP-ul pe care asculta serverul; Directivele cruciale pentru Named-based Virtual Hosting sunt ServerName care indica valoarea headerului HOST trimis de browser si deci site-ul la care se conecteaza clientul si DocumentRoot care identifica directorul din care serverul va servi continut pentru acel site; restul directivelor sunt optionale, dar recomandate in cazul in care dorim pentru fiecare site sa configuram o alta adresa de e-mail a adminului, un alt fisier cu logurile de eroare sau de transfer etc;

Nota1.Named-based Virtual Hosting functioneaza doar pentru browserele care implementeaza versiunea 1.1 a protocolului HTTP.2.Conceptul de Named-based Virtual Hosting a fost implementat pentru prima data de Apache, ulterior fiind inglobat de cam toate serverele web.

7.6 Controlul accesului la resurse

Modul default de functionare al serverului Apache presupune ca acesta serveste orice fisier din orice director de sub directorul definit de DocumentRoot clientilor. Pentru un site de prezentare acest comportament este acceptabil, dar pentru un sistem informatic, pentru o sectiune de administrare, pentru un Intranet sau pentru un site care contine informatii sensibile sau confidentiale, Apache trebuie sa limiteze accesul la resurse doar pentru clientii autorizati.

Exista 2 moduri in care Apache poate limita accesul la resurse:1. In functie de IP-ul de la care se conecteaza clientul

Aceasta varianta este optima in momentul in care accesul la informatiile confidentiale se realizeaza de la un IP sau grup de IP-uri cunoscute dinainte.

In cazul in care conexiunea are loc de pe Internet limitarea accesului in functie de IP este considerata foarte sigura. IP-ul public este furnizat de un ISP, iar un posibil Cracker nu poate sub nicio forma folosi un IP care nu i-a fost setat de provider. 2. In functie de username si parola

Aceasta varianta este optima in momentul in care accesul la informatiile confidentiale se realizeaza de la IP-uri dinamice, necunoscute apriori cum ar fi cazul utilizatorilor mobili care doresc accesarea informatiei de oriunde s-ar afla.

NotaPentru o securitate crescuta serverul web poate fi configurat pentru ambele moduri de restrictionare a accesului.

Acces in functie de IP

Page 152: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Modulul care introduce directivele ce realizeaza accesul la resursele serverului in functie de IP-ul clientului este mod_authz_host pentru Apache 2.2 si mod_access pentru Apache 1.3 si 2.0

Directivele folosite pentru restrictionara accesului sunt: Order, Allow si Deny si se folosesc in interiorul unui container <Directory> pentru stabilirea accesului la un intreg director, <Location>, <Files> sau <FilesMatch> pentru stabilirea accesului doar la anumite fisiere.

Directiva Allow specifica IP-urile de la care se permit conexiuni. Se pot folosi atat IP-uri cat si clase de IP-uri sau nume de domenii.

Exemplu1. Permite un singru IPAllow from 192.168.0.1 Allow from 88.0.0.1

2. Permite un intreg domeniu ( com sau www.crystalmind.ro). Serverul realizeaza un reverse DNS pentru translatarea IP-ului in nume de domeniu care ulterior este folosit pentru evaluare Allow from .com Allow from www.crystalmind.ro

3. Permite un intreg range de IP-uri folosind un prefix (/8)Allow from 10.0.0.0/8

4. Verifica doar partial (sa inceapa cu 10 sau 172.16)Allow from 10 172.16

5. Permite pentru un IPv6Allow from 2001:db8::a00:20ff:fea7:ccea

6. Permite toate IP-urileAllow from all

Directiva Deny specifica IP-urile de unde nu se permit conexiuni. Modul de folosire este identic cu cel al directivei Allow

Exemplu1. Blocheaza un singur IP Deny from 192.168.0.90

2. Blocheaza un intreg range de IP-uri Deny from 88.0.0.0/16

3. Blocheaza in functie de domeniu. Serverul Apache realizeaza reverse DNS Deny from evil.linux.com

4. Blocheaza conexiuni de la toate IP-urile Deny from all

A 3-a directiva necesara, Order poate avea 2 forme si stabileste ordinea de evaluare. Cele 2 forme sunt:

Page 153: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1. Order Allow,DenyPrima data sunt evaluate toate directivele Allow. Daca nici una nu este adevaratarequestul clientului este rejectat.Deny este policy: ce nu este permis de un Allow este rejectat

<Directory /opt/apache/htdocs/crystalmind.ro/website/cursuri> Order Allow,Deny Allow from crystalmind.ro Deny from 88.0.0.1 </Directory>

Pentru directorul /opt/apache/htdocs/crystalmind.ro/website/cursuri sunt permise doar requesturile de la IP-urile care se rezolva invers in DNS in crystalmind.ro. Requesturile de la 88.0.0.1 precum si restul requesturilor sunt rejectate. 2. Order Deny, Allow Prima data sunt evaluate toate directivele Deny. Daca vreuna este adevarata FARA ca IP ul clientului sa fie "prins" si de o directiva Allow, requestul este rejectat. Requesturile care nu corespund cu nicio directiva Deny sau Allow sunt permise. Allow este Policy: ce nu este rejectat de un Deny este permis

<Directory /opt/apache/htdocs/crystalmind.ro/website> Order Deny,Allow Deny from 88.0.0.1 Deny from 192.168.0.0/24 </Directory>

Pentru directorul /opt/apache/htdocs/crystalmind.ro/website requesturile de la IP-ul 88.0.0.1 sau din subnetul 192.168.0.0/24 sunt rejectate. Restul requesturilor sunt premise din cauza ordinei de evaluare Deny, Allow

Orice fisier cu terminatia sau extensia xls este servit doar daca clientul se conecteaza de la 88.0.0.1 <FilesMatch "\.xls$"> Order Allow,Deny Allow from 88.0.0.1 </FilesMatch>

ImportantModulul de evaluare al directivelor Allow si Deny este diferit de modul de evaluare

a regulilor unui Firewall. Regulile unui firewall sunt evaluate pana cand o regula 'prinde' pachetul caz in care se executa o actiune fara a se mai evalua restul regulilor.

In cazul directivelor Allow si Deny toate regulile se evalueaza pana la final ceea ce determina ca ordinea in care acestea apar sa nu fie importanta ceea ce este in contrast cu un firewall.

Page 154: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

7.7 PHP

Prezentare generalaPHP a fost inventat in 1995 de catre un programator danez pe nume Rasmus

Lerdorf. La inceput PHP insemna "Personal Home Page". In prezent se considera ca PHP reprezinta un acromim recursiv de la "PHP - Hypertext Preprocessor" si este un limbaj de scripting OpenSource care este rulat de serverul web pentru a furniza in mod dinamic continut clientului (browserului).

Programe interpretate versus programe executate

PHP este un limbaj de programare interpretat si nu executat. Alte programe interpretate sunt PERL, Python si Java.

Limbajele executate creaza prin compilare un fisier binar care se ruleaza. De fiecare daca cand se modifica ceva in sursa programului acesta trebuie recompilat. Limbajele compilate sunt C, C++, Visual Basic etc

Limbajele interpretate nu genereaza programe, fisiere binare executabile in urma compilarii. Acestea nu se compileaza. In schimb programul este impartit in mai multe operatii elementare numite opcodes care se executa de catre serverul web (in cazul php de catre Apache) una cate una. Daca se modifica ceva in program, se modifica doar operatia elementara corespunzatoare. De fiecare data cand se acceseza printr-un URL pagina o PHP, serverul trimite pagina spre procesare interpretorului PHP care executa instructiunile din pagina si apoi returneaza cod HTML clientului (IE=Internet Explorer, Firefox etc).

7.7.1 Instalare si compilare

NotaPentru instalarea PHP presupunem existenta serverului Apache instalat conform cu indicatiile din capitolele anterioare.

Instalarea prin compilare a PHP se realizeaza in mod standard folosind scriptul configure, make si make install. Exemplu de mai jos s-a realizat pe Fedora Core 9. In mod IDENTIC se compileaza si instaleaza pe orice distributie Linux. Pasi de urmat: 1. Download sursele ultimei versiuni PHP de pe site-ul producatorului php.net. Acestea pot fi downloadate in orice director din sistem. wget -c http://www.php.net/get/php-5.2.6.tar.bz2/from/ro.php.net/mirror

2. Verificare integritate arhiva tar.bz2 folosind hash-ul sau semnatura digitala (Optionaldar foarte recomandat)3. Decomprimare si dezarhivare arhivaSe ruleaza: tar -xjvf php-5.2.6.tar.bz2 apoi cd php-5.2.64. Rularea scriptului configure care verifica sistemul si anume daca acesta contine toate componentele necesare compilarii si instalarii PHP. Dorim instalarea in directorul /opt/php. Se recomanda rularea scriptului configure de catre un user neprivilegiat.

Page 155: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Se ruleaza: ./configure --with-apxs2=/opt/apache/bin/apxs -with-mysql --prefix=/opt/php

Nota1.Fara optiunea --prefix=/opt/php instalarea are loc in directoarele standard precum /usr/bin, /usr/sbin, /etc. In acest caz ne va fi greu sa gasim fisierele componente sau sa-l dezinstalam/stergem. 2. apxs - APache eXtenSion tool - is a tool for building and installing extension modules for the Apache HyperText Transfer Protocol (HTTP) server. This is achieved by building a Dynamic Shared Object (DSO) from one or more source or object files which then can be loaded into the Apache server under runtime via the LoadModule directive from mod_so.3. Platforma LAMP(Linux+Apache+MySql+PHP/Perl/Python) presupune folosirea ca baza de date a serverului MySql. Platforma pentru aplicatii web presupune interactiunea dintre PHP si Mysql pentru servirea de continut dinamic clientilor din baza de date. Optiunea --with-mysql compileaza in PHP suport pentru MySql.

ImportantIn cazul in care se doreste compilarea PHP cu suport de MySql, componentele Mysql si anume mysql, mysql-server, mysql-devel si mysql-lib trebuie sa fie deja instalate. Altfel scriptul configure returneaza eroare.

5. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat.In urma compilarii rezulta din fisierele sursa fisiere executabile.Se ruleaza: make6. InstalareInstalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii dindirectorul cu surse in directorul dorit ( /opt/php). Comanda poate fi executata doar de root.Se ruleaza: make install

7.7.2 Configurare Apache si PHP

Pentru ca Apache si PHP sa poata comunica si deci lucra impreuna este nevoie de urmatoarele configuratii:1. Editare httpd.conf

Fisierul de configurare al daemonului httpd (serverul Apache) trebuie modificat astfel incat acesta sa incarce modulul PHP (daca PHP a fost compilat ca modul pentru Apache exemplul nostru si cel mai folosit in practica) si sa trimita fisierele cu extensia .php preprocesorului PHP pentru a le executa.

Page 156: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

In httpd.conf trebuie adaugat: LoadModule php5_module modules/libphp5.so <Files *.php> SetOutputFilter PHP SetInputFilter PHP </Files> AddType application/x-httpd-php .php

NotaDe multe ori daca PHP a fost compilat ca modul pentru Apache folosind apxs2, liniile de mai sus sunt adaugate automat in httpd.conf, caz in care trebuie doar sa verificam prezenta lor.Fisierul care reprezinta modulul PHP apare in directorul cu module al lui Apache, in cazul nostru /opt/apache/modules. Numele modulului poate sa difere, caz in care trebuie sa adaptam in httpd.conf

2. Testare Pentru a testa functionarea Apache + PHP se creeaza un fisier cu extensia .php

(Exemplu: php_test.php) in DocumentRoot care sa contina urmatoarele linii: <?php phpinfo(); ?>

Ulterior se acceseaza acest fisier conectandu-ne cu Browserul la serverul web si cerand fisierul php_test.php.

ImportantIn cazul in care Browserul doreste downloadarea fisierului sau afiseaza exact cele 3 linii de mai sus, PHP nu a fost instalat sau configurat corect. Este nevoie de troubleshooting.

In cazul in care PHP (si Apache) a fost instalat si configurat corect la accesarea paginii php_test.php este afisat mult continut care indica modul de operare al PHP, diferite variabile.

3. Configurare PHPConfigurarea modului in care PHP opereaza este controlata de un fisier numit

php.ini. In mod express acest pas a fost trecut dupa pasul de testare pentru simplu fapt ca locatia unde PHP cauta fisierul php.ini nu este standard, nu poate fi modificata decat la compilare, iar unui user incepator ii este foarte greu sa gaseasca locatia sa.

Locatia fisierului php.ini se identifica in outputul generat de pagina php_test.php de la pasul 2. Dupa identificarea locatiei in care trebuie sa se gaseasca php.ini, un 'schelet' de fisier trebuie copiat in directorul respectiv (in cazul nostru este /opt/php/lib). O astfel de mostra gasim in directorul cu surse si se numeste php.ini-recommented. Acesta se copiaza in /opt/php/lib sub numele de php.ini si se editeaza pentru a configura modul de operare al PHP.

7.7.3 Securitate Web

Page 157: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Securitatea unui sistem informatic este la fel de buna ca cea mai slaba veriga a sa. Este suficient ca un cracker sa compromita serverul web sau sa ruleze un exploit la nivel de aplicatie cum ar fi un Sql Injection pentru ca apoi sa mai aiba un mic pas pana sa devina root pentru intreg sistemul de operare.

Platformele web formate din server http, php, server baze de date si aplicatiile instalate au un istoric plin de vulnerabilitati. De foarte multe ori compromiterea unui sistem de operare a plecat de la configurarea gresita a modului in care PHP opereaza sau de la serverul MySql ori Apache. Securitatea informatiei este un proces continuu, o stare de fapt. Securizarea unui server presupune cunostinte avansate si experienta. Imi propun enumerarea catorva aspecte minimale care conduc catre o platforma web stabila si sigura.

1. Ascunderea a cat mai multa informatie despre serverul web care ruleaza, versiunea acestuia, versiunea de PHP sau de MySql.

Primul pas al oricarui atac informatic este identificarea serviciilor si versiunilor care ruleaza. Ulterior un cracker experimentant sau nu, poate cauta pe Internet exploit-uri pentru anumite versiuni de Apache sau de PHP si le poate rula.

Ascunderea de informatie in vederea cresterii securitatii informatice poarta denumirea de"security through obscurity". In general acest proces nu imbunatateste securitatea generala a sistemului ci doar evita atacuri din partea persoanelor neexperimentate si care cauta tinte la intamplare. 2. Instalarea ultimei versiuni stabile de server web, php si server MySql

Intre specialistii in securitate si crackeri exista o cursa continua. Oricat de bun ar fi un produs acesta nu poate fi 'bug-free'. Periodic se descopera erori de programare in majoritatea serverelor care pot fi exploatate de persoane rau intentionate. Singura solutie finala este aplicarea unui patch care 'astupa' respectiva 'gaura de securitate'. 3. Rularea serverului Apache si MySql sub propriul user care sa nu mai fie folosit in alt scop. Exemplu: apache ruleaza sub wwwuser si wwwgroup, iar MySql sub mysqluser si mysqlgroup 4. Setarea accesului la resursele oferite de server in functie de IP-ul clientilor sau de username si parola.

Directoarele sau fisierele sensibile si confidentiale trebuie protejate impotriva accesului neautorizat. Acces neautorizat poate fi chiar si indexarea paginilor respective de catre motoare de cautare precum Google. In ultima vreme multe tipuri de atacuri se bazeaza pe cautarea pe Google de continut confidential care a fost indexat datorita configurarii necorespunzatoare a serverelor HTTP. 5. PHP Session Security. 6. Instalarea si configurarea mod_status pentru a urmarii activitatea si performantele serverului Apache 7. Instalarea Apache in jail (chrooted) 8. Instalarea si configurarea mod_securitymod_security reprezinta cel mai cunoscut si folosit WAF (Web Application Firewall). Acesta este extrem de complex, iar pentru intelegerea aprofundata a modului in care acesta functioneaza este nevoie de cunostinte avansate.

Page 158: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

9. Folosirea protocolului HTTPS in loc de HTTP pentru continut confidential. Oricat de sigur ar fi configurat sistemul si oricat de bun ar fi firewall-ul, informatia poate fi captata si citita pe drumul dintre sursa si destinatie in cel mai simplu mod fiindca aceasta circula in clar. Solutia este criptarea informatiei folosind ssl/tls (HTTPS). 10. MySql Security setarea de parola pentru userul root stergerea userilor anonimi

ImportantNu exista sistem 100% sigur. Oricat de pregatit este adminul si oricata munca depune in vederea securizarii serverului, tot exista posibilitatea ca acesta sa fie compromis. Sansa ca serverul sa fie compromis trebuie luata in calcul intotdeauna. De multe ori un backup eficient reprezinta salvarea.

Page 159: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Capitolul 8 Serverul MySql

8.1 Prezentare generalaMySql reprezinta cel mai cunoscut si folosit RDBMS (Relational database

management system) OpenSource scris aproate integral in C/C++.

NotaIn vara anului 2008 Sun Microsystems a cumparat firma MySql AB din Suedia, producatorul MySql.

Exista in prezent peste 11 milioane de instalari MySql pe servere in productie din intreaga lume. Succesul realizat de aceasta baza de date se datoreaza in primul rand costurilor minime si performantelor crescute. Proprietati: - MySql ruleaza client-server; - mysqld reprezinta serverul baze de date (daemonul mysql), mysql reprezinta clientul de mysql in linie de comanda, iar mysqld_safe este un script cu ajutorul caruia se initializeaza serverul mysql; - fisierul de configurare atat pentru client cat si pentru server este /etc/my.cnf; - in momentul in care clientul se conecteaza la server prin retea, acesta se conecteaza folosind TCP si portul destinatie 3306 pe care asculta serverul. Daca serverul si clientul se afla pe acelasi host, comunicatia dintre acestea nu se realizeaza prin TCP/IP ci printr-un Socket care este default /var/lib/mysql/mysql.sock; - administrarea serverului de baze de date se realizeaza folosind clientul mysql, utilitarul mysqladmin care ruleaza in consola, MySql Administrator care ruleaza grafic atat pe Linux cat si pe Windows sau phpMyAdmin in cazul aplicatiilor web; - MySql ruleaza excelent impreuna cu PHP ceea ce a dus si la numele de "the dynamic duo". Printre aplicatiile care folosesc PHP si Mysql gasim CMS (Content Management System) precum Drupal, Joomla!, WordPress, Moodle dar si site-uri celebre precum Wikipedia;

ImportantPentru a putea folosi PHP si Mysql pachetul php-mysql trebuie sa fie instalat.

Description: The php-mysql package contains a dynamic shared object that will add MySQL database support to PHP. MySQL is an object-relational database management

Page 160: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

system. PHP is an HTML-embeddable scripting language. If you need MySQL support for PHP applications, you will need to install this package and the php package.

8.2 Instalare MySqlCompilarea componentelor MySql poate fi dificila datorita dependintelor dintre

acestea. Pe cat posibil se recomanda instalarea automata folosind un manager de pachete precum yum sau apt-get.

Pachetele care trebuie instalate pentru o functionare corecta sunt: mysql, mysql-server, mysql-libs, mysql-devel si php-mysql.

8.2.1 Configurare MySqlConfigurare de baza

Fisierul de configurare atat pentru server ( mysqld), pentru client ( mysql) cat si pentru scriptul msyqld_safe este default /etc/my.cnf

Sectiunea [mysqld] sau [server] identifica directivele de configurare pentru server, sectiunea [client] sau [mysql] identifica directivele pentru client, iar sectiunea [mysqld_safe] identifica directivele pentru scriptul de initializare mysqld_safe.

Exemplu /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 [client] port=3036 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

Detalii:#(diez) -> reprezinta un comentariu;[mysqld] -> identifica inceputul sectiunii de configurare pentru server;datadir -> reprezinta directorul in care se gasesc fizic fisierele care reprezinta bazele dedate;socket -> reprezinta fisierul de tip socket prin care clientul comunica cu serverul dacaacestea se gasesc pe acelasi host;user -> user-ul sub care ruleaza serverul;[client] -> identifica inceputul sectiunii de configurare pentru client (mysql);port -> seteaza portul la care se conecteaza clientul;

Page 161: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

[mysqld_safe] -> identifica inceputul sectiunii de configurare pentru criptul de initializare al serverului;

Configurarea de baza a serverului mysql presupune: 1. Stabilirea username-ului sub care ruleaza serverul. Acesta nu trebuie sa fie un user generic precum nobody ci un user folosit special si doar pentru mysql. In fisierul de configurare /etc/my.cnf: user=mysql 2. Setarea ca owner pentru directorul in care se gasesc bazele de date ( /var/lib/mysql) a userului sub care ruleaza serverul. Se ruleaza: chown -R mysql /var/lib/mysql 3. Initializarea bazelor de date mysql si testServerul MySql pastreaza informatii despre userii care se conecteaza la acestas, permisiunile fiecaruia etc tot intr-o baza de date. Aceasta se numeste mysql. test este o baza de date folosita pentru benchmarking sau alte teste.Se ruleaza: mysql_install_db care este un script ce creeaza bazele de date mysql si test 4. Securizarea serverului MySql Serverul MySql autentifica fiecare conexiune pe baza unui cont. Un cont mysql este format din username+parola+host, unde host reprezinta IP-ul sau numele hostului de unde se conecteaza userul.

Exemplu: un cont pentru conectarea la server poate fi: dan+passtest+localhost, iar dan+passtest+192.168.0.1 reprezinta un cu totul alt cont fara nicio legatura cu primul. Acest concept este fundamental pentru intelegerea modului in care MySql functioneaza.

ImportantServerul MySql instalat default adauga o grava problema de securitate. Implicit

exista 3 conturi de root fara parola. Acestea sunt root+PAROLA_LIPSA+localhost, root+PAROLA+LISPA+127.0.0.1 si root+PAROLA_LISPA+hostname

Userii folositi de mysql sunt "mysql only users". Acestia nu trebuie sa exista in /etc/passwd si se folosesc doar pentru conectarea la server. Implicatia modului in care mysql opereaza default este ca ORICE user se poate conecta ca root de mysql la server si are acces complet.

Securizarea minimala a serverului presupune stergerea userilor root sau setarea unei parole pentru acestia. Etape (serverul mysqld trebuie sa ruleze): a) conectarea la server de pe localhost folosind userul root fara parola mysql -h localhost -u root b) alegerea bazei de date mysql pentru urmatoarele comenzi mysql>use mysql; c) setarea de parole pentru userii root sau stergerea acestora Userii de mysql impreuna cu toate privilegiile acestora se gasesc in tabelul user din baza de date mysql.

Page 162: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Colectarea de informatii:- pentru vizualizarea structurii tabelei user se ruleaza: mysql>describe user;- coloanele care prezinta interes sunt: user, password si host - pentru vizualizarea conturilor de root se ruleaza: select user,password,host from user;

Setare parola pentru un cont: mysql>set password for [email protected]=password('parola_dorita'); Stergere cont root fara parola: mysql>delete from user where user='root' and password=''; Crearea unui nou cont(admin+mypass+192.168.0.1) cu setarea de privilegii: mysql>grant all privileges on mysql.* to [email protected] identified by 'mypass';

- mysql reprezinta baza de date pe care userul va avea privilegii, iar * inlocuieste orice tabel din baza de date. Dupa executarea comenzii de mai sus userul admin cu parola mypass care se conecteaza la server de la 192.168.0.1 va avea drepturi totale pentru toate tabelele din baza de date mysql. Acesta este echivalent cu root.

Nota1. Dupa crearea sau modificarea informatiilor despre un cont se recomanda rulareacomenzii msyql>flush privileges; si restartarea serverului.2. Un user se conecteaza la server folosind comanda msyql executand din consola: mysql -h IP_SERVER_MYSQL -u USERNAME -p, unde -h identifica serverul, -u username-ul cu care se conecteaza, iar -p faptul ca acesta are parola setata.

8.3 PHP & MySqlPlatforma pentru aplicatii web numita LAMP (Linux+Apache+MySql+PHP)

presupune folosirea bazei de date MySql si a limbajului de scripting PHP pentru manipularea informatiilor din baza de date.

Pentru ca PHP sa poata interactiona cu MySql sunt necesare:- PHP trebuie sa fie compilat cu suport de MySql (optiunea --with-mysql a scriputului configure). Pentru detalii recititi capitolul "PHP - Compilare si instalare" a acestui curs; - PHP ruleaza ca modul pentru Apache si interactioneaza corect cu serverul HTTP. Pentru detalii recititi capitolul "Configurare Apache si PHP" a acestui curs; - libraria php-mysql trebuie sa fie instalata. Aceasta librarie contine un set de functii PHP pentru interactiunea cu serverul baze de date ( Exemplu: mysql_connect, mysql_fetch_assoc, mysql_array etc); - un cont (username+parola+host) mysql folosit in scripturile PHP pentru conectarea la baza de date;

NotaPlatforma pentru aplicatii web LAMP presupune

Page 163: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Linux+Apache+MySql+Php/Perl/Python. Multi developeri de aplicatii web folosesc sistemul de operare Windows ca si mediu de programare ceea ce a dus la termenul de WAMP (Windows+Apache+MySql+Php/Perl/Python). Toate componentele platformei adica serverul Apache, Mysql si PHP ruleaza si pe Windows. Acestea pot fi instalate independent sau folosind anumite programe care le contin pe toate cele 3 componente. Astfel de programe sunt EasyPHP sau Wamp Server. Aplicatiile web profesionale sunt gazduite pe servere Linux daca acestea folosesc Apache. De multe ori programatorii dezvolta aplicatiile de Windows pe WAMP, iar ulterior in faza de productie acestea sunt mutate pe Linux. Programatorul nu trebuie sa cunoasca in mod detaliat cum se instaleaza si configureaza un server, cum functioneaza acesta pentru a crea aplicatii de calitate. Programarea si Administrare de Sistem sunt doua profesii diferite.

NotacPanel reprezinta o solutie de administrare a unui server Linux folosind un Browser. Se utilizeaza in special pe serverele dedicate de hosting unde sarcinile administrative sunt multe si dese. Cu ajutorul cPanel se poate configura Apache, PHP, Mysql, se pot crea conturi de e-mail, seta parole, vizualiza procese etc. Dezavantajul este o flexibilitate si un control oarecum scazut. Adminul nu stie exact ce comenzi sau programe ruleaza cPanel in spate, unde salveaza fisire etc. cPanel nu este un produs gratuit.Plesk este o alta aplicatie folosita pentru administrarea LAMP. Niciun program de administrare grafic nu poate inlocui complet consola.

8.4 NETFILTER

8.4.1 Prezentare generalaNETFILTER repezinta un framework din Kernelul de Linux responsabil cu filtrarea

pachetelor, marcarea acestora in vederea prioritizarii traficului, modificarea structurii headerelor de layer3 (Header IP) si layer4 (Header TCP sau UDP), Source NAT, Destination NAT/Port Forwarding etc.

ImportantComparativ cu alte sisteme de operare precum Windows in care se pot instala o

varietate de aplicatii de tip firewall, NETFILTER reprezinta SINGURA posibilitate in Linux de realizarea a unui firewall, NAT, marcare si modificare de pachete, in general tot ce inseamna interactiune cu pachetele.

NotaSuportul pentru NETFILTER trebuie sa fie compilat in Kernel sau ca modul. In cazul in care kernelul nu cuprinde NETFILTER acesta trebuie recompilat. NETFILTER este in "kernel space".iptables este o comanda cu ajutorul careia putem comunica cu NETFILTER. Iptables este

Page 164: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

in "user space".

FirewallUn Firewall reprezinta o componenta a infrastructurii de securitate care separa

retele de calculatoare sau calculatoare care au nivele diferite de securitate. Un firewall poate fi de 2 feluri:a) Hardware - echipament dedicat, special creat, care are drept scop filtrarea datelor dintre 2 entitati ( Exemplu: Cisco ASA).b) Software - aplicatie, care ruleaza pe calculator(server) impreuna cu alte programe careare acelasi scop ca si un firewall hardware

NotaUn firewall hardware foloseste software pentru a realiza filtrarea. Pe langa filtrarea propriu zisa un firewall hardware are si alte functii precum VPN, criptarea datelor etc.

ImportantFiltrarea pachetelor se bazeaza pe headerele protocoalelor din stiva TCP/IP. O

intelegere foarte buna a acestor protocoale (inclusive structura headerelor) este esentiala pentru crearea/configurarea unui firewall eficient.

Exista 3 generatii de firewall:1. Packet based Filtreaza in functie de campurile din headerele de la Layer 3 (Network) si 4 (Transport) ale OSI. Nu diferentiaza intre pachete. 2. Circuit-based numit si stateful firewallFiltreaza in functie de campurile din headerele de la Layer 3 (Network/IP) si 4 (Transport/TCP,UDP) OSI. Suplimentar se tine cont de relatiile dintre pachetul curent si celelalte.Exemplu: un pachet adresat hostului local este permis daca acesta reprezinta raspuns la un pachet generat din interior (de hostul local). 3. Application Layer Firewall (Proxy Based Firewalls) Firewall care "citeste" datele de la nivelul aplicatie (FTP/HTTP/DNS etc).

In Linux singura modalitatea de a crea un firewall este reprezentata de arhitectura NETFILTER. Aceasta arhitectura foloseste comanda iptables (user space tool) pentru afiltra pachetele de date.

NETFILTER este o tehnologie foarte avansata care permite crearea unui firewall de la zero extrem de eficient care poate fi folosit cu incredere pe servere din mediul Enterprise.

NETFILTER inglobeaza caracteristicile tuturor celor 3 generatii amintite mai sus (aplication layer firewall cu module speciale).

8.4.2 Structura NETFILTERa) Chains

Page 165: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

NETFILTER foloseste default 5 chain-uri numite si hooks (carlige) prin care pachetele trec si in care NETFILTER poate interactiona cu acestea. Acestea sunt de fapt puncte de interactiune cu pachetele.

Cele 5 chain-uri predefinite sunt:1. PREROUTING

Acest chain este atins de pachete inaintea procesului de routare, imediat ce driverul placii de retea a acceptat pachetul. Este folosit pentru:- modificarea headerelor pachetelor (mangling) inaintea procesului de rutare; Exemplu: modificare TOS (Type of service) sau modificare TTL (Time to live) pentru a influenta procesul de rutare - DNAT (Destination NAT sau Port Forwarding); In acest chain trebuie evitata filtrarea fiindca nu toate pachetele trec prin el.

2. INPUT Prin acest chain trec pachetele destinate calculatorului local. Orice pachet care

ajunge la statia locala trece prin acesta indiferent pe ce interfata intra sau de unde vine.Este folosit pentru:- modificarea pachetelor (mangling) dupa rutare, dar inainte sa fie trimise procesului local; - filtrarea pachetelor;

3. OUTPUT Prin acest hook trec pachetele generate de calculatorul local.

Este folosit pentru:- filtrare sau manipulare pachete generate de hostul local;

4. FORWARDPrin acest chain trec pachetele care tranziteaza hostul (acesta a devenit router, leaga

minim 2 retele). Pachetele care trec prin chain-ul FORWARD nu sunt destinate hostului local si nici nu sunt generate de acesta.

Page 166: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

5. POSTROUTING Ultimul chain prin care trec pachetele, dupa procesul de rutare. Prin acest chain trec

atat pachetele care transiteaza hostul daca acesta este Router cat si cele generate de host. Este folosit pentru:- modificarea pachetelor (mangling) dupa procesul de rutare, dar inca pe hostul local; - SNAD (Source NAT & Masquerading);

Fiecare din aceste 5 hook-uri/chain-uri (puncte de interactiune cu pachetele) se foloseste pentru a interveni intr-un anume mod asupra pachetelor. Exista 3 destinatii posibile pentru un pachet functie de care acesta trece prin anumite chain-uri din cele 5:a) vine din retea si este destinat hostului local;b) este generat de hostul local;c) trece prin hostul local;

NotaIptables ofera posibilitatea definirii de chainuri de catre utilizatori pe langa cele 5 chainuri default. Acest subiect este considerat avansat si va fi tratat in amanunt in cursul "Advanced Linux & INFOSEC" disponibil de asemenea online.

b) TablesFiecarui hook/chain NETFILTER ii este asociat un set de reguli definite intr-un

tabel. In momentul in care un pachet "loveste" un chain acesta este verificat de fiecare regula din tabel.

O regula contine criterii care trebuie satisfacute de pachet si un target precum ACCEPT, DROP sau SNAT. Targetul este actiunea intreprinsa daca pachetul satisface regula din tabel. Fiecare regula are un target.

ExempluCerinta: Dorim sa blocam/dropam toate pachetele care vin catre serverul SSH ce ruleaza pe hostul local si asculta pe portul TCP/22. Mod realizare: Orice pachet destinat hostului local va trece prin chain-ul INPUT. Acesta va fi si chain-ul in care intervenim pentru droparea/blocarea pachetelor ssh. Intr-un tabel (numit filter) atasat chainului INPUT vom adauga o regula compusa din criterii precum: pachetul este destinat hostului local, iar portul destinatie este 22. Target-ul va fi DROP.

In mod implicit NETFILTER ofera 4 tabele ce contin reguli pentru "prinderea"

pachetelor si care se ataseaza de cele 5 chain-uri. Tabele NETFILTER: 1. filterEste folosit doar pentru filtrarea pachetelor ( ACCEPT sau DROP) si se foloseste doar pe chainurile FORWARD, INPUT sau OUTPUT. 2. natEste folosit doar pentru NAT (SNAT si DNAT). Doar primul pachet dintr-un stream va fi procesat de regulile din acest tabel. Asupra celorlalte pachete se va actiona identic. Se poate atasa de chainurile PREROUTING in cazul SNAT si POSTROUTING in cazul

Page 167: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

DNAT.

3. mangleEste folosit pentru manipularea/modificarea pachetelor si anume modificarea headerelor de Layer3 si Layer4 (modificare tos, ttl etc). Acest tabel poate fi atasat de orice chain. 4. rowSe foloseste doar pentru marcarea pachetelor care nu trebuie sa fie procesate de "connection tracking system". Tabelul se poate folosi doar pentru chainurile PREROUTING si/sau OUTPUT. Mecanismul de "connection tracking" este consumator de resurse, astfel pentru un anumit tip de trafic se poate opri connection tracking system.Exemplu: excluderea traficul generat pentru localhost

NotaCele 4 tabele descrise mai sus sunt implicite. Acestea nu pot fi sterse si nici alte tabele nu pot fi create.

c) The state machine Connection tracking este componenta NETFILTER care ofera acestuia statutul de firewall stateful. Acesta poate lua decizii de filtrare a pachetelor nu in functie de headerul Layer3 (IP) si Layer4 (TCP/UDP) ci in functie de relatia pachetului cu celelalte pachete. Connection tracking este realizat de un framework din kernel care se numeste conntrack. Acesta poate fi incarcat ca modul sau poate fi parte integranta a kernelului. conntrack reprezinta o parte din NETFILTER care identifica pachetele ca aflandu-se intr o anume stare in functie de relatia cu celelalte pachete din acelasi stream. NETFILTER defineste 4 stari pentru fiecare pachet:1. NEWPrimul pachet dintr-o conexiune generat de hostul local se gaseste in starea NEW.2. ESTABLISHEDPachetul destinat hostului local ca raspuns la pachetul trimis anterior isi schimba starea in ESTABLISHED in momentul in care intra in PREROUTING. Sunt toate pachetele dintr o conexiune mai putin primul care a initiat conexiunea si care se afla in starea NEW.3. RELATEDIn starea RELATED se gasesc acele pachete legate de un alt flux de date Exemplu: in cazul FTP activ, conexiunea de date de pe portul 20 ca raspuns la conexiunea de control initiata catre portul 214. INVALIDSunt acele pachete ale caror header contine informatii neconcordante. Exemplu: un pachet al carui header TCP contine atat flag-ul syn cat si fin

Informatiile pe care modulul conntrack le foloseste pentru a sti in ce stare se gaseste un pachet, pot fi vizualizate in /proc/net/nf_conntrack (FC9) tcp 6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775

Page 168: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

\ dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 \ dport=32775 [ASSURED] use=2

Detalii:tcp - protocolul de transport;6 - valoarea campului protocolului din headerul IP;117 - nr. de secunde in care aceasta intrare este valida. Timpul este decrementat continuu pana cand apare trafic legat de aceasta conexiune. Apoi timpul este resetat cu valoarea default;SYN_SENT - trafic doar intr-o directie;src - ip source;dst - ip destinatie; sport - port sursa;dport - port destinatie; UNREPLIED - nu a existat trafic in ambele directii. In momentul in care apare trafic in ambele directii UNREPLIED se inlocuieste cu ASSURED; ASSURED (la final) - informatii despre aceasta conexiune nu vor fi sterse cand se atinge nr. maxim de conexiuni;

NotaFisierele referitoare la NETFILTER apar doar dupa ce se foloseste conntrack machine adica dupa ce se incarca in memorie firewall-ul ce contine regule cu referire la starile unui pachet.

8.4.3 Sintaxa iptablesCommanda iptables (user space tool) se foloseste pentru a comunica cu

NETFILTER.

Important1. Scopul comenzii iptables este de a adauga, sterge, inlocui, lista, vizualiza etc reguli din cele 4 tabele standard care sunt atasate de cele 5 chainuri.2. In mod default nu exista nicio regula in tabele, acestea fiind goale. Implicit nu exista firewall. 3. Un pachet traverseaza in mod secvential regulile din tabelele atasate chainurilor pana in momentul in care o regula "prinde" pachetul, caz in care se executa TARGET-ul regulii. Restul regulilor din tabel nu se mai verifica ulterior.4. Daca pachetul nu este prins de nicio regula din tabel se executa politica default (-P POLICY) care este implicit ACCEPT.

Page 169: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Structura comenzii iptables este:iptables -t nume_tabel -OPERATIE_ASUPRA_CHAIN NUME_CHAIN -criterii –j TARGET

unde: Nume tabel:filter natrawmangle

NotaNumele tabelului in care se adauga regula trebuie scris cu litera mica. Daca se omite numele tabelului acesta este default filter.Exempluiptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT este echivalent cu: iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Operatii asupra unui chain-A -> adaugare regula la sfarsitul tabelului atasat chainului;-I -> adaugare regula pe prima pozitie in tabelul atasat chainului;-L -> listare reguli;-P -> policy, actiunea default care se executa daca nicio regula nu prinde pachetul;-N -> creare chain nou definit de utilizator;-X -> sterge chain definit de utilizator;-F -> flush, goleste regulile din tabelul atasat chainului;-Z -> zero, reset counters;

NotaOperatiile asupra regulilor din tabelele atasate chainurilor trebuie scrise cu litera mare. Exemplu:Adauga o regula la sfarsitul tabelului filter (default daca nu se specifica) pentru chain-ul OUTPUT care permite trimiterea de pachete catre IP-ul din spatele domeniului www.invata-online.ro1. iptables -A OUTPUT -d www.invata-online.ro -j ACCEPTAdauga policy DROP pentru INPUT. Orice pachet destinat hostului local care nu este acceptat de nicio regula din tabelul filter de pe chainul INPUT este dropat2. iptables -P INPUT DROP Sterge toate regulile din tabelul filter (default daca nu se specifica) de pe chainul FORWARDING3. iptables -F FORWARDING

Page 170: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Nume Chain:PREROUTINGINPUTOUTPUTFORWARDPOSTROUTING

NotaNumele chainului se scrie cu litera mareExemplu:1. Adaugam o regula in tabelul nat din POSTROUTING care realizeaza SNAT. IP-ul privat 10.0.0.3 este inlocuit cu ip-ul public al ruterului linux care este 80.0.0.10 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.3 -j SNAT --to-source 80.0.0.10 2. Dropeaza toate pachetele generate de hostul local catre orice server http care daca acesta asculta pe portul 80 iptables -A OUTPUT -p tcp --dport 80 -j DROP

Criterii-s IP_sursaExemplu: -s 80.0.0.1 sau -s 192.168.0.0/24 sau -s 0/0. Specifica IP-ul sursa din pachet. 0/0 inseamna orice IP-d IP_destExemplu: -d 182.0.10.1 sau -d 10.10.0.0/26 sau -d 0/0 -> specifica IP-ul destinatie dinpachet. 0/0 inseamna orice IP-p protocolExemplu: -p tcp sau -p udp sau -p icmp--sport port_sursa Exemplu: iptables -I INPUT -p udp --sport 53 -j DROP -> dropeaza toatea pachetele UDP care sunt destinante hostului local si vin de la un server DNS (port 53)--dport port_destExemplu: iptables -A FORWARD -p tcp --dport 8080 -j DROP -> dropeaza toatapachetele catre portul tcp 8080 care tranziteaza ruterul linux -i interfata_inExemplu: iptables -A INPUT -i eth0 -j ACCEPT -> accepta toate pachetele destinate hostului local care intra pe interfata eth0-o interfata_outExemplu: iptables -t mangle -A OUTPUT -o eth1 -j TTL --ttl-set 67 -> modifica TTL-ul din headerul IP setand valoarea 67 pentru toate pachetele generate de hostul local care ies pe interfata eth1

NotaIntre criterii unei reguli exista SI logic. Acestea trebuie sa fie adevarate simultan pentru ca pachetul sa fie "prins" de regula si sa se executa TARGET-ul regulii.

Page 171: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

TargetSpecifica actiunea intreprinsa asupra pachetului daca criteriile sunt indeplinite.ACCEPT -> pachetul este acceptat;DROP -> pachetul este dropat;REJECT -> pachetul este rejectat si hostul raspunde cu un mesaj de eroare sursei;LOG -> logheaza/salveaza informatii despre pachet intr-un fisier;LIMIT -> limiteaza nr. de pachete pe unitatea de timp;SNAT -> realizeaza source nat;MASQUERADE -> realizeaza source nat;DNAT -> realizeaza destination nat/port forwarding;TTL -> modifica TTL din pachet (headerul IP);

NotaNumele targetului se scrie cu litera mare.

ImportantCuvintele cheie de mai sus trebuie scrise cu litera mare sau litera mica intocmai,

altfel rezulta o eroare.Rezumat:- numele tabelului se scrie cu litera mica (-t nat); - operatia asupra chain-ului se scrie cu litera mare (-A); - numele chain-ului se scrie cu litera mare (FORWARD); - criteriile se scriu cu litera mica (-s 192.168.0.0/16); - targetul se scrie cu litera mare (-j DROP);

8.4.4 Scenarii si exemplePentru a crea un firewall folosind NETFILTER, singura modalitate in Linux, exista

mai multe posibilitati:

1. Folosind scripturi deja create precum firestarter

Aceste scripturi contin o sectiune de configurare unde adminul seteaza modul in care firewall-ul va opera (alege porturile pe care asculta severele locale si catre care se pot conecta utilizatorii, seteaza IP-urile de la care se accepta conexiuni etc).

Scriptul odata rulat genereaza in spate comenzi iptables. Modalitatea este recomandata pentru adminii incepatari care nu doresc un control total al modului in care firewall-ul opereaza. 2. Folosind aplicatii grafice disponibile in GNOME sau KDE.

Scopul cursului este de a forma administratori de sistem pentru administrarea de servere. Serverele Linux ruleaza in runlevel 3 fara mod grafic, iar intreaga administrare se face remote folosind ssh din consola in mod text. 3. Creand propriul firewall de la zero.

Aceasta este modalitatea cea mai recomandata. Chiar daca la un moment dat vom folosi din anumite considerente sau politici stabile un script general gata facut, pentru o

Page 172: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

buna intelegere a modului in care NETFILTER functioneaza orice admin trebuie sa creeze si sa testeze un firewall de la zero.

ImportantComenzile iptables se pot executa direct in consola. Pentru o buna organizare

metoda cea mai folosita este urmatoarea: se creaza im script care contine comenzile iptables si care se executa.

NotaLa primul contact cu NETFILTER si iptables, acestea pot parea extrem de complexe cu multe optiuni greu de retinut. Dupa cateva exercitii sintaxa iptables si modul de organizare se va clarifica si va deveni natural (presupunand o buna cunoastere a stivei TCP/IP).

1) Firewall basic

ImportantCrearea unui firewall eficient folosind comanda iptables poate avea loc doar dupa

intelegerea in profunzime a conceptelor prezentate in sectiunile anterioare. Exersati doar dupa ce notiunile de CHAIN, tabele, reguli, traversarea chainurilor etc va sunt foarte clare !

NotaRegulile unui firewall se scriu intr-un fisier text, caruia i se seteaza ulterior dreptul de executie si se ruleaza pentru a fi incarcat in memorie (exceptie acolo unde este precizat ca rularea comenzii iptables are loc direct din consola).

NotaPrima regula dintr-un firewall este aceea care sterge orice firewall existent ( iptables -F). Altfel rulari succesive ale scriptului determina incarcarea aceleiasi reguli de mai multe ori.

Scenariul 1Se doreste obtinerea de help pentru comanda iptables pentru diferite optiuni ale

acesteia.

NotaIn general se completeaza comanda iptables pana la momentul la care dorim obtinerea helpului apoi se foloseste optiunea -h. Comanda se executa direct in consola

a) ICMP help, specificarea tipurilor ICMP iptables -p icmp -h Output generat: ICMP v1.4.0 options: --icmp-type [!] typename match icmp type (or numeric type or type/code) Valid ICMP Types:

Page 173: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

any echo-reply (pong) destination-unreachable network-unreachable host-unreachable protocol-unreachable port-unreachable fragmentation-needed source-route-failed network-unknown host-unknown network-prohibited host-prohibited TOS-network-unreachable TOS-host-unreachable communication-prohibited host-precedence-violation precedence-cutoff source-quench redirect network-redirect host-redirect TOS-network-redirect TOS-host-redirect echo-request (ping) router-advertisement router-solicitation time-exceeded (ttl-exceeded) ttl-zero-during-transit ttl-zero-during-reassembly parameter-problem ip-header-bad required-option-missing timestamp-request timestamp-reply address-mask-request address-mask-reply

b) Obtinerea de informatii despre filtrarea dupa MAC (doar in LAN). Se foloseste optiunea -m mac. Se poate filtra doar dupa mac sursa si doar pe INPUT. iptables -m mac -h Output generat: MAC v1.4.0 options: --mac-source [!] XX:XX:XX:XX:XX:XX Match source MAC address

c) Obtinerea de informatii despre optiunile referitoare la TCP (specificarea porturilor sursa si destinatie dupa care se filtreaza, filtrarea dupa flaguri etc) iptables -p tcp -h

Page 174: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Output generat: TCP v1.4.0 options: --tcp-flags [!] mask comp match when TCP flags & mask == comp (Flags: SYN ACK FIN RST URG PSH ALL NONE) [!] --syn match when only SYN flag set (equivalent to --tcp-flags SYN,RST,ACK,FIN SYN) --source-port [!] port[:port] --sport ... match source port(s) --destination-port [!] port[:port] --dport ... match destination port(s) --tcp-option [!] number match if TCP option set

Scenariul 2Se doreste crearea unui firewall stateful pentru sistem Linux folosit ca Desktop. Pe

acesta nu ruleaza servere, iar utilizatorul poate comunica cu orice serviciu extern. Cerinte: - hostul poate genera orice fel de trafic TCP, UDP sau ICMP catre orice IP extern; - pachetele destinate hostului sunt acceptate doar daca reprezinta raspuns la traficul generat din interior; - pachetele care reprezinta initializarea unei conexiuni din exterior catre interior sunt filtrate;

#!/bin/bash #stergerea tuturor regulitor din tabelul filter din toate CHAIN-urile iptables -F #permitea tuturor pachetelor generate de host (starea NEW,ESTABLISHED si RELATED) iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #permitea pachetelor care se intorc catre host si nu reprezinta initializarea unei conexiuni(starea ESTABLISHED si RELATED) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #setare policy DROP pe INPUT si OUTPUT. Pachetele care nu sunt prinse de cele 2 reguli de mai sus sunt dropate iptables -P INPUT DROP iptables -P OUTPUT DROP

Scenariul 3Dorim crearea unui firewall statefull pentru Desktop pe care ruleaza si un server

SSH care asculta pe portul TCP/22. Cerinte: - hostul poate genera orice fel de trafic TCP, UDP sau ICMP catre orice IP extern pachetele destinate hostului sunt acceptate doar daca reprezinta raspuns la traficul generat din interior userul se conectaza uneori la host prin SSH de la un anumit IP (Exemplu: IP ul 80.0.0.1 setat in locatia de unde se conecteaza userul) - pachetele care reprezinta initializarea unei conexiuni din exterior (exceptand SSH de la IP-ul de mai sus) catre interior sunt filtrate

#!/bin/bash

Page 175: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

#stergerea tuturor regulitor din tabelul filter din toate CHAIN-urile iptables -F #permiterea pachetelor SSH din exterior catre interior de la IP 80.0.0.1 iptables -A INPUT -p tcp --dport 22 -s 80.0.0.1 -j ACCEPT #permitea pachetelor generate de host (starea NEW,ESTABLISHED si RELATED) iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT#permitea pachetelor care se intorc catre host (starea ESTABLISHED si RELATED) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #setare policy DROP pe INPUT si OUTPUT. Pachetele care nu sunt prinse de cele 2 reguli de mai sus sunt dropate iptables -P INPUT DROP iptables -P OUTPUT DROP

Scenariul 4Se doreste oprirea oricarui firewall care ruleaza pe host cu stergerea oricarei

configuratii de SNAT sau DNAT sau de modificare de pachete.

#!/bin/bash #stergerea tuturor regulilor din tabelul filter de pe toate chainurile iptables -t filter -F #stergerea tuturor regulilor din tabelul nat de pe toate chainurile iptables -t nat -F #stergerea tuturor regulilor din tabelul mangle de pe toate chainurile iptables -t mangle -F #setarea policy ACCEPT pe toate chainurile unde se poate realiza filtrare (INPUT,OUTPUT si FORWARD) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARDACCEPT

Scenariul 5Filtrarea dupa MACCerinte:- se doreste acceptarea de pachete doar de la un singur MAC - scenariu poate fi util cand se doreste limitarea hosturilor cu care poate comunica un - server in LAN, sau comunicarea doar cu default gateway si deci doar pe Internet

#!/bin/bash iptables -F #frame-urile cu mac-ul sursa specificat sunt permite pe INPUT iptables -A INPUT -i eth0 -m mac --mac-source 00:1A:92:96:18:58 -j ACCEPT #policy pe INPUT este DROP (restul frame-urilor sunt filtrate) iptables -P INPUT DROP #pe ouput se poate lasa policy ACCEPT iptables -P OUTPUT ACCEPT

Scenariul 6

Page 176: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Listarea unui firewall sau verificare firewall care ruleaza. Comanda se executa direct in consola. iptables -vnLOutputul acestei comenzi ne indica: - policy de pe fiecare CHAIN - regulile din tabelele atasate chain-urilor - nr de pachete prinse de fiecare regula

Comanda de mai sus listeaza toate regulile din tabelul filter (este default) de pe toate chainurile. Daca se doreste listarea regulilor din tabelul nat sau mangle se foloseste: iptables -t nat -vnL

Scenariul 7 Un host Linux a fost transformat in Router pentru conectarea unui LAN la Internet.

Acesta este configurat cu 2 placi Ethernet si realizeaza NAT. Se doreste modificarea TTL-ului inainte procesului de rutare Cerinte: -un ISP pentru nu permite unui client sa creeze o retea locala si deci pentru a impune conectarea unui singur calcular la Internet ar putea trimite toate pachetele catre client cu TTL=1. In momentul in care se conecteaza un Ruter, acesta va decrementa TTL-ul pachetelor IP si fiindca acesta ajunge la zero, ruterul va arunca pachetele -se doreste setarea TTL pentru toate pachetele primite de router la 64 (valoarea default pe Linux) inaintea procesului de rutare

#!/bin/bash #orice retula pentru manipularea pachetului se adauga in tabelul mangle. Fiind se doreste modificarea TTL inaintea procesului de rutare se foloseste chainul PREROUTING. Se mai poate folosi si OUTPUT pentru modificarea ttl-ului pentru pachetele trimise inaintea procesului de rutarea sau POSTROUTING pentru modificare dupa procesul de rutare iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64

Scenariul 8 Logarea de pachete Cerinta: - se doreste logarea tuturor pachetele de tip HTTP care sunt generate de host in vederea analizarii ulterioare a site-urilor vizitate sau pentru analiza continutului headerelor acestora

#!/bin/bash#se foloseste targetul LOG #--log-level specifica facilitatea syslog folosita #--log-prefix specifica un string care se va gasi in fata fiecarui pachet logat pentru o identificare mai usoara iptables -A OUTPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix "HTTP generat de host"

Nota

Page 177: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pentru vizualizarea pachetelor poate fi rulata comanda dmesg fiindca se foloseste facilitatea kernel din syslog. Intr-un setup profesional acestea informatii trebuie redirectate catre un fisier special. Pentru aceasta este nevoie de configurarea syslog. Pentru detalii cititi capitolul "Managementul Logurilor" a acestui curs.

2) Firewall avansat

Scenariu 1Se doreste crearea unui firewall pentru un server din LAN Cerinte: - pe host ruleaza server ssh (tcp/22), http (tcp/80), https (tcp/443), smtp (tcp/25), pop (tcp/110), imap (tcp/143) si dns (dns/53). Toate aceste servicii si doar acestea trebuie sa fie accesibile userilor din LAN - firewall-ul trebuie sa dropeze si sa logheze pachetele invalide - serverul poate accesa pe internet doar servere web (pentru update) si dns (pentru query iterative sau pentru a folosi un forwarder)

#!/bin/bash #VARIABLE SECTION############################################################### TCP_IN_LAN="22 25 80 110 143 443" UDP_IN_LAN="53" TCP_OUT_WAN="80" UDP_OUT_WAN="53" #############################################################

#stergere orice regula din toate tabelele de pe toate chainurile iptables -t filter -F iptables -t nat -F iptables -t mangle -F #logarea pachetelor invalide trimise sau primite de server iptables -A INPUT -m state --state INVALID -j LOG --log-level info --log-prefix "INPUT INVALID PACKET" iptables -A OUTPUT -m state --state INVALID -j LOG --log-level info --log-prefix "OUTPUT INVALID PACKET" #dropara pachetelor invalide trimise sau primite de server iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP #ciclu for pentru adaugarea unei reguli pentru fiecare port tcp permis (conexiune din LAN catre server) for tcp_lan in do #permiterea pachetelor din LAN catre server iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport -j ACCEPT #permitearea raspunsului la pachetele din LAN catre server

Page 178: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

iptables -A OUTPUT -d 192.168.0.0/24 -p tcp --sport -j ACCEPT done #ciclu for pentru adaugarea unei reguli pentru fiecare port tcp permis (conexiune din LAN catre server) for udp_lan in do iptables -A INPUT -s 192.168.0.0/24 -p udp --dport -j ACCEPT iptables -A OUTPUT -d 192.168.0.0/24 -p udp --sport -j ACCEPT done #ciclu for pentru adaugarea unei reguli pentru fiecare port tcp permis (conexiuni de la server catre Internet) for tcp_wan in do iptables -A OUTPUT -d 0/0 -p tcp --dport -j ACCEPT iptables -A INPUT -s 0/0 -p tcp --sport -j ACCEPT done #ciclu for pentru adaugarea unei reguli pentru fiecare port udp permis (conexiune de la server catre Internet) for udp_wan in do iptables -A OUTPUT -d 0/0 -p udp --dport -j ACCEPT iptables -A INPUT -s 0/0 -p udp --sport -j ACCEPT done #adaugare reguli pentru pachete ICMP din LAN (userii din LAN pot da ping la server. Acesta nu raspunde la ping de pe Internet) iptables -A INPUT -s 192.168.0.0/24 -p icmp -j ACCEPT iptables -A OUTPUT -d 0/0 -p icmp -j ACCEPT #setare policy DROP pentru pachetele care nu au fost permise de regulile de mai sus iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP

Scenariul 2 Se doreste crearea unui firewall pentru un Router Linux. Routerul este un host

Linux cu 2 interfete Ethernet. Interfata eth0 este de LAN iar interfata eth1 este de WAN. ISP-ul furnizeaza un singur IP public, iar subnetul de LAN este 192.168.0.0/24 Se considera ca Routerul este deja configurat corect pentru NAT.Cerinte:- userii din LAN pot accesa pe Internet doar site-uri web, pot sa-ti citeasca e-mailul folosind un client dedicat precum Mozilla Thunderbird sau se pot conecta prin ssh la alte servere. Alte servicii nu trebuie sa fie accesibile - Routerul nu poate fi verificat cu ping de pe Internet ci doar din LAN

#!/bin/bash #VARIABLE SECTION############################################################### LAN_ACCESS="22 25 80 110 143 443"

Page 179: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

##############################################################

#stergere orice regula din toate tabelele de pe toate chainurile iptables -t filter -F iptables -t nat -F iptables -t mangle -F #logarea pachetelor invalide trimise sau primite de server iptables -A INPUT -m state --state INVALID -j LOG --log-level info --log-prefix "INPUT INVALID PACKET" iptables -A OUTPUT -m state --state INVALID -j LOG --log-level info --log-prefix "OUTPUT INVALID PACKET" #dropara pachetelor invalide trimise sau primite de server iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP #ciclu for pentru permiterea pachetelor ce au voie sa tranziteze router for port in do #permiterea pachtelor in directia LAN->WAN iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport -j ACCEPT #permiterea pachetelor in directia WAN->LAN iptables -A FORWARD -d 192.168.0.0/24 -p tcp --sport -j ACCEPT done #permiterea pachetelor DNS din LAN catre WAN (altfel userii nu pot accesa site-uri folosind nume de domenii) iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT #blocarea pachetelor ICMP de timp echo-request (type 8) daca sursa este diferita de 192.168.0.0/24 iptables -A INPUT ! -s 192.168.0.0/24 -p icmp --icmp-type 8 -j DROP #setare policy DROP pentru pachetele care nu au fost permise de regulile de mai sus iptables -P FORWARD DROP

Routing (SNAT)De cele mai multe ori utilizatorii casnici folosesc o conexiune broadband de tip

ADSL sau CaTV pentru conectarea la Internet.

NotaIn ultima vreme datorita cresterii vitezei oferite de ADSL, acest timp de tehnologie de WAN incepe sa fie folosita si pentru companii. ADSL+ ofera un Bandwidth Downstream de peste 22Mbs.

Indiferent de tehnologia de WAN folosita ISP-ul furnizeaza un singur IP public sau in cel mai bun caz cateva IP-uri publice.

Page 180: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Solutia folosita pentru a lega mai multe calculatoare la Internet (neavand atatea IP-uri publice cate calculatoare) este configurea unui Router care sa realizeze NAT (Network Address Translation).

Se foloseste asfel un router dedicat sau un calculator care ruleaza Linux cu cel putin 2 placi de retea Ethernet (leaga 2 retele si anume LAN-ul si Internetul). O interfata si anume cea care se conecteaza cu providerul se configureaza cu IP-ul public, iar cealalata interfata numita interfata de LAN se configureaza cu un IP privat.

NotaIETF a definit in RFC 1918 3 clase de IP-uri private care pot fi folosite in mod liber pentru adresarea unui LAN.Acestea sunt:10.0.0.0-10.255.255.255172.16.0.0-172.31.255.255192.168.0.0-192.168.255.255

Procesul prin care hosturile din LAN (din spatele routerului) pot comunica pe Internet si anume procesul de NAT presupune inlocuirea IP-ului privat de catre router din pachetele generate de hosturile din LAN cu unicul IP public si trimiterea acestora pe Internet. Efectul este ca pe Internet intreg LAN-ul este ascuns si nu se poate determina ce host din LAN a generat pachetul sau ca exista LAN-ul. Pachetele par sa vina de la Router. Avantaje NAT:

Economia de IP-uri publice. Cu un singur IP public putem crea o retea localta conectata la Internet formata din zeci sau sute de hosturi;

Securitate. Lan-ul este izolat, nu se pot initializa conexiuni din exterior catre un host din interior fara configuratii speciale ale routerului (port forwarding);

Un host Linux poate fi transformat intr-un router nededicat. Componenta software care realizeaza NAT este NETFILTER (unica posibilitatea).

NotaProcesul de NAT descris mai sus este referit de multe ori ca SNAT (source NAT) pentru faptul ca se modifica IP-ul sursa privat cu IP-ul public. Aceasta referire nu este in totalitate corecta fiindca SNAT este insotit intotdeauna de DNAT (destination NAT) si anume la intoarcerea pachetului de pe Internet se inlocuieste IP-ul destinatie public cu IP-ul destinatie privat, iar pachetul este trimis la hostul din LAN de catre Router

Din punct de vedere al configurarii NETFILTER urmatoarele aspecte sunt importante: - SNAT se realizeaza pe chainul POSTROUTING folosind tabelul nat care este suficient sa contina o singura regula; - se foloseste targetul SNAT. Se poate folosi si targetul MASQUARADE in momentul in care IP-ul public nu este static ci este obtinut dinamic; - default hostul Linux nu ruteaza. Pentru a fi transformat intr-un router trebuie ca in fisierul /proc/sys/net/ipv4/ip_forward sa se gaseasca valoarea 1 (unu);

Page 181: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Exemplu transformare host in router si configurare pentru SNAT (configuratie completa): #presupunem ca ip-ul public este 213.232.32.3, subnetul local este 10.0.0.0/24 iar interfata de WAN se numeste eth0 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j SNAT --to-source 213.232.32.3 #activeaza procesul de rutare echo "1" > /proc/sys/net/ipv4/ip_forward

NotaSe recomanda rularea scriptului de mai sus la butare automat folosind scripturi de management a serviciilor din directorul /etc/init.d

Port Forwarding(DNAT)Prin procesul de NAT intrega retea privata din spatele routerului este ascunsa pe

Internet. De multe ori se doreste conectarea la un serviciu ( Exemplu: un server web) care ruleaza pe un host din LAN care este configurat cu IP privat ( Exemplu: 10.0.0.1)

Procesul prin care Routerul se configureaza astfel incat sa ofere posibilitatea conectarii de pe Internet la un host din LAN cu IP privat se numeste DNAT (Destination Network Address Translation) sau Port Forwarding.

Exemplu topologie: Routerul are configurat un IP public pe interfata de WAN ( Exemplu: 88.0.0.1) si

un IP privat pe interfata de LAN ( Exemplu: 10.0.0.1). In LAN exista un server web care asculta pe portul 80 si care are configurat IP-ul 10.0.0.10. Utilizatorii de pe Internet care doresc conectarea la serverul web privat nu-l pot accesa fara ca routerul sa fie configurat pentru DNAT.

Pentru userii de pe Internet reteaua 10.0.0.0/24 si implicit 10.0.0.10 sunt ascunse (nu exista).

Modul de functionare DNAT este urmatorul: userul de pe Internet se conecteaza la IP-ul public al routerului si anume 88.0.0.1 si portul 80. Routerul in momentul in care primeste pachete catre portul 80 le redirecteaza catre serverul din LAN 10.0.0.10 modificand IP-ul destinatie din fiecare pachet (88.0.0.1 se transforma in 10.0.0.10) - de unde si numele de DNAT. Pachetele ajung astfel la serverul web intern care raspunde catre IP-ul sursa public (acesta nu se modifica).

NotaDin perspectiva clientilor de pe Internet acestia se conecteaza la serverul web care ruleaza pe router si nu la serverul web din spatele routerului.

Din punct de vedere al configurarii NETFILTER urmatoarele aspecte sunt importante:-DNAT se realizeaza pe chainul PREROUTING folosind tabelul nat care este suficient sa contina o singura regula. Chainul folosit este PREROUTING fiindca regulile din acesta sunt evaluate inainte de procesul de rutare. In momentul in care are loc decizia de rutarea,

Page 182: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

routerul trebuie sa aiba acces la IP-ul final si anume cel privat pentru o deciezie de rutare corecta; - se foloseste targetul DNAT;

Exemplu configurare router pentru DNAT: - #presupunem ca IP-ul public este 88.0.0.1 iar IP-ul serverului web din LAN este 10.0.0.10. Pachetele din exterior catre 88.0.0.1 vor fi redirectate la 10.0.0.10 iptables -t nat -A PREROUTING -p tcp -d 88.0.0.1 --dport 80 -j DNAT --to-destination 10.0.0.10

ImportantPentru ca DNAT sa functioneza Routerul linux trebuie sa fie configurat si pentru

SNAT. Altfel pachetele ca raspuns ale serverului web din LAN care au ip sursa privat nu ar putea fi trimise catre IP-ul public destinatie care este pe Internet.

Capitolul 9 Sistemul de e-Mail

FundamenteIn contextul mesajelor electronice un e-mail este format din: envelope si content (continut).

I. Envelope reprezinta un wrapper (invelitoare) in care se gaseste mesajul format din header si body si este folosita de serverul STMP pentru a sti cum sa livreze e-mailul. Un envelope

Page 183: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

contine cel putin envelope sender si envelope recipient.

II. Content (continut) este format dintr-un header si optional un body.

1. Headerul are o structura aparte definita in diferite RFC-uri. Contine informatie tip metadata precum Date, To, From etc

Headere obligatorii:

a) Date: specifica data la care mesajul a fost compus si trimis. Daca clientul omite acest camp serverul il adauga automat;b) From: specifica identitatea celui care trimite mesajul. Daca clientul omite acest camp erverul de email il adauga automat;

Alte headere optionale:

c) Message-Id: identificator unic pentru mesaj generat de client sau de server daca clientul il omite;d) To: identitatea destinatarului sau destinatarilor principali (primary recipients). Daca clientul omite acest camp serverul SMTP Postfix va adauga valoarea din parametrul undisclosed_recipients_header;Exemplu: undisclosed_recipients_header = To: dan e) Subject: descrierea pe scurt e mesajului;f) Cc: identitatea destinatarilor secundari (secondary recipients;)g) Reply-To: indica adresa la care clientul trebuie sa trimita raspuns la mesaj;h) Content-type: indica structura body (RFC 1049);i) Received: Fiecare MTA (SMPT Server) care primeste mesajul adauga un astfel de Header pentru a indica de unde, cand si cum a ajuns mesajul. Aceasta informatie este foarte utila in detectarea rutei mesajului;

Inafara acestor Headere standard exista X-Headers care au rolul de furniza informatie non-standard, optionala. Exemplu: X-Mailer, X-Priority, X-Original-To etc

2. Body reprezinta o secventa de caractere care urmeaza dupa header separate de aceasta print-o linie goala. Atasamentele fac de asemenea parte din Body si reprezinta o reprezentare text/ASCII codata.

3. Attachments/Atasamente sunt in general fisiere binare (executabile, audio, video etc) care sunt codate dupa anumite standarde in format ASCII si fac parte din Body.

NotaMIME Encoding - Multipurpose Internet Mail Extensions - reprezinta un sistem/standard de codare a informatiei binare in format text.

Valoarea din headerul Content-type care indica structura body poate fi:

Page 184: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

text/plain -> mesaj text multipart/mixed -> mesaj text + atasament non-text (executabile, audio, video etc) message/rfc822 -> reply cu mesajul original atasat

In cazul tipului multipart exista un boundary care delimiteaza fiacare parte a body: text de atasament1, de atasament2 etc

Exemplu: boundary este --=-88OdXvcEZkM/gT3yWOJX Content-Type: multipart/mixed; boundary="=-88OdXvcEZkM/gT3yWOJX" Date: Wed, 30 Jan 2008 20:28:21 +0200 Message-Id:<1201717701.7673.25.camel@toshiba> Mime-Version: 1.0 X-Mailer: Evolution 2.12.1 --=-88OdXvcEZkM/gT3yWOJXContent-Type: text/plain Content-Transfer-Encoding: 7bit unu doi trei --=88OdXvcEZkM/gT3yWOJX Content-Disposition: attachment; filename=cat Content-Type: application/x-executable;name=cat Content-Transfer-Encoding: base64f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAAIwECDQAAACsQgAAAAAADQAIAAHACgAGwAaAAYAAAAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQBAAAUgQQIFEECBMAAAATAAAABAAAAA --=-88OdXvcEZkM/gT3yWOJX--

Exista 2 standarde principale de codare sau transformare a atasamentelor binare in caractere ASCII/text:

1. base64Este cel mai folosit standar de codare definit in RFC 1421 si RFC 2045. Se folosesc caracterele a-zA-Z0-9 precum "+" si "/". Caracterul "=" are un rol special.

Utilitarele mpack si munpack realizeaza codarea unui fisier binar in ascii. Exemplu: mpack -o output.txt a.zip

Codarea/decodarea informatiei se realizeaza de catre MUA (clientul de e-mail). Tot acesta adauga headere specifice. Mime-Version: 1.0 --=-1qt4d7Y0wSyrkxqouOn6 Content-Disposition: attachment; filename=MP612-en.pdf /*type/subtype of the message content*/ Content-Type: application/pdf; name=MP612-en.pdf Content-Transfer-Encoding: base64JVBERi0xLjUNJeLjz9MNCjI3OTkgMCBvYmogPDwvTGluZWFyaXplZCAxL0wgM EzMjIwMC9PIDI4

Page 185: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

MDYvRSA0MDkwNi9OIDYzL1QgMjA3NjE3MS9IIFsgMjMxNiAxNDIyXT4+DWV ZG9iag0gICAgICAg

2. quated-printable

ImportantPe scurt un e-mail este format din Envelope si Content. Content este format din Headeresi Body.Protocolul SMTP este un protocol "text only". Chiar daca userul trimite un email care contine imagini sau atasamente binare cum ar fi fisiere Excel, acestea sunt transformate in caractere ASCII la sursa si trimise catre destinatie dupa un standard de codare (base64). Destinatia decodeaza caracterele ASCII dupa acelasi standard in informatia binara originala.

Relaying

Este procesul prin care un server de e-mail accepta mesaje pentru a le transmite. Un server trebuie sa faca relay doar pentru userii din reteaua locala sau doar dupa ce acesta a autentificat cumva userii. Altfel serverul poate fi folosit de spammeri pentru a trimite mesaje nesolicitate.

Promiscuous relaying este procesul prin care un server accepta emailuri din afara retelei locale sau de la useri neautentificati si le transmite la destinatii aleatoare. Anumite servere (sendmail) erau configurate default pana nu de mult ca promiscuous relay.

DefinitieNotiunea de Reject sau Bounce reprezinta procesul de trimiterea a unui mesaj de eroare inapoi la destinatar in momentul in care un e-mail nu poate fi livrat.

Inbox

Reprezinta locatia in care se gasesc e-mailurile fiecarui utilizator pe server. Default acesta se gaseste in directorul /var/spool/mail intr-un fisier cu numele utilizatorului.

Exemplu: /var/spool/mail/dan sau /var/spool/mail/paul. In cazul in care se foloseste IMAP si se creaza foldere, acestea se gasesc in /home/USERNAME/mail. Exemplu: /home/dan/mail/Sent sau /home/paul/mail/Proiecte

Exista 2 formate pentru Inbox:

1. mboxEste formatul clasic si inca foarte folosit. Toate e-mailurile din Inbox se gasesc intr-un SINGUR fisier pe server. ( Exemplu: /var/spool/mail/dan). Exista un separator folosit de clientul de e-mail pentru a diferentia intre doua e-mailuri. Dezavantajul acestei metode este ca daca un singur email se corupe intreg Inbox devine

Page 186: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

inutilizabil. In plus performantele sunt scazute fiindca in momentul citirii unui e-mail, de fapt clientul de e-mail citeste o anumita portiune din marele fisier Inbox, care reprezinta e-mailul respectiv.

2. mdirEste un concept nou introdus de qmail prin care fiecare e-mail se gaseste in propriul fisier. Avantajele sunt performanta crescuta si securitatea.

Componentele

MUA/MDA/MTAIn comparatie cu alte servere unde un singur produs ofera o solutie finala, un sistem de email este format din mai multe componente care lucreaza impreuna pentru a livra un e mail de la sursa (Sender) la destinatie (Recipient).

Componentele unui sistem de e-mail sunt:

1. MTA - Mail Transfert Agent Este aplicatia server folosit pentru trimiterea si primirea de e-mailuri. MTA este serverul de e-mail sau serverul care implementeaza protocolul SMTP.

Printre cele mai cunoscute si folosite servere de e-mail se afla: Sendmail, Qmail, Postfix, Exim si Microsoft Exchange.

Sendmail este primul server de e-mail din lume, creat pentru Unix, extrem de complex, dar care de-a lungul timpului a avut o istorie plina de probleme si vulnerabilitati. Este inca cel mai folosit server de e-mail care vine default pe distributii precum RHEL, CentOS, Fedora sau SuSE.

Qmail se doreste un inlocuitor al lui Sendmail care a fost dezvolatat de matematicianul Dan Bernstein avand securitatea ca principal avantaj. Se considera cel mai sigur server SMTP. Celebrul anunt al lui Bernstein prin care acesta oferea un premiu de $500 celui care descopera un bug de securitate in qmail este de asemenea celebru.

Postfix este un server modern creat de Wietse Venema un expert in securitate de la IMB. Se doreste de asemenea un inlocuitor al lui Sendmail si este mult mai usor de configurat si inteles. De asemenea se poate migra de la Sendmail la Postfix fara nicio configuratie sau cu efort minim (configuratia sendmail este compatibila cu cea postfix). Postfix este OpenSource

Exim este un alt MTA modern. Acesta a fost creat de Philip Hazel la Universitatea Cambridge. Exim este OpenSource.

Exchange este serverul de e-mail al lui Microsoft folosit pe sisteme de operare Windows. Acesta este proprietar cu sursa inchisa.

Page 187: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Nota1. Fiecare server de e-mail are avantaje si dezavantaje si nu se poate spune cu siguranta care este cel mai bun. In functie de necesitati, cerintele retelei sau trafic o solutie sau alta poate fi optima.2. In acest curs se va prezenta serverul de e-mail Postfix datorita modul de constructie al acestuia si a faptului ca este mai usor de inteles si configurat decat celelalte. In plus Postfix este compatibil cu Sendmail, inca cel mai folosit server de e-mail.3. Intrebarea fireasca este: de ce nu se studiaza Sendmail daca este inca cel mai folosit? Fiindca Sendmail este inca foarte folosit nu datorita in primul rand eficientei sale ci datorita unor considerente istorice. Este primul server, vine default pe multe distributii, iar personalul calificat in administrarea Sendmail este mai numeros. Cota de piata a acestuia este in scadere.

ImportantServerul de e-mail este cel mai complex, greu de inteles si configurat server dintre cele prezentate in acest curs. O intelegere profunda a modului de operare si configurare a acestuia nu poate veni decat in timp dupa foarte multa experienta practica reala.

2. MUA - Mail User AgentMUA este programul client folosit de user pentru a se conecta la serverul de e-mail in scopul trimiterii de mesaje. Acesta este clientul SMTP. Exemplu: Mozilla Thunderbird, Outlook Express, Evolution etc

3. MDA - Mail Delivery AgentMDA este un program care ruleaza pe server si care livreaza(muta) emailul in inbox-uluserului dupa ce acesta a fost acceptat de MTA.Exemplu: clasicul procmail

Ca parte integranta a unui sistem de e-mail se gasesc si protocoalele POP si IMAP. Cu ajutorul acestora utilizatorul poate downloada e-mailurile primite de pe server pe hostul local. Pentru detalii cititi capitolul "Serverul POP/IMAP" a acestui curs.

Ruta unui E-mail intre Sender si Recipient

User A = SenderUser B = Recipient

Page 188: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

1. Userul A deschide clientul de e-mail/MUA (Thunderbird) si incepe sa compuna e mailul. In momentul trimiterii acestuia, MUA se conecteaza folosind protocolul SMTP la MTA/server e-mail (Postfix). Userul A are cont pe serverul de e-mail. 2. Daca destinatarul are cont pe acelasi server, MDA (procmail) preia mesajul de la MTA (postfix) si-l livreaza in inboxul userului B. Daca destinatarul are cont pe un alt server, MTA se conecteaza la MTA remote, cel pe care are cont userul B, si transmite e-mailul. In comunicatia dintre cele 2 servere se foloseste protocolul SMTP. 3. Dupa ce mesajul a ajuns pe serverul remote, acesta este livrat de MDA in inbox. 4. Userul B se conecteaza cu MUA (Thunderbird) la serverul POP sau IMAP care ruleaza pe acelasi host cu serverul de e-mail. Cu ajutorul protocolului POP sau IMAP userul B isi downloadeza mesajul local pe propriul calculator. In comunicatia dintre MUA si sever se foloseste protocolul POP sau IMAP.

Protocolul SMTPSMTP (Simple Mail Transfer Protocol) este un protocol la nivel aplicatie care functioneaza client server. Serverul asculta default pe portul TCP/25.

SMTP este standardul "de facto" de trimitere de e-mailuri in Internet. Acesta a fost standardizat de IETF in RFC 821. In prezent se foloseste o varianta imbunatatita numita ESMTP (Extended SMTP) care este definita in RFC 2821.

SMTP se foloseste doar pentru trimiterea e-mailului de la client (Thunderbird) la server (Postfix) sau intre servere daca Sender-ul si Recipient-ul au conturi pe servere diferite. Pentru primirea e-mailului pe hostul client, se foloseste POP sau IMAP.

SMTP este un protocol simplu, intreaga comunicatie realizandu-se DOAR in text. Chiar daca userul are de trimis un fisier binar ca atasament ( Exemplu: un fisier video), acesta este convertit in text dupa un standard (base64) si trimis catre destinatar.

Una dintre limitarile protocolului este securitatea scazuta datorita faptului ca acesta a fostdezvoltat initial in anii 70-80 cand nu existau virusi, vulnerabilitati de securitate sau atacuri informatice.

SMTP nu contine niciun mecanism de autentificare a Senderului. Orice user se poate conecta la server pe portul tcp/25 si trimite e-mail catre orice destinatie. Acest mod de operare este inacceptabil astazi in contextul in care spamurile reprezinta mai mult de jumatate din totalitatea mesajelor de pe Internet. Extensia care adauga functia de autentificare a clientilor pentru care serverul smtp face relay (accepta e-mailuri pentru a le livra) se numeste SMTP-AUTH. O alta varianta folosita este POP before SMTP sau IMAP refore SMPT si reprezinta o modalitate prin care un user se autentifica initial la un server pop/imap iar in cazul autentificarii cu succes ii este permis relay-ul smpt. Serverul POP/IMAP salveaza IP-ul clientului, temporar, intr-un fisier care este verificat de SMTP server pentru a face relay.

Page 189: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Un alta problema de securitate a protocolului SMTP este ca acesta comunica in clar. Informatia poate fi captata usor folosind un sniffer.Pentru securizare se foloseste criptarea mesajelor in car cu SSL/TLS ceea ce duce la un nou protocol numit SMTPS (SMTP over SSL).

Exemplu comunicatie SMTP intre client si server:

Serverul Postfix

Prezentare generalaPostfix este un server de e-mail sau SMTP dezvoltat de Dr. Wietse Venema, un cercetator de la IBM cunoscut pentru lucrarile sale din domeniul securitatii informatiei. Codul a fost facut disponibil ca OpenSource in 1998 si a continuat sa fie dezvoltat continuu.

Principalele avantaje Postfix sunt:

1. ReliabilityPostfix ruleza optim in conditii de stress cand sistemul este foarte incarcat. Poate procesaun numar foarte mare de mesaje printr-un management al resurselor extrem de eficient.

Page 190: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2. SecurityDefault Posftix presupune ca ruleaza intr-un mediu ostil si contine mai multe layere de securitate. Fiecare proces generat de Postfix ruleaza izolat si pe principiu privilegiilor minime.

3. PerformancePostfix a fost creat avand performanta crescuta ca principal ofiectiv.

4. FlexibilityPostfix este compus din mai multe programe si subsisteme independente care impreuna printr-o configurare optima ofera un sistem de e-mail performat si flexibil.

5. Ease-of-usePostfix este unul dintre cele mai usor de instalat, configurat si administrat serverele de e mail. Avand exemplu lui Sendmail si anume o complexitate extrema, creatorul lui Postfix a vrut sa dezvolta un program a carui configurare si administrare este logica.

6. Sendmail compatibilityPostfix poate inlocui Sendmail cu un efort minim. Acesta interactioneza cu componentele Sendmail, iar fisierul de configurare poate fi convertit automat dintr-un format in altul.

Compilare si instalareInstalarea prin compilare a serverului Postfix este putin deosebita fata de instalarea altor servere, in primul rand fiindca nu exista scriptul configure. Exemplu de mai jos s-a realizat pe Fedora Core 9. In mod IDENTIC se compileaza si instaleaza pe orice distributie Linux.

Pasi de urmat: 1. Download sursele ultimei versiuni Postfix de pe site-ul producatoruluiwww.postfix.org. Acestea pot fi downloadate in orice director din sistem. Se ruleaza: wget http://postfix.imar.ro/postfix-release/official/postfix-2.5.3.tar.gz

2. Verificare integritate arhiva tar.gz folosind hash-ul sau semnatura digitala (Optionaldar foarte recomandat)3. Decomprimare si dezarhivare arhiva si mutare in directorul cu surse creat.Se ruleaza: tar -xzvf postfix-2.5.3.tar.gz4. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat.In urma compilarii rezulta din fisierele sursa fisiere executabile.Se ruleaza: make5.InstalareInainte de instalare trebuie creati 2 useri sub care vor rula 2 procese din Postfix si anume userul postfix si postdrop. Acestia sunt default si pot fi schimbati daca se doreste. Se ruleaza: useradd -s /bin/false postfix si useradd -s /bin/false postdrop

Page 191: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Instalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii din directorul cu surse in directorul dorit. Comanda poate fi executata doar de root. Se ruleaza: make install

Acest pas este interactiv. Userul poate alege diferite optiuni cum ar fi: cei 2 useri necesari functionarii Postfix, directorul cu fisierele de configuratie, directorul cu man page-urile, calea catre diferite programe componente ale Postfix etc

Configurare de bazaImportantPentru a putea exersa cele exemplificate mai jos trimitand si primind e-mailuri cu un client dedicat precum Outlook Express sau Thunderbird este nevoie si de un server POPv3 sau IMAPv4. Serverul prezentat in acest curs este Dovecot. Il puteti instala automat folosind yum install dovecot sau apt-get install dovecot pentru acest moment. Serverul va porni fara nicio modificare a fisierului de configurare sau cu modificari minime (in functie de distributie). Pentru a porni serverul: /etc/init.d/dovecot start.

Capitolul urmator va prezenta acest server in detaliu.

Notiuni generale: Fisierele de configurare pentru Postfix sunt /etc/postfix/main.cf - Global Postfix configuration file si /etc/postfix/master.cf - Postfix master process configuration file. Configurarea serverului presupune editarea acestor fisiere in special main.cf. Dupa orice editare, serverul trebuie restartat fiindca citirea configuratiei are loc doar la pornire (ca la orice alt server Linux de altfel). Fisierul de configurare main.cf este format dintr-o serie de parametri si valorile acestora. Exista peste 300 parametri pentru Postfix. Daca un parametru nu apare in main.cf nu inseamna ca acesta nu exista ci doar ca se foloseste valoarea defualt pentru el.

Exemplu: mynetworks = 192.168.0.0/24, 127.0.0.0/8 Randurile care incep cu #(diez) reprezinta comentarii si sunt ignorate. Pentru a ne referi la valoarea unui parametru se precede parametrul cu semnul $(dollar)

Exemplu: relay_domains = $mydestination - parametrului de configurare relay_domains i-se asigneaza valoarea parametrului mydestination Directorul Inbox, cel in care sunt livrate mesajele primite de fiecarui utilizator este: /var/spool/mail/USERNAME ( Exemplu: /var/spool/mail/dan) Nota

/var/spool/mail si /var/mail sunt hard linkuri

In cazul in care se foloseste IMAP si se creaza foldere, acestea se gasesc fizic in directorul /home/username/mail ( Exemplu: /home/dan/mail)

Page 192: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pornirea serverului SMTP se realizeaza cu ajutorul comenzii postfix. Aceasta ia parametri start, stop sau reload. Fisierul default in care serverul salveaza logurile este /var/log/maillog.

Aliases

Postfix ca si Sendmail foloseste un fisier aliases pentru redirectarea e-mailurilor destinateuserilor care nu exista in /etc/passwd, catre alti destinatari locali care trebuie sa existe in /etc/passwd. Fisierul alis (/etc/aliases) este format din definiitii tip alias de forma: alias: target1,target2,target3 etc. Randurile care incep cu #(diez) sunt comentarii. Aceasta forma de redirectare se foloseste atunci cand useri care nu au Inbox primesc e mailuri ( Exemplu: userul postfix, wwwuser sau chiar root) sau pentru crearea de mail lists.

Exemplu /etc/aliases: #emailurile catre userii admin, wwwuser si youradmin sunt redirectate catre userul root admin: root wwwuser: root youradmin: root #emailurile catre root sunt redirectate catre userul dan root: dan #emailurile catre userul marketing sunt redirectate si catre dan, paul, dana, john si smith marketing: dan,paul,dana,john,smith #emailurile catre dan sunt redirectate si catre userul sef dan: sef

ImportantUserul din partea stanga a celor 2 puncte nu trebuie sa existe ca user de sistem, dar cei din dreapta trebuie sa se gaseasca in /etc/passwd.

Dupa fiecare modificare a fisierului /etc/aliases trebuie rulata comanda newaliases care creaza baza de date pentru aliasuri /etc/aliases.db care este folosita de server.

Daca la pornirea serverului obtinem mesajul de eroare fatal: open database /etc/aliases.db: acest lucru se datoreaza faptului ca serverul nu gaseste fisierul baza de date pentru aliasuri care este /etc/aliases.db. Pentru crearea sa se ruleaza comanda newaliases.

Securitate Postfix

RelayingIn mod implicit protocolul SMTP nu autentifica userii care se conecteaza la acesta pentru livrarea de emailuri. Extensia care realizeaza autentificarea userilor se numeste SMTP AUTH. Default (fara SMTP AUTH) postfix accepta emailuri pentru delivery (face relay) doar daca una dintre urmatoarele conditii este indeplinita:

1. IP clientului se gaseste in parametrul $mynetworks caz in care destinatia poate fi locala sau remote.

Page 193: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

2. Domeniul destinatie final este in $mydestination caz in care clientul poate fi local sau remote. NotaPostfix nu accepta pentru delivery indiferent de la cine, mailuri catre useri din domeniile locale ($mydestination) inexistenti in /etc/passwd sau in /etc/aliases.

Pentru a permite relay de la alte hosturi se poate folosi: 1. mynetwork_style=<class|subnet|host> class = postfix sumarizeaza la clasa A, B sau C a interfetelor sale si face relay la hosturile din acea clasasubnet = postfix accepta mailuri pt. delivery doar de la subretelele interfetelor sale host = postfix accepta mailuri doar de la propriile sale IP-uri (clientul este serverul)

Pentru a seta permisiuni individuale de relay:mynetworks = 127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/24

2. Alternativ se poate folosi:#in /etc/postfix/file1 se specifica IP-uri individuale mynetworks=hash:/etc/postfix/file1#in /etc/postfix/file1 se poate folosi CIDR (Classless Interdomain Routing) notation mynetworks=cidr:/etc/postfix/file2

Filtre si restrictiiImportantRestrictiile Postfix sunt concepte foarte avansate care pot fi folosite si customizate doar dupa o intelegere foarte buna a protocolului SMTP si mai ales a etapelor implicate in comunicatia SMTP dintre client si server.Primul auto test pentru verificarea cunostintelor legate de SMTP este trimiterea unui e mail folosind telnet. Va recomand parcurgerea acestei sectiuni doar dupa buna intelegere a protocolului SMTP.

Restrictiile permit serverului de e-mail sa accepte sau sa rejecteze mesaje inspectand comunicatia SMTP care are loc intre acesta si client.

NotaTermenul restrictie se refera la a nu permite o anumita actiune. Pentru Postfix o rescrictie poate sa insemne exact opusul si anume adminul poate defini o restrictie folosita pentru a permite anumite mesaje.

Fiecare restrictie SMTP se refera la un stagiu din comunicatie SMTP.

Page 194: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Restriction Triggers

Sunt "empty boxes" de care se ataseaza restrictiile. Fiecare trigger se refera la un stagiu din comunicatia SMTP.

1. smtpd_client_restrictionsAcest trigger se executa in functie de IP sau hostname-ului clientului

2. smtpd_helo_restrictionsAcest trigger se executa in functie de valoarea parametrului HELO/EHLO, client IP sau client hostname

3. smtpd_sender_restrictionsAcest trigger se executa in functie de sender envelope

4. smtpd_recipient_restrictionsAcest trigger se executa in functie de recipient envelope, sender envelope, HELO/EHLO si IP/Hostname client. Default Postfix permite orice recipient pentru clientii din parametrul mynetworks, relay_domains si mydomains. Astfel Postfix nu este un open relay.

5. smtpd_data_restrictions

6. smtpd_etrn_restrictionsAcest trigger restrictioneaza clientii care incearca sa faca flush la coada serverului.

Restrictii Postfix

Restrictii se ataseaza de un trigger.

1. Generic restrictions Nu verifica nimic in dialogul smtp doar executa o comanda

Acestea sunt:a) permitb) deferc) rejectd) warn_if_eject

2. Switchable restrictionsAceste restrictii se activeaza/dezactiveaza, iar odata activate verifica anumite conditii

Acestea sunt:a) smtpd_helo_required - clientii sunt obligati sa trimita valoarea parametrului HELO/EHLO prin care se indetifica la inceputul sesiunii SMTP

Page 195: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

b) strict_rfc821_envelopes - aceasta restrictie ajusteaza toleranta Postfix la erorile din MAIL FROM si RCPT TO. c) disable_vrfy_command - disables recipient address verification

3. Customizable Restrictions Aceste restrictii sunt formate dintr-o cheie(filtru) si o valoare (actiunea de intreprins daca filtrul returneaza true).

Sintaxa unei restrictii restriction_trigger = conditional_restriction, customizable_restriction \maptype:/path/to/the/map, general restriction sau restriction_trigger = conditional_restriction customizable_restrictionmaptype:/path/to/the/map, general restriction

Pentru testa restrictiile fara aplicarea lor imediata se foloseste restrictia generica warn_if_reject care doar scrie in loguri:

Exemplu:smtpd_sender_restrictions = warn_if_reject reject_unknown_sender_domain

Postfix vine default cu o serie de restrictie pentru a nu deveni un OpenRelay.

Pentru vizualiza restrictiile default pt. fiecare trigger: postconf -d smtpd_recipient_restrictionspostfont -d smtpd_sender_restrictions

Exemplu: Restrict emails from unknown domains. Postfix va incerca sa rezolve domeniul senderului. smtpd_sender_restrictions = reject_unknown_sender_domain permit_mynetworksreject_unauth_destination permit

Alte restrictii utile:a) reject_non_fqdn_recipient ->recipientul trebuie sa fie fqnd ([email protected] nu doar user)b) reject_non_fqdn_hostname ->valoarea parametrului Helo tb. sa fie fqdnc) reject_invalid_hostname -> valoarea parametrului HELO tb. sa contine caractere valided) reject_non_fqdn_sender -> envelope sender trebuie sa fie fqdn e) reject_unknown_sender_domain -> postfix realizeaza dns query pt. sender domain. F. important pentru anti-spamf) reject_unknown_recipient_domain

Page 196: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Obvious Forgeries

1. Reject clients care folosesc numele serverului la care se conecteaza in HELO

a) creare map file: /etc/postfix/helo_checks care contin variatii are propriului nume /^crystalmind\.biz$/ 550 don't use my ip /^192\.168\.0\.13$/ 550 don't use my ipb) in main.cf smtpd_recipient_restrictions = check_helo_access pcre:/etc/postfix/helo_checks

2. Bogus domains

a) creare map file: /etc/postfix/bogus_mx 0.0.0.0/8 550 Mail server in broadcast domain 10.0.0.0/8 550 RFC 1918 192.168.0.0/24550 RFC 1918 69.0.0.0/18 550 SPAMb) in main.cf: smtpd_recipient_restrictions = check_sender_mx_access cidr:/etc/postfix/bogus_mx3. DNS Blacklist

In main.cf: smtpd_recipient_restrictions = reject_rbl_client relays.ordb.org

Page 197: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

NotaPentru a verifica daca un IP ( Example: 117.0.0.2) este listat in relays.ordb.org se ruleaza: host 2.0.0.117.relays.ordb.org

Programe utilitareUtilitare Postfix

1. postfix - Postfix control program.Se foloseste pentru pornirea, oprirea sau recitirea fisierului de configurare main.cf. postfix <start|stop|reload>Exemplu: postfix start

2. mailq - afiseaza coada [root@pc3 ~]# mailq -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient---- D6D1DD65F9 741 Wed Jan 30 13:43:34 [email protected] [email protected] – 1 Kbytes in 1 Requests.

3. postcat -q QUEUE_ID - afiseaza continutul emailul din coada (envelopes + headers + body)QUEUE_ID este id-ul obtinut prin rularea comenzii mailq

4. postmap - creaza indexed maps din flat files

5. postlog - permite programelor externe precum scripturi sa scrie in logurile lui postfix Exemplu: postlog testing logging ->scrie in /var/log/maillog stringul "testing logging"

6. postqueue - postfix user interface for queue management (postfix trebuie sa ruleze)Exemplu:postqueue -f - flush the queue, incearca sa livreze toate mesajele din coada postqueue -p - afiseaza coada (echivalent cu comanda mailq). Sunt afisate toate cozile. La afisarea cozii caracterul "*" din dreptul mesajului inseamna ca aceasta este in "active queue", iar "!" inseamna ca mesajul este in "hold queue" si nu se mai incearca livrareaacestuia.

postfix -s domain.com - incearca livrarea mesajelor pentru un anumit domeniu.

7. postsuper (postfix nu trebuie sa ruleze, comanda doar pt. root) Exemplu:postfix -h 7005DD65F9 -> plaseaza mesajul cu ID 7005DD65F9 in hold queue postfix -H 7005DD65F9 -> incearca livrarea mesajului cu ID 7005DD65F9 din hold queue postfix -d 7005DD65F9 -> sterge mesajul cu ID 7005DD65F9 din coada

NotaPentru a observa mesaje in coada se poate seta in main.cf parametrul maximal_queue_lifetime la o valoare foarte mare.Exemplu:

Page 198: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

maximal_queue_lifetime 45334d

8. postconf - afiseaza valoarea parametrilor de configurare

Cu optiunea -d se afiseaza valorile default. Exemplu:[root@pc5 ~]# postconf -d mynetworks mynetworks = 127.0.0.0/8 192.168.0.0/24

Fara optiunea -d se afiseaza valorile reale, de running.Exemplu:[root@pc5 ~]# postconf mynetworks mynetworks = 192.168.0.0/24, 127.0.0.0/8

9. Postconf poate fi folosit si pt. modificarea fisierului main.cf Exemplu: postconf -e "mynetworks = 127.0.0.0/8 192.168.0.0/24"

Cozi/Queues

O coada este o zona de memorie in care serverul salveaza temporar emailul inainte de a-l livra.

Managementul cozilor este realizat de qmgr #Queue directory este default /var/spool/postfix queue_directory = /var/spool/postfix

Fiecare coada este reprezentata de un subdirector in /var/spool/postfix

Cele mai importante cozi sunt:

1. incomingToate mesaje primite de postfix ajung sa fie trimise in incoming queue de catre cleanup daemon. Cleanup daemon reprezinta ultimul stagiu de procesare a mesajelor noi. Rolul acestuia este de a adauga headere lipsa, message rewriting precum si extragerea diferitilor destinatari. Dupa ce acesta insereaza mesajul in incoming queue anunta queue manager ca un mesaj nou a sosit. Mesajele din incoming queue sunt apoi mutate in active queue.

2. maildropMesajele trimise folosind comanda sendmail sau mail sunt asteapta procesarea in maildrop. Postfix poate sa nu ruleze, iar la pornire va scana si procesa toate mesajele din maildrop.

3. deferredIn aceasta coada sunt puse mesajele a coror livrare catre unul dintre recipienti nu s-a putut realiza. Queue manager scaneaza periodic aceasta coada.

Page 199: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

4. activeIn aceasta coada ajung toate mesajele care sunt gata sa fie livrate dar nu sunt livrate in acest moment. Mesajele ajung in active queue din incoming queue, fiind mutate de catre cleanup daemon. Dimensiunea maxima a acestei cozi este de 20000 mesaje.

5. holdAdministratorul poate defini politici pentru verificarea headerului si body astfel incat un email sa fie redirectionat in hold queue din procesul normal. Mesajele din aceasta coada stau maximum_queue_lifetime dupa care sunt trimise inapoi la sender (bounced to the sender). Comanda postsuper -r ofera o noua sansa mesajelor sa fie livrate mutandule inmaildrop queue.

6. corrupt Mesajele corupte sunt duse in corrupt queue astfel incat administratorul sa le poateinspecta folosind comanda postcat

Managementul Logurilor

Syslog

Prezentare generalaIn Linux una dintre sarcinile cele mai frecvente ale unui administrator de sistem este de-a verifica logurile serverelor care ruleaza. Fiecare serviciu salveaza informatii despre modul de operare, avertismente sau erori generate in fisiere text numite loguri. Acestea se gasesc in directorul /var/log

Pentru a putea urmarii eficient intrega activitate de pe Server, Router sau Firewall trebuie configurat in detaliu modul (cantitatea si tipul de mesaje) de logare pentru fiecare server care prezinta interes. Din punct de vedere al securitatii sistemului, logurile reprezinta modalitatea prin care adminul poate identifica incercarile de logare neautorizate sau modul prin care a fost compromis un server sau intreg sistemul.

Syslog reprezinta standardul de forwardare si salvare a mesajelor de tip log intr-o retea IP. Termenul Syslog se refera atat la librariile folosite de servere pentru salvarea de mesaje in fisiere de tip log cat si la protocolul/standardul de logare din sistem.

Syslog ruleaza client server. syslogd numit daemonul syslog sau serverul syslog reprezinta aplicatia care receptioneaza si proceseaza mesajele si ruleaza default de orice distributie de Linux. Este pornit la butarea sistemului de catre un script de initializare din /etc/init.d

Din punct de vedere istoric Syslog a fost dezvoltat in anul 1980 de catre Eric Allman,

Page 200: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

creatorul primului server de e-mail numit Sendmail. Scopul acestuia era de a fi folosit ca parte integranta a serverului pentru logarea mesajelor generate de acesta.

IETF a standardizat in 2001 protocolul syslog in RFC 3164. In prezent syslog reprezinta standardul "de facto" si "de jure" de logare folosit atat pe Unix/Linux cat si pe alte sisteme de operare sau echipamente dedicate precum Routere sau Switch-uri Cisco.

syslogd ruleaza impreuna cu klogd (Kernel Log Daemon) pentru logarea de mesaje.

Fisierul de configurare al daemonului syslogd este /etc/syslog.conf

NotaPe distributiile recente de Linux (Exemplu: Fedora Core 9) syslogd a fost inlocuit cu rsyslogd - Reliable and Extended syslogd. Acesta reprezinta o versiune imbunatatia dar compatibila cu syslogd. Fisierul sau de configurare este /etc/rsyslog.conf

ConfigurarePrima sarcina care trebuie indeplinita pentru monitorizarea logurilor este identificare locatiei acestora. Fisierul de configurare syslog.conf stabileste locatia logurilor precum si cantitatea si tipul de mesaje salvate.

Fiecare rand din fisierul syslog.conf reprezinta o regula de logare si este formata dintr-un SELECTOR si o ACTIUNE. Selectorul si actiunea sunt separate de unul sau mai multe spatii sau tab. Randurile care incepe cu #(diez) reprezinta comentarii si sunt ignorate.

Exemplu: # Log all the mail messages. mail.info /var/log/maillog

Selectorul este mail.info, iar actiunea este /var/log/maillog

Un selector este format din 2 parti separate prin .(punct) si anume: facility si priority.

Facility reprezinta tipul de mesaj logat si poate fi: auth, authpriv, cron, daemon, kern, lpr, mail, news, syslog, user, uucp, local0, local1, local2, local3, local4, local4, local6 si local7.*(asterix) inseamna orice facilitate.

Prioritatea reprezinta un cod care indica cantitatea de mesaje logate. In ordine crescatoare a prioritatii, dar in ordine descrescatoare a cantitatii de mesaje logate prioritatile sunt: debug, info, notice, warning, warn (echivalent cu warning), err, error (echivalent cu err), crit, alert, emerg, panic (echivalent cu emerg). Prioritatile error, warn si panic sunt considerate invechite si nu se recomanda a mai fi folosite. *(asterix) inseamna orice prioritate.

Page 201: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

In momentul specificarii unei prioritati pentru o facilitate, mesajele cu prioritate mai mare sunt de asemenea incluse. Exemplu: auth.err include si auth.crit, autch.alert si auth.emerg

Pentru a selecta doar mesajele de o anumita prioritate si nu si pe cele cu crioritate mai mare se foloseste semnul =(egal).Exemplu: auth.=err selecteaza doar mesajele cu prioritatea err nu si pe cele cu prioritateacrit, alert sau emerg.

Semnul !(semnul exclamarii) are rolul de a exclude mesajele de o anumite prioritate sau mai mare.Exemplu: mail.!crit va exclude mesajele cu prioritate crit, alert sau emerg.

Pentru a exclude toate mesajele pentru o facilitate se foloseste prioritatea none. Exemplu: mail.none

Cealalta componenta pe langa SELECTOR a fiecarui rand din syslog.conf, ACTIUNEA, stabileste termenul generic si abstract numit logfile sau locatia catre care se redirecteaza logurile pentru o anumita facilitate si prioritate.

Un logfile poate fi:

a) fisier normal

Se specifica obligatoriu folosind calea absoluta.Exemplu: authpriv.* /var/log/secure

Fisierul poate fi precedat de semnul -(minus) caz in care acesta nu mai este sincronizat (salvat) dupa fiecare mesaj logat ci numai dupa ce mai multe mesaje sunt salvate intr-un buffer. Avantajul este cresterea performante, iar dezavantajul este pierderea de informatie in cazul unui crash.Exemplu: authpriv.* -/var/log/secure

b) userMesaje de tip log pot fi redirectate la consola/terminalul la care userul este logat. Daca sedoreste trimiterea mesajelor catre mai multi useri acestia se separa cu virgula. Exemplu: kern.crit root,admin c) remote hostIn cazul unei retele in care se gasesc mai multe servere sau echipamente ale caror loguri trebuie urmarite este mai eficient ca acestea sa fie redirectate catre un host remote. In acest mod avem un loc centralizat de logare.

NotaIn cazul compromiterii unui server sau a intregului sistemul una dintre primele activitati ale Crackerului este "sa-si stearga urmele" adica sa stearga logurile referitoare la activitata

Page 202: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

sa pentru a nu putea fi descoperit de admin. Logarea pe un sistem remote rezolva aceasta problema fiindca stergerea logurilor de catre cracker presupune compromiterea inclusiv a serverului pe care se logheaza.

Pentru logarea remote se foloseste semnul @ in fata actiunii. Exemplu: authpriv.alert @192.168.0.15

d) named pipeLogurile pot fi redirectate inclusiv catre fisiere speciale numite named pipes care anterior trebuie create folosind comanda mkfifo.Exemplu: kern.=debug |/usr/adm/debug ImportantDupa fiecare modificare a fisierului /etc/syslog.conf sau /etc/rsyslog.conf in functie de versiune, daemonul syslogd sau rsyslogd trebure restartat. Exemplu: /etc/init.d/rsyslog restart

Fisiere standard in care se pastreaza logurile: /var/log/messages - reprezinta fisierul principal cu loguri al sistemului in care se salveaza informatii de la majoritatea serverelor /var/log/wtmp - reprezinta un fisier binar care pastreaza informatii despre logarile in sistem; /var/log/boot.log - pastreaza informatii despre procesul de butare; /var/log/secure - pastreaza informatii despre actiuni legate de securitate (lagare prin ssh, comanda su etc); /var/log/cron - pastreaza informatii despre cron daemon; /var/log/dmesg - pastreaza informatii despre kernel si hardware;

Exemplu syslog.conf: # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit/var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log

Detalii:

Page 203: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

logrotate.conf este format dintr-o sectiune globala de optiuni care se refera la optiunile nespecificate in mod express pentru fisierele log in sectiunea fiecaruiaExemplu: # rotate log files weekly weekly # keep 4 weeks worth of backlogs. Numarul de versiunipastrate rotate 4 pe langa optiunile globale pentru fiecare fisier log exista o sectiune care specifica optiunele de rotire pentru respectivul fisier. Aceasta sectiune se poate gasi in /etc/logrotate.conf sau intr-un fisier separat in directorul /etc/logrotate.d. Toate fisierele din directorul /etc/logrotate.d sunt incluse in logrotate.conf

Exemplu: /var/log/httpd/access.log { rotate 5 mail [email protected] size=100k create 0660 wwwuser wwwuser postrotate /sbin/killall -HUP httpd endscript }

Detalii:rotate 5 - se pastreaza 5 versiuni ale lui access.log si anume access.log.1 pana la access.log.5; mail [email protected] - inainte de rotire sunt trimise pe email la adresa specificata; size=100k - fisierul este rotit in momentul in care dimensiunea sa depaseste 100k; create 0660 wwwuser wwwgroup - imediat dupa rotire se creaza un nou fisier cu acelasi nume cu permisiunile 0660 si avand owner si group owner pe wwwuser respectiv wwwgroup; postrotate - scripturile care apar intre postrotate si endscript se executa automat dupa rotirea logurilor. In general acestea sunt scripturi care restarteaza serverul respectiv pentru a loga in noul fisier creat;

In linux un fisier se identifica dupa numarul de inode. Dupa rotire, noul fisier creat care reprezinta o versiune a vechiului fisier are acelasi inode number, iar serverul va continua sa salveze informatii in el ( Exemplu: access.log.1)

Alte optiuni ce pot aparea in logrotate.conf daily, weekly sau monthly - fisierul este rotit zilnic, saptamanal sau lunar indiferent de dimensiune; missingok - daca fisierul nu exista nu se raporteaza eroare; ifempty/notifempty - roteste/nu roteste fisierul daca acesta este gol; compress/nocompress - comprima/nu comprima fisierul de tip log;

2. Verificarea constanta a logurilor

Fiindca forma in care multe servere logheaza informatia nu este "prietenoasa" si pentru ca volumul de informatie este extrem de mare, verificare manuala a logurilor are loc doar in momentul in care a avut loc un eveniment deosebit sau cand informatia cautata este de detaliu.

Page 204: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

In general se folosesc programe numite "System log analyzers and reporters" care genereaza un rezumat al logurilor si pe care-l formateaza intr-un mod usor de urmarit.

Logwatch este unul dintre cele mai folosite programe pentru generarea de rezumate a logurilor.

Printre optiunile sale se afla: trimiterea automata a rezumatului pe e-mail; generarea de fisere raport comprimate sau nu; flexibilitate maxima in ceea ce priveste informatiile din raport;

NotaLogwatch este un script scris in Perl care parseaza fisierele din /var/log.

Commanda logwatch foloseste fisierul de configurare/usr/share/logwatch/default.conf/logwatch.conf.Optiunile din fisier pot fi suprascrise ruland logwatch cu diferite optiuni.

Printre cele mai importante optiuni sunt:--detail -> indica gradul de detalii din raport --logfile file -> proceseaza doar fisierul indicat ( Exemplu: /var/log/messages) --service name -> numele serviciului ale carui loguri creaza raportul ( Exemplu: sshd, httpd, all) --print -> output este directionat la consola --mailto address -> trimite raportul automat pe e-mail la adresa specificata --range <yesterday|today|all> -> perioada care contine logurile ce creaza raportul --logdir dir -> cauta in directorul specificat si subdirectoarele sale, fisierele log pentru generarea raportului. Default este /var/log

Serverul POP/IMAP

Prezentare POP & IMAPPOP (Post Office Protocol) este un protocol la nivelul aplicatie care ruleaza client server. Serverul asculta default pe portul TCP/110.

IMAP (Internet Message Access Protocol) este un protocol la nivelul aplicatie care ruleaza client server. Serverul asculta default pe portul TCP/143.

Ambele sunt folosite pentru accesarea emailurilor aflate pe server. MUA (Thunderbird) se conecteaza la serverul POP sau IMAP pentru a copia sau muta un email de pe server pe client.

Page 205: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Fara aceste protocoale e-mailurile nu ar putea fi citite.

Comparativ cu POP, IMAP este un protocol mai modern, recomandat atunci cand se poate alege intre ele. Principalul avantaj este ca IMAP permite citirea inbox-ului simultan de catre mai multi useri. In cazul POP e-mailul este mutat de pe server pe client, iar in cazul IMAP e-mailul este copiat de pe server pe client. Exista astfel o sincronizare intre server si client.

Versiunile actuale folosite sunt POPv3 si IMAPv4.

Webmail

O alta modalitate de a accesa e-mailurile de pe un server inafara de a folosi clienti dedicati precum Thunderbird sau Outlook Express este cu ajutorul unui Broswer (webmail).

NotaWeb based email sau Webmail reprezinta un termen care se refera la accesarea e mailurilor de pe server folsind un Broswer.

Avantajele acestei metode este ca userul poate citi sau trimite e-mailuri de la orice calculator conectat la Internet fara nicio configuratie suplimentara. In cazul folosirii unui client dedicat acesta trebuie configurat cu IP-ul serverului SMPT, IP-ul serverului POP sau IMAP etc.

Serviciile gratuite oferite de marii provideri sunt in special de tip webmail. Exemplu: Yahoo mail, Gmail, Hotmail etc.

Unul dintre cele mai cunoscute si folosite programe webmail OpenSourse este SquirrelMail. Acesta este scris in PHP si include suport pentru SMTP (pentru trimitere de e-mail) si pentru IMAP (primire de e-mailuri).

O aplicatie webmail foloseste protocolul IMAP pentru accesul e-mailurile de pe server.

Pentru a instala SquirrelMail (acesta se instaleaza pe server, pe acelasi host pe care ruleaza si serverul SMTP) trebuie ca pe server sa fie instalat:PHP Server IMAP

Serverul Dovecot

Compilare si instalareInstalarea prin compilare a serverului Dovecot se realizeaza in mod standard. Exemplu de mai jos s-a realizat pe Fedora Core 9. In mod IDENTIC se compileaza si instaleaza pe orice distributie Linux.

Page 206: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Pasi de urmat: 1. Download sursele ultimei versiuni Dovecot de pe site-ul producatorului www.dovecot.org.Acestea pot fi downloadate in orice director din sistem.Se ruleaza: wget http://www.dovecot.org/releases/1.1/dovecot-1.1.2.tar.gz 2. Verificare integritate arhiva tar.gz folosind hash-ul sau semnatura digitala (Optional dar foarte recomandat)3. Decomprimare si dezarhivare arhivaSe ruleaza: tar -xzvf dovecot-1.1.2.tar.gz4. Rularea scriptului configure care verifica sistemul si anume daca acesta contine toate componentele necesare compilarii si instalarii serverului POP/IMAP. Dorim instalarea in directorul /opt/dovecot astfel incat sa putem urmarii si studia toate componentele cu care vine serverul.Se recomanda rularea scriptului configure de catre un user neprivilegiat. Se ruleaza: ./configure --prefix=/opt/dovecot 5. Compilare Se recomanda compilarea oricarei aplicatii de catre un user neprivilegiat.In urma compilarii rezulta din fisierele sursa fisiere executabile.Se ruleaza: make6. InstalareInstalarea presupune doar mutarea fisierelor executabile rezultate in urma compilarii din directorul cu surse in directorul dorit ( /opt/dovecot). Comanda poate fi executata doar de root.Se ruleaza: make install

NotaIn cazul in care se doreste instalarea automata din fisiere binare se ruleaza ca root yum install dovecot sau apt-get install dovecot in functie de distributie. Serverul se porneste executant: /etc/init.d/dovecot start. Fisierul acestuia de configurare este /etc/dovecot.conf.

ConfigurareConfigurarea serverului Dovecot este relativ simpla. Acesta functioneaza aproape "out of the box" fara nicio modificare. Fisierul de configurare este /opt/dovecot/etc/dovecot.conf in cazul exemplul nostru si /etc/dovecot.conf in cazul instalarii automate folosind yum sau apt-get in functie de distributie. In directorul /opt/dovecot/etc se gasesc mai multe fisiere sample de configurare. Un fisierul standard este dovecot-example.conf. Acesta trebuie copiat sub numele dovecot.conf in acelasi director si editat. Fiecare directiva de configurare este comentata in mare detaliu. Pentru a vizualiza doar directivele de configurare fara comentarii se ruleaza comanda: egrep '(#|^$)' dovecot.conf

Detalii: randurile care incep cu #(diez) inseamna comentarii si sunt ignorate; fisierul este format din directive si valorile acestora separate prin semnul egal; mai multe spatii sau tab sunt convertite intr-un singur spatiu respeciv tab;

Page 207: Capitolul 1 - Introducere & Instalare · PDF file1.2.4 LVM LVM (Logical Volume Management) Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe

Directive importante:

1. Specifica protocoalele pentru care serverul ofera suport. In cazul nostru acestea sunt imap si pop3. imaps si pop3s inseamna pop/imap criptat folosind ssl/tls. protocols = imap imaps pop3 pop3s

2. Specifica daca serverul permite autentificarea in clar. Se recomanda folosirea acestuitip de autentificare doar daca se cripteaza cu SSL. disable_plaintext_auth = no

3. Specifica daca foloseste ssl/tls pentru criptare. Se recomanda fiindca default IMAP si POP sunt protocoale care comunica in clar si deci informatia poate fi captata usor. In exemplul nostru nu folosim ssl. Daca se doreste folosirea ssl, tot ce trebuie facut este crearea unei perechi de chei si un certiticat digital. Detalii in cursul "Advanced Linux & Infosec" disponibil de asemenea online. ssl_disable = yes

4. Specifica userul folosit pentru procesul de login. Acest user nu are acces la e-mailuri. Se recomanda folosirea unui user special doar pentru Dovecot. login_user = dovecot

5. Specifica numarul de procese care asculta pentru a prelua noi conexiuni pop/imap login_processes_count = 3

Pentru securizare serverului urmatoarele aspecte sunt importante:

1. Criptarea informatiei dintre client si server folosind SSL/TLS.2. Limitarea numarului de procese dovecot, memorie consumate de fiecare etc.3. Rularea serverului in "jail". Acest lucru inseamna limitarea accesului acestuia la un singur director in loc de intregul sistem de fisiere.

NotaDovecot poate folosi mai multe modalitati de autentificare a userilor. In plus acestia pot fi useri de sistem (existenti in /etc/passwd si cu parola in /etc/shadow – cazul exemplului nostru) sau se pot gasi intr-o baza de date MySql.