Introducere
Apache HTTP Server este un web server pentru sisteme ca si Unix, Microsoft Windows, Novell NetWare si alte sisteme de operare. Apache este remarcabil pentru ca joaca un rol cheie in cresterea initiala a Internetului din lumea intreaga. Cand a fost pentru prima data eliberat, Apache a fost singura sursa alternativa viabila la Netscape Communications Corporation web server (in mod current cunoscut ca si Sun Java System Web Server). De atunci a evoluat la rivalul Unix - servere web in termeni de functionalitate si performanta. Din Aprilie 1996 Apache a fost cel mai popular server HTTP din intreaga lume a internetului, servind ca platforma de referinta impotriva careia alte server web sunt intentionate si apreciate; ca si in Ianuarie 2007, Apache a servit la 60% din toate website-urile. Apache continua sa fie cel mai popular server web care este utilizat.
Apache este dezvoltat si mentinut de o comunitate deschisa de dezvoltatori de aplicatii sub auspiciile Fundatiei Apache Software. Eliberata sub licenta Apache, serverul Apache HTTP este un program gratis.
Scurt istoric
Prima versiune a web serverului Apache a fost creeata de Robert McCool, care a fost serios implicat in Centru National pentru Supercomputing Applications web server, cunoscut simplu ca si NCSA HTTPd . Cand Rob a parasit NCSA la mijlocul anului 1994 a lasat o varietate de modele pentru a imbunatati circulatia prin email. Rob McCool nu a fost singur in eforturile sale. Multi alti dezvoltatori de aplicatii au ajutat la formarea originalului "Apache Group": Brian Behlendorf, Roy T. Fielding, Rob Hartill, David Robinson, Cliff Skolnick, Randy Terbush, Robert S. Thau, Andrew Wilson, Eric Hagberg, Frank Peters, si Nicolas Pioch. FAQ afirma pe site-ul oficial al proiectului: "Numele Apache a fost ales din respect pentru Tribul nativ indian American al apasilor ", bine cunoscut pentru indemanarile superioare in strategia lor si inepuizabila anduranta. Cea mai raspandita interpretare este aceea ca numele provine din faptul ca atunci cand a aparut la inceputul anului 1995, web serverul a constat intr-un set de patches la codul de baza al NCSA HTTPd 1.3 si de aceea a fost "a patchy" server .Aceasta a fost explicatia initiala a website-ului acestui proiect.
Versiunea 2 a serverului Apache a fost o rescriere substantiala din codul Apache 1.x, cu o mare concentrare asupra ulterioarei modulatii si dezvoltarea unei retele portabile ,Apache Portable Runtime. Partea centrala din Apache 2 x are mai multe intensificari majore fata de Apache 1.x. Acestea include filetarea UNIX, suport mai bun pentru platforme non-UNIX , (cum ar fi Microsoft Windows), un nou Apache API, si suport IPv6 . Prima eliberare a Apache 2 a fost in Martie 2000 cu prima disponibilitate generala in Mai 2002.
Capitolul I: Instalarea si configurarea PHP si MySQL cu serverele web Apache si IIS sub sistemul de operare Windows
1.1. Precizari preliminarii
Acest articol vizeaza utilizatorii de sisteme Windows 98/Me si NT/2000/XP/2003. Pentru instalarea PHP aveti nevoie de un server web, instalat local, cum ar fi Apache HTTP Server sau Microsoft IIS (Microsoft Internet Information Services).
Aveti nevoie de kitul pentru serverul Apache sau CD-ul de instalare pentru Windows (in cazul in care doriti sa instalati Microsoft IIS), pachetul PHP (disponibil sub forma de installer sau arhiva), serverul MySQL si un browser web. Informatiile pentru procurarea pachetelor de instalare sunt oferite treptat.
1.2. Instalarea unui server web
Apache HTTP Server este o solutie open-source (sursa libera), dezvoltata de Apache Software Foundation care este folosita de peste 60% dintre siturile prezente pe web, fiind disponibil atat pentru Windows, cat si pentru Linux. Puteti descarca ultima versiune de la https://httpd.apache.org/download.cgi (alegeti Win32 Binary (MSI Installer)).
Versiunea 2.0.x a server-ului Apache nu ofera suport complet pentru sisteme de operare Windows mai vechi ca NT 4.0, deci este recomandat sa descarcati versiunea 1.3.x a acestui server pentru Windows 98. De asemenea, Apache 2.0.40 sau mai nou este compatibil cu versiuni mai noi decat (si incluzand) PHP 4.3.0 si respectiv PHP 5. Recomand descarcarea ultimelor versiuni, daca este cazul.
In timpul instalarii, trebuie sa specificati Network Domain si Server Name ca fiind "localhost", iar la adresa administratorului puteti introduce adresa dvs. de e-mail, desi nu are vreo importanta (in cazul in care ) in utilizarea ulterioara a produsului (fereastra este ilustrata mai jos). Este instalat si Apache Monitor cu care puteti 13513l1120n porni sau opri serverul web Apache.
Serverul web de la Microsoft, IIS poate fi instalat doar cu CD-ul de instalare al sistemului de operare Windows, folosind functionalitatea: Add/Remove Windows Components (Start > Settings > Control Panel > Add/Remove Programs > Add/Remove Windows Components, pe partea stanga).
In Windows XP, instalarea acestuia este imediata, in sensul ca nu trebuie sa configurati nimic special. Pentru a va asigura ca serverul IIS este pornit, rulati: Computer Management (din Start > Settings > Control Panel > Administrative Tools), navigati pana la Services and Applications, Internet Information Services, Web Sites, Default Web Site.
Daca starea acestuia este "Stopped" faceti click dreapta si selectati "Start".
Atentie! Apache HTTP Server si Microsoft IIS nu pot rula in acelasi timp.
Inainte de pornirea unuia dintre servere asigurati-va ca celalalt nu ruleaza, altfel incercarea va esua cu un mesaj de eroare.
Pentru a testa daca oricare dintre servere a fost instalat corect, navigati cu browserul dvs. web la adresa https://localhost.
Mai jos, aveti capturi de ecran cu pagina incarcata in cazul in care instalarea a fost efectuata cu succes, pentru cele doua servere tratate. Pentru a incarca pagini ce pot fi accesate local de catre serverul web, copiati-le in directorul:
c:\Inetpub\wwwroot\ pentru Microsoft IIS
c:\Program Files\Apache Software Foundation\Apache2.2\htdocs\ pentru Apache
In unele versiuni mai vechi, "Apache Software Foundation" se numeste "Apache Group", de asemenea, numele directorului in care este instalat serverul web ( "Apache2.2" in acest exemplu) este denumit dupa versiunea curenta pe care ati instalat-o.
1.3. PHP scurta istorie
PHP este unul dintre cele mai populare limbaje de scripting pe parte de server. Initial a fost scris in C, de programatorul canadian Rasmus Lerdorf si lansat sub numele de Personal Home Page Tools in iunie 1995 din nevoia de a genera pagini dinamic si a-l scuti astfel de un volum de munca.
Doi ani mai tarziu, doi programatori israelieni, Zeev Suraski si Andi Gutmans au rescris parser-ul PHP punand bazele PHP3, schimband si denumirea in "PHP: Hypertext Preprocessor". In mai 2004, este lansat PHP4, folosind un nou motor, Zend Engine 1.0, dezvoltat de programatorii amintiti.
Pentru a descarca PHP, mergeti la https://www.php.net/downloads.php si alegeti PHP Zip Package (pentru a instala cu Apache HTTP Web Server) sau PHP installer (pentru a instala cu Microsoft IIS) pentru oricare dintre versiunile 4 sau 5, dezvoltate concomitent de catre The PHP Group. Configurarea automata pentru serverul Apache nu a fost implementata, deci va trebui facuta manual.
1.4. Instalarea PHP pentru Microsoft IIS (folosind PHP installer)
Momentan, doar PHP 4 beneficiaza de kit pentru instalare automata. Descarcati installer-ul, selectati optiunea Standard. Veti fi intrebat de tipul de server folosit, alegeti "Microsoft IIS 4 or higher" sau "Microsoft IIS 6 or higher", dupa caz. Installer-ul va copia fisierele pe discul ce contine sistemul de operare in directorul \php. De obicei, paginile PHP vor fi servite imediat, nefiind necesara restartarea IIS.
Pentru a testa daca instalarea PHP a fost realizata cu succes, descarcati fisierul test (sau scrieti dumneavoastra un fisier php) si copiati-l in directorul c:\Inetpub\wwwroot.
Daca fisierul este afisat, instalarea a fost finalizata cu succes. In alte cazuri, acesta (https://localhost/test.php) poate fi propus pentru download, ceea ce inseamna ca serverul web nu recunoaste extensia ".php".
Asigurati-va ca pasii anteriori au fost parcursi ca atare (ca serverul potrivit <IIS sau Apache>este pornit etc.). In acest moment, daca instalarile au reusit, puteti trece direct la instalarea si configurarea server-ului MySQL.
1.5. Instalarea PHP pentru Apache HTTP Server
In cazul in care ati descarcat arhiva ce contine fisierele PHP, creati un director \php pe discul pe care este instalat sistemul de operare si serverul web Apache si dezarhivati pachetul acolo. Vom presupune de aici inainte ca discul respectiv este c:. Aceasta este o instalare tipica pentru PHP ca modul Apache.
1) Navigati la c:\php\ si redenumiti fisierul php.ini-dist in php.ini. Deschideti acest fisier in Notepad (pentru a face aceasta, cel mai bine este sa deschideti o fereastra Notepad, apoi trageti de iconita fisierului, aflandu-va intr-un file manager - Windows Explorer de exemplu - asupra ferestrei deschise), sau intr-un alt editor text si cautati textul doc_root = pe care va trebui sa-l inlocuiti cu doc_root = "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\". Apoi cautati extension_dir = si inlocuiti cu extension_dir = "c:\php".
2) Copiati fisierele php.ini si php4ts.dll (sau php5ts.dll in caz ca ati ales PHP 5) din c:\php\ in c:\windows\system32\ (pentru Windows 2000/XP) sau c:\windows\system\ (pentru Windows 98/Me).
3) Acum, pentru a configura si serverul web Apache sa lucreze cu PHP, mergeti la c:\Program Files\Apache Software Foundation\Apache2.2\conf\ (sau locatia corespunzatoare distributiei instalate) si deschideti fisierul httpd.conf cu Notepad (sau alt editor text). Parcurgeti treptat instructiunile de mai jos si adaugati la sfarsitul fisierului liniile ce corespund situatiei dumneavoastra. Dupa ce ati facut acest lucru, restartati serverul Apache.
Incarcarea modulului PHP, pentru Apache 2 si PHP 4
LoadModule php4_module c:/php/sapi/php4apache2.dll
Incarcarea modulului PHP, pentru Apache 2 si PHP 5. Pentru acest caz, exista o cunoscuta eroare de compatibilitate intre Apache 2.0.x si Apache 2.2.x, legata de interfata API.
Pentru versiunile Apache 2.0.x puteti utiliza cu succes directiva de mai jos. Pentru 2.2.x, trebuie sa folositi fisierul php5apache2_2.dll, disponibil in distributia PHP 5.2.x, aflata in stare de dezvoltare si testare, la momentu la scrierii acestui articol.
Vizitati PHP Snapshots si descarcati ultimul pachet de tip (5.2.x-dev), din categoria Win32 Packages. Apoi dezarhivati intr-un director separat continutul pachetului si copiati fisierul mentionat anterior la c:\php\. Alegeti una din directivele de mai jos:
#pentru Apache 2.0.x
LoadModule php5_module c:/php/php5apache2.dll
#pentru Apache 2.2.x
LoadModule php5_module c:/php/php5apache2_2.dll
Incarcarea modulului PHP, pentru Apache 1.3.x si PHP 4
LoadModule php4_module c:/php/sapi/php4apache.dll
Incarcarea modulului PHP, pentru Apache 1.3.x si PHP 5
LoadModule php5_module c:/php/sapi/php5apache.dll
Doar daca ati ales Apache 1.3.x, considerati si urmatoarea linie:
AddModule mod_php4.c
Adaugarea suportului pentru fisiere de tip .php, .php3 sau .phtml. Stergeti caracterul "#" daca doriti suport optional si pentru ultimele doua extensii.
AddType application/x-httpd-php .php
#AddType application/x-httpd-php .php3
#AddType application/x-httpd-php .phtml
Pentru a configura calea catre fisierul de configurare PHP (php.ini), adaugati si urmatoarea linie (bineinteles, inlocuiti cu calea corespunzatoare instalarii dvs.)
PHPIniDir c:\php\
Pana acum trebuie sa aveti trei linii pentru server-ele Apache 2 si
respectiv patru linii pentru server-ele Apache 1.3.x, pe care le veti copia la
sfarsitul fisierului httpd.conf.
Exemplu (Apache 1.3.x si PHP5):
LoadModule php5_module c:/php/sapi/php5apache.dl
AddModule mod_php4.c
AddType application/x-httpd-php .php
PHPIniDir c:\php\
Nota: Liniile precedate de caracterul "#" se numesc si comentarii, acestea nu sunt interpretate de Apache si le puteti sterge.
4) Cautati linia DirectoryIndex index.html si modificati-o in DirectoryIndex index.html index.php. Astfel, indicati ca pagina de index pe care o va deschide Apache cand este accesat un director sa fie ori index.html ori index.php, in aceasta ordine.
Pentru a testa daca instalarea PHP a fost realizata cu succes, descarcati fisierul test sau scrieti dumneavoastra unul si copiati-l in directorul c:\Program Files\Apache Software Foundation\Apache2.2\htdocs.
Daca fisierul este afisat, instalarea a fost finalizata cu succes. In alte cazuri, acesta (https://localhost/test.php) poate fi propus pentru download, ceea ce inseamna ca serverul web nu recunoaste extensia ".php".
1.6. Instalare MySQL 5
Pentru inceput, puteti descarca kitul de instalare Windows Essentials de la https://dev.mysql.com/downloads/mysql/5.0.html.
Alegeti tipul de instalare Typical, iar la sfarsitul instalarii optati pentru configurarea imediata a serverului MySQL (optiunea Configure the MySQL Server now trebuie sa fie bifata).
Alegeti Standard Configuration, apoi debifati optiunea Install As Windows Service in caz ca nu doriti ca serverul MySQL sa porneasca ca serviciu Windows (daca alegeti sa debifati aceasta optiunea, va trebui sa porniti manual serverul, ruland c:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld.exe pentru Windows 95/98 sau c:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe pentru Windows NT/2000/XP.
Nota: In unele versiune mai vechi, instalarea se face in directorul c:\mysql\).
Pe o platforma de test, pe care o utilizati numai dvs., puteti lasa pentru numele de utilizator sau pentru parola cate un sir gol. Mai tarziu, va trebui sa folositi aceste date, la orice conectare la serverul MySQL.
Pentru a lasa numele de utilizator si parola ca siruri goale, debifati optiunea Modify Security Settings, in acest stadiu. In acest fel, numele de utilizator va fi setat ca fiind "root". La sfarsit, apasati Execute pentru a termina procesul de configurare.
Nota: Deoarece MySQL este un server, la fel ca IIS sau Apache, va trebui mai intai sa-l porniti conform instructiunilor de mai sus ca sa lucrati cu el.
1.7. Precizari pentru Microsoft IIS
Pentru a testa daca instalarea serverului MySQL a fost realizata cu succes, descarcati fisierul test sau scrieti dumneavoastra unul si copiati-l in directorul c:\Inetpub\wwwroot.
La accesarea acestuia, la adresa https://localhost/testdb.php, veti primi un mesaj corespunzator cu privire la conectarea la server-ul MySQL. In caz de eroare, asigurati-va ca ati pornit serverul MySQL conform instructiunilor de mai sus.
1.8. Precizari pentru Apache HTTP Server
Este nevoie sa editam php.ini pentru a activa extensia pentru MySQL.
Deschidem acest fisier cu Notepad (in mod normal, fisierele de tip ini sunt asociate cu Notepad) si cautati linia ;extension=php_mysql.dll, si stergeti virgula din fata ei.
Salvam fisierul si restartati serverul web Apache. In acest moment, suportul pentru functiile MySQL este activat.
1.9. Nota de final
La momentul scrierii acestui articol, ultimele versiuni erau Apache 2.2.3 si respectiv Apache 1.3.37, PHP 5.1.6 si respectiv PHP 4.4.4 si MySQL 5.0. Este posibil ca acuratetea acestor instructiuni sa fie diminuata cu versiunile viitoare.
Apache HTTP Server, PHP si MySQL sunt solutii gratuite open-source (sursa libera) protejate de GNU General Public License.
Consultati licenta pentru fiecare produs in parte daca aveti nelamuriri cu privire la termenii de utilizare. Microsoft Internet Information Services (IIS) este software protejat de legislatia romāna si internationala si este disponibil numai cu CD-ul licentiat de Windows.
Documentatia completa (inclusiv instructiuni de configurare pentru alte tipuri de servere, note de compatibilitate intre versiuni etc.) o puteti gasi pe siturile producatorilor.
Acest tutorial isi propune sa-i indrume, pe cei doritori de a avea un server web in Linux, in pasii instalarii celor trei pachete gratuite si open-source, apache, Mysql si php.
In cazul de fata vom folosi:
Sistem de operare: SuSE Linux 10.1
Compilator: GCC 4.1.0
Server web: Apache 2.2.2
Server baze de date: MySQL 5.0.22
Interpretor: PHP 5.1.4
~> reprezinta promptul consolei
Procesele de instalare se realizeaza sub privilegii de root (sau » Enter » *parola_de_root* » Enter)
Capitolul II: Instalarea Apache 2.2.2
Inainte de a incepe cu instalarea, e indicat (nu obligatoriu) sa cream un user si un grup sub care va rula Apache (astfel, fisierle create de Apache (eventual rezultatele executiilor scripturilor PHP) vor apartine acestui user, apache2 in cazul nostru, si afiliate acestui grup, www in cazul nostru):
~> groupadd www
~> useradd -g www apache2
In continuare vom obtine sursele serverului: httpd-2.2.2.tar.gz (aproximativ 6 MB)
Dupa ce am obtinut sursele, trecem la dezarhivarea lor in hardisk-ul local, deschizand o consola in directorul unde am salvat arhiva .tar.gz
~> tar -xzf httpd-2.2.2.tar.gz
~> cd httpd-2.2.2
~> ./configure --prefix=/usr/local/apache2 --enable-so
In exemplul de mai sus, prima linie reprezinta dezarhivarea surselor, a doua linie reprezinta schimbarea directorului curent in cel in care s-a realizat dezarhivarea iar a treia linie reprezinta configurarea surselor: --prefix reprezinta destinatia unde se va instala (si va fi accesibil) serverul Apache iar --enable-so activeaza modulul Dynamic Shared Object, pentru a putea dISPune pe viitor de module cum ar fi de exemplu mod_rewrite. Comanda ./configure accepta si multi alti parametri pe care ii poti afla ruland-o cu optiunea --help (./configure --help).
Odata terminata si aceasta etapa, sa trecem la instalarea efectiva a serverului Apache:
~> make
~> make install
In acest moment, daca totul a decurs fara erori (cel putin asa ar trebui in conditii normale), instalarea serverului Apache s-a incheiat. Urmeaza configurarea lui si a sistemului.
Prima modificare pe care o vom face este aceea a fisierului de configurare a serverului Apache, si anume httpd.conf
~> mcedit /usr/local/apache2/conf/httpd.conf
sau pentru "sadici":
~> vi /usr/local/apache2/conf/httpd.conf
Odata deschis fisierul, trebuie modificat astfel incat sa arate ca mai jos ("..." reprezinta linii ce trebuiesc ignorate):
ServerRoot "/usr/local/apache2"
...
<IfModule !mpm_winnt.c>
<IfModule !mpm_netware.c>
User userul_tau_de_linux
Group www
</IfModule>
</IfModule>
...
DocumentRoot "/calea/catre/fisierele/tale"
...
<Directory "/calea/catre/fisierele/tale">
Options FollowSymLinks
AllowOverride None
</Directory>
...
DirectoryIndex index.php index.html index.htm index.html.var
Modificarile de mai sus sunt minimale, dar suficiente pentru ce ne trebuie noua.
Acum setam drepturi pentru directorul unde vor fi stocate fisierele site-urilor noastre:
chmod -R 750 /calea/catre/fisierele/tale
Acestea fiind zise, sa testam ce am facut pana acum, pornind, oprind sau restartand serverul:
~> /usr/local/apache2/bin/apachectl start
~> /usr/local/apache2/bin/apachectl stop
~> /usr/local/apache2/bin/apachectl restart
In momentul de fata serverul Apache este configurat si ruleaza. Dar, de vreme ce vom reseta sistemul la un moment dat, sa facem modificarile necesare pentru ca acesta sa porneasca odata cu sistemul:
~> cp /usr/local/apache2/bin/apachectl /etc/init.d
~> chmod 755 /etc/init.d/apachectl
~> chkconfig --add apachectl
~> chkconfig --level 35 apachectl on
Acestea fiind zise, am terminat cu Apache-ul
Capitolul III: Instalarea MySQL 5.0.22
Inainte de toate trebuie sa ne asiguram ca userul "mysql" exista in sistem, daca nu cream unul (sub care serverul de MySQL va functiona):
~> groupadd mysql
~> useradd -g mysql mysql
Mai departe, obtinem sursele serverului:
FTP://ftp.roedu.net/pub/mirrors/ftp.mysql.com/Downloads/MySQL-5.0/mysql-5.0.22.tar.gz" class="link" title="MySQL 5.0.22">mysql-5.0.22.tar.gz (aproximativ 18,6 MB)
In continuare, urmeaza dezarhivarea surselor, configurarea pentru instalare si, in sfarsit, instalarea:
~> tar -xzf mysql-5.0.22.tar.gz
~> cd mysql-5.0.22
~> ./configure --prefix=/usr/local/mysql-5.0.22 --with-charset=utf8 --with-collation=utf8_general_ci
~> make
~> make installc
Mai sus, am folosit --with-charset=utf8 si --with-collation=utf8_general_ci pentru a evita instalarea cu Swedish implicit.
Acum cream un link catre directorul in care s-a instalat MySQL-ul, pentru a ne fi usor sa facem referire pe viitor catre el (la instalarea PHP-ului, de exemplu):
~> ln -s /usr/local/mysql-5.0.22/ /usr/local/mysql
Urmeaza crearea fisierului my.cnf (fisierul de configurare al MySQL-ului). Acesta contine optiuni de control si securitate. Fisierul nu trebuie scris de la 0, existand patru variante gata facute in directorul support-files/ al kit-ului. Citeste-le pe rand si alege-l pe cel care crezi ca ti se potriveste cel mai bine. Eu am ales my-small.cnf pentru ca nu fac webhosting sau mai stiu eu ce... imi trebuie pentru un simplu localhost. Acum il copiem unde trebuie si ii dam drepturi de scriere etc:
~> cp support-files/my-small.cnf /etc/my.cnf
~> chown root /etc/my.cnf
~> chgrp root /etc/my.cnf
~> chmod 644 /etc/my.cnf
Acum editam fisierul si specificam ca serverul va rula sub privilegiile userului mysql.
~> mcedit /etc/my.cnf
sau pentru "sadici":
~> vi /etc/my.cnf
cauta linia [mysqld] si imediat sub ea insereaza o noua linie in care scrii:
user = mysql
Locul pe HDD-uri unde stau bazele de date se poate alege cand se editeaza fisierul my.cnf specificand parametrul datadir. (@whooper)
In continuare, pentru a functiona cum trebuie, MySQL are nevoie de o baza de date mysql . Pentru a o crea, ruleaza:
~> /usr/local/mysql/bin/mysql_install_db --user=mysql
Se va crea un director /usr/local/mysql/var/ care va contine bazele de date necesare. Tot aici vor fi stocate si restul de baze de date care se vor crea de-a lungul timpului. Directorul trebuie sa poata fi scris de catre userul "mysql".
Acum sa pornim serverul pentru prima data (daca acesta este un upgrade, de la o versiune mai veche ce deja exista instalata in sistem, nu uita s-o opresti pe aceasta din urma...):
~> /usr/local/mysql/bin/mysqld_safe --user=mysql &
apasa Enter pentru e reveni la cursor/prompt. Acum severul MySQL ar trebui sa mearga. Pentru a verifica, in urma comenzii de mai jos, trebui sa primesti raspuns de la server cu niste informatii legate de el:
~> /usr/local/mysql/bin/mysqladmin version
Conectarea la serverul MySQL se face cu comanda:
~> /usr/local/mysql/bin/mysql -u root
Vei primi un mesaj de intampinare iar promptul se va schimba in mysql>
Acum sa setam parola de root, inainte de orice alta operatiune:
mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;
mysql> SELECT Host, User FROM mysql.user;
va fi afisat un tabel cu doua coloane si doua randuri. Cauta randul ce contine root in coloana User si altceva in afara de localhost in coloana Host . Acel altceva este numele gazdei MySQL (host_name)
mysql> SET PASSWORD FOR 'root'@'localhost' =
PASSWORD('parola_noua');
mysql> SET PASSWORD FOR 'root'@'acel_altceva' = PASSWORD('parola noua');
Acesta este super-utilizatorul ce va avea drepturi peste toate bazele de date existente sau viitoare.
mysql> quit;
Urmatorul pas este reponirea serverului MySQL, modificarile necesare fiind realizate:
~> /usr/local/mysql/bin/mysqladmin -u root -p shutdown
~> /usr/local/mysql/bin/mysqld_safe --user=mysql &
La fel ca la Apache, sa-l facem sa porneasca singur la start-up. In directorul unde sunt sursele dezarhivate ruleaza:
~> cp support-files/mysql.server /etc/init.d/mysql
~> chmod 755 /etc/init.d/mysql
~> chkconfig --add mysql
~> chkconfig --level 35 mysql on
Am terminat si cu MySQL, ne-a mai ramas...
Capitolul IV: Instalarea PHP 5.1.4
Vom instala PHP-ul ca modul pentru Apache, astfel fiind intializat la pornirea serverului.
Obtinem sursele serverului: php-5.1.4.tar.gz (aproximativ 7,9 MB)
Decomprimam si configuram:
~> tar -xzf php-5.1.4.tar.gz
~> cd php-5.1.4
~> ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --enable-module=so --enable-bcmath --enable-calendar --with-curl --enable-exif --enable-ftp --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local/png --with-gettext --with-pear --enable-sockets --with-ttf --with-freetype-dir=/usr/include/freetype --enable-gd-native-ttf --with-zip --with-zlib
Primii doi parametri stabilesc caile de acces, iar al treilea specifica si compilarea cu suport pentru MySQL (de vreme ce incepand cu versiunea 5 nu mai este implicit). Pentru restul de parametri ai la dispozitie ./configure --help
In continuare
~> make
~> make install
Toate schimbarile necesare in httpd.conf (fisierul de configurare al lui Apache) ar trebui sa fie facute deja, dar, pentru orice eventualitate, verifica daca urmatorele linii se regasesc acolo (Daca nu exista, adauga-le manual. ):
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
Urmeaza crearea fisierului php.ini , fisierul in care se configureaza modul in care ruleaza PHP. Alege din fisierele gata facute (in directorul in care se gaseste kit-ul) si copie-l in directorul /lib din directorul unde s-a instalat PHP:
~> cp php-5.1.4/php.ini-recommended /usr/local/php/lib/php.ini
iar daca ai nevoie sa editezi fisierul php.ini:
~> mcedit /usr/local/php/lib/php.ini
sau pentru "sadici":
~> vi /usr/local/php/lib/php.ini
Ne-a mai ramas sa restartam serverul Apache
~> /usr/local/apache2/bin/apachectl restart
Ca sa verifici daca totul e in regula, creeaza un fisier test.php
<?php
phpinfo();
?>
si acceseaza in browser https://linux/test.php sau https://localhost/test.php sau https://127.0.0.1/test.php
Apache HTTP Server Project este un efort de a dezvolta si mentine un open-source de server HTTP pentru moderne, inclusiv sisteme de operare UNIX si Windows NT. Scopul acestui proiect este de a oferi o sigure, eficiente si extensibila server HTTP care ofera servicii de sincronizare cu standardele actuale HTTP. Programul Apache a fost cel mai popular server web de pe Internet din aprilie 1996.
Apache HTTP Server Project este mandra sa anuntelansarea versiunii 2.2.8 a Apache HTTP Server ( "Apache"). Aceasta versiune este īn principal una de securitate si bugfix release. Aceasta versiune de Apache este o mare eliberare si de a īncepe o noua ramura stabila, si reprezinta īn cele mai bune disponibile versiune de Apache HTTP Server. Noile caracteristici includ Smart filtrare, cache īmbunatatita, AJP de proxy, proxy Load Balancing, gratios Shutdown sprijin, de mari dimensiuni fisier Suport, Eveniment MPM, si refactored de autentificare / autorizare.
Capitolul V: Instalarea si configurarea serverului web Apache sub sistemul de operare Linux
Instructiunile de instalare prezentate īn acest capitol sunt proiectate pentru a aplica la ambele active ramuri (1.x si 2.x) din Apache server de web care ruleaza pe sistemele Linux. Sfaturile de configurare din īn acest capitol, functioneaza bine pentru platforme non-Unix (de exemplu, Windows), dar diferentele īn pasii de instalare sunt mai mult de remarcat.
5.1. Instructiuni de instalare
Īnainte ca instalarea sa poata avea loc Apache trebuie sa fie informat despre mediul unde va fi instalat. Aceasta se face prin intermediul scriptului configure:
$ ./configure --prefix=/usr/local/apache
Scriptul de configurare exploreaza sistemul de operare si creeaza Makefile pentru el, deci avem posibilitatea sa executam urmatoarele pentru a īncepe procesul real de compilare, copiem fisierele īn cadrul directorului stabilit de catre prefixul de optiune si se va executa scriptul apachectl pentru a porni serverul Apache:
$ make
# make install
# /usr/local/apache/bin/apachectl start
Desi aceasta se va instala Apache si a īncepe, avem nevoie, de asemenea, sa configuram operare sistemul sa porneasca atunci cānd porneste Apache. Procedura difera de la sistem la sistem, pe platforme Unix, dar este, de obicei, se face prin crearea unui link simbolic de la scriptul apachectl pentru nivelul de executie relevant:
# cd /etc/rc3.d
# ln -s /usr/local/apache/bin/apachectl S85httpd
5.2. Testarea instalarii
Pentru a verifica daca pornirea a reusit,
īncercam sa accesam serverul de web folosind un client browser. Daca
functioneaza, vom vedea pagina "Seeing this instead of the website
you expected?". La momentul acestei scrieri, exista discutii
pe lista Apache Developers' pentru a reduce mesajul de bun venit, pentru a se
evita confuzia utilizatorilor.
Folosind instrumentul ps, putem afla cāte procese sunt in Apache:
$ ps -Ao user,pid,ppid,cmd | grep httpd
root 31738 1 /usr/local/apache/bin/httpd -k start
httpd 31765 31738 /usr/local/apache/bin/httpd -k start
httpd 31766 31738 /usr/local/apache/bin/httpd -k start
httpd 31767 31738 /usr/local/apache/bin/httpd -k start
httpd 31768 31738 /usr/local/apache/bin/httpd -k start
httpd 31769 31738 /usr/local/apache/bin/httpd -k start
Utilizand comanda tail, putem vedea ce este īnregistrat, cererile cer sunt prelucrate diferit. Introducem un nume de fisier inexistent īn bara de locatie a browserului acesta trimite cererea pe serverul de web; apoi examineaza timpul de acces (log-urile se afla īn folderul /var/www/logs).
192.168.2.3 - - [21/Jul/2004:17:12:22 +0100] "GET /manual/images/feather.gif
HTTP/1.1" 200 6471
192.168.2.3 - - [21/Jul/2004:17:20:05 +0100] "GET /manual/not-here
HTTP/1.1" 404 311
5.3. Selectarea modulelor pentru a instala
Teoria din spatele modulului de selectie a declarat ca numarul mai mic de module ce ruleaza, prezinta sanse mai mici de a fi o vulnerabilitate prezenta īn server. Probabilitatea ca o vulnerabilitate sa fie prezenta īn cod creste cu complexitatea modulului. Sunt sanse ca de fapt module complexe, cum ar fi mod_ssl (si bibliotecile OpenSSL din spatele acestuia), sa fie cele periculoase.
Trebuie sa petrecem ceva timp cercetānd module distribuite cu Apache, astfel īncāt sa putem identifica īn mod corect ce module sunt necesare si care poate fi oprite īn conditii de siguranta. Modul complet de referinta este disponibil la https://httpd.apache.org/docs-2.0/mod/.
Urmatoarele module sunt mai periculoase decāt altele, asa īncāt ar trebui sa ia īn considerare daca instalarea are nevoie de ele:
mod_userdir - Permite fiecarui utilizator sa aiba propria zona de site web sub numele de utilizator . Acest modul ar putea fi folosit pentru a descoperi conturile de utilizator valabile de pe server, deoarece Apache raspunde diferit īn momentul īn care a īncercat nume de utilizator nu exista (īntoarcere statutul 404) si atunci cānd aceasta nu are o zona definita de web
mod_info - Expunere de configurare server de web ca o pagina web.
mod_status - Ofera informatii īn timp real despre Apache, de asemenea, ca o pagina web.
mod_include - Ofera
capabilitati simplu de scripting cunoscute sub numele de server-side
include (SSI). Este foarte puternic, dar de multe ori nu sunt folosite.
Pe de alta parte, ar trebui sa includem aceste module īn instalare.
mod_rewrite - Permite primirea de cereri de a fi rescrise īn altceva. Cunoscut sub denumirea de "Swiss Army Knife" de module, veti avea nevoie de functionalitatea de acest modul.
mod_headers -Permite solicitare de raspuns si antete de a fi manipulate.
mod_setenvif - Permite variabilele de mediu, care urmeaza a fi stabilite conditii bazate pe cererea de informatii. Multe alte module "conditionata optiuni de configurare se bazeaza pe variabila de mediu teste.
5.4. Configurarea si securizarea
Incepand cu gol un fisier de configurare este o buna practica, deoarece acesta mareste īntelegere a modului de lucrari de Apache. Īn plus, fisierul de configurare, fisier este mare, contine directivele pentru tot, inclusiv module pe care nu le vom folosi. Cel mai bine este sa pastram fisierele de configurare frumos.
Deschidem fisierul de configurare (/usr/local/apache/conf/httpd.conf) cu cāteva directive generale:
# location of the web server files
ServerRoot /usr/local/apache
# location of the web server tree
DocumentRoot /var/www/htdocs
# path to the process ID (PID) file, which
# stores the PID of the main Apache process
PidFile /var/www/logs/httpd.pid
# which port to listen at
Listen 80
# do not resolve client IP addresses to names
HostNameLookups Off
5.5. Setarea serverului. Contul de utilizator
Dupa instalare, Apache ruleaza ca un utilizator "nobody" (nimeni). Īn timp ce acest lucru este convenabil (acest cont īn mod normal exista īn toate sistemele de operare Unix), este o idee buna de a crea un cont separat pentru fiecare sarcina. Cel mai frecvent folosit nume de utilizator pentru acest cont este httpd, si unii oameni utilizeaza apache. Pentru a crea o cont nou, executam urmatoarele doua comenzi īn timp ce ruleaza ca root.
# groupadd httpd
# useradd httpd -g httpd -d /dev/null -s /sbin/nologin
Aceste comenzi creaza un grup si unu cont de utilizator, stergere a contului de origine directorul/dev/null si shell/sbin/Nologin (īn mod eficient pentru dezactivarea de login cont). Adaugam urmatoarele doua linii in fisierul de configurare Apache httpd.conf:
User httpd
Group httpd
5.6. Setarea permisiunii binare a fisierelor Apache
Dupa crearea noului cont de
utilizator ar putea fi primul impuls pentru a atribui īn proprietate peste
nstalarea Apache. Pentru ca Apache sa ruleze pe portul 80, acesta trebuie
sa fie initiat de catre utilizatorul root. Permiterea a oricarui
alt cont de scriere sau acces la binar httpd ar da seama ca privilegii
pentru a executa
nimic ca root.
Aceasta problema ar putea aparea, de exemplu, daca un atacator a intrat īn sistem. Grupul de lucru ca utilizator de Apache (httpd), ar fi putut sa īnlocuiasca binar httpd cu cu altceva si ar fi īnchis serverul de web. Administratorul, gāndea ca serverul web a esuat, s-ar fi logat si ar īncerca sa porneasca din nou serverul;astfel ar fi cazut īn capcana executata de un program Trojan.
De aceea, trebuie sa ne asiguram ca numai utilizatorul root are acces de scriere:
# chown -R root:root /usr/local/apache
# find /usr/local/apache -type d | xargs chmod 755
# find /usr/local/apache -type f | xargs chmod 644
Nu exista nici un motiv cand altcineva īn afara de utilizatorul root ar trebui sa aiba posibilitatea de a citi
Configurarea Apache sau de jurnalele:
# chmod -R go-r /usr/local/apache/conf
# chmod -R go-r /usr/local/apache/logs
5.7. Configurarea securitatii de valori prestabilite
Cu exceptia cazului īn care altfel
spus, Apache va servi orice fel de fisier-l poate accesa. Aceasta este,
probabil, nu ceea ce majoritatea persoanelor doresc; o eroare de configurare ar
putea expune accidental fisierele vitale de sistem
pentru oricine. Pentru a schimba acest lucru, refuzam accesul complet la
fisierele de sistem si apoi permitem accesul la documentul de root
numai prin introducerea urmatoarelor directivele īn fisierul de
configurare httpd.conf:
<Directory />
Order Deny,Allow
Deny from all
</Directory>
<Directory /var/www/htdocs>
Order Allow,Deny
Allow from all
</Directory>
5.8. Logging (jurnalizarea)
Avand o copie a activitatii serverului de web este de o importanta deosebita. Rapoartele ne spun care continut este popular si daca server-ul este utilizat gresit sau incorect.
Exista doua tipuri de inregistrari.
- access log este o evidenta a tuturor cererilor trimise la un anumit server de web sau site-ul web. Pentru a crea un acces log, avem nevoie de doi pasi. Īn primul rānd, utilizarea directivei LogFormat pentru a defini un format de logare. Apoi, folosim directiva CustomLog pentru a creati un timp de acces īn acest format:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%i\" \"%i\"" combined
CustomLog /var/www/logs/access_log combined
- error log contine o evidenta a tuturor evenimentelor de sistem
(cum ar fi pornirea de īnchiderea serverului de web) si o iregistrare a erorilor
care au aparut īn timpul procesarii cererii. De exemplu, o cerere
pentru o resursa care nu exista genereaza o eroare HTTP 404 ca
raspuns pentru client, Doua directive au obligatia de a
īnfiinta eroare de timp, doar pentru ca timp de acces. Urmatoarea
directiva log level
creste detaliile de logare de la o valoare implicita la informatii. Directiva
error log creeaza fisierele actuale de log:
LogLevel info
ErrorLog /var/www/logs/error_log
5.9. Setarea configurarii limita a server-ului
Daca nu suntem obisnuiti sa configuram serverul īn timpul instalarii, trebuie sa fie cunostem existenta unor limite de server si de modul īn care sunt configurate. Instalarea incorecta si configurarea limitelelor face un server de web o tinta usoara pentru atacuri. Urmatoarele directive de configurare ale serverului arata toate valorile de configurare prestabilite si definesc cāt de mult timp serverul va asteapta pentru client lenta :
# wait up to 300 seconds for slow clients
TimeOut 300
# allow connections to be reused between requests
KeepAlive On
# allow a maximum of 100 requests per connection
MaxKeepAliveRequests 100
# wait up to 15 seconds for the next
# request on an open connection
KeepAliveTimeout 15
Valoarea implicita pentru conexiune de timeout (300 secunde) este prea mare. Putem īn conditii de siguranta sa o reducem sub 60 secunde si sa marim toleranta fata de negarea atacurilor serviciului (DoS).
Urmatoarele directive impune limite privind diferite aspecte legate de o cerere HTTP:
# impose no limits on the request body
LimitRequestBody 0
# allow up to 100 headers in a request
LimitRequestFields 100
# each header may be up to 8190 bytes long
LimitRequestFieldsize 8190
# the first line of the request can be
# up to 8190 bytes long
LimitRequestLine 8190
# limit the XML request body to 1 million bytes(Apache 2.x only)
LimitXMLRequestBody 1000000
LimitXMLRequestBody este o directiva in Apache 2 si este utilizata de catre modulul mod_dav de a limita dimensiunile de comanda a cererilor sale (care sunt bazate pe XML). Dimensiunea maxima de cere este nelimitata, īn mod implicit (2 GB, īn practica), poate vom dori sa specificam o valoare mai sensibila pentru LimitRequestBody. Putem merge la valori mici ca 64 KB, daca nu avem de gānd sa sprijinim imagini īn fisierul de instalare. Urmatoarele directive de control arata instantele serverului cum sunt create si distruse īn Apache 1 si, uneori, īn Apache 2 (dupa cum este descris īn continuare urmatorul text):
# keep 5 servers ready to handle requests
MinSpareServers 5
# do not keep more than 10 servers idle
MaxSpareServers 10
# start with 5 servers
StartServers 5
# allow a max of 150 clients at any given time
MaxClients 150
# allow unlimited requests per server
MaxRequestsPerChild 0
Poate dorim sa micsoram numarul maxim de clienti (MaxClients), daca server-ul nu are suficienta memorie pentru a manipula 150 de cazuri ale serverului la un moment dat. Ar trebui sa facem un obicei din punerea unei limite maxime pe numarul de cereri deservite de un server de exemplu, care este nelimitat īn mod implicit īn Apache 1 (dupa cum este indicat de valoarea 0 MaxRequestsPerChild), dar setat la 10000 īn Apache 2. Atunci cānd un server de exemplu, ajunge la limita, acesta se va īnchide si īnlocuit cu o copie proaspata. O mare valoare, cum ar fi 1000 (sau chiar mai mult) nu va afecta functionarea serverului de web, dar va fi de ajutor, daca un modul Apache are o memorie de scurgere. Interesant, īn cazul īn care caracteristica Keep-Alive (care permite mai multe cereri care urmeaza a fi efectuate pe o singura conexiune de retea) este utilizat, toate cererile de-a lungul unei singure conexiuni Keep-Alive va fi considerata ca fiind una īn scopul manipularii MaxRequestsPerChild.
Apache 2 introduce conceptul de
multiprocesare module (MPMs), care sunt speciale - scop module care
determina cum este organizat de prelucrare a cererii. Doar un singur MPM
poate fi activ la un moment dat. MPMs au fost introduse pentru a permite ca procesarea
sa fie optimizata pentru fiecare sistem de operare separat. Model de prelucrare
Apache 1 este numit prefork, si este modelul implicit de prelucrare in
Apache 2 care ruleaza pe platforme Unix. Pe Windows, Apache īntotdeauna se
executa ca un singur proces, cu mai multe fire de executie, si MPM este
cunoscut ca winnt. Pe sistemele Unix, care ruleaza Apache 2, este posibil
sa se foloseasca de munca MPM, care este un hibrid, asa cum
sustine
multe procese fiecare cu mai multe fire. Pentru MPM worker, configurarea este
similara cu urmatorul text (se refera la documentatia pentru
descriere completa):
# the maximum number of processes
ServerLimit 16
# how many processes to start with
StartServers 2
# how many threads per process to create
ThreadsPerChild 25
# minimum spare threads across all processes
MinSpareThreads 25
# maximum spare threads across all processes
MaxSpareThreads 75
# maximum clients at any given time
MaxClients 150
Deoarece numarul de fire de pe fiecare proces este fix, MPM Apache Worker va modifica numarul de procese active. Spre deosebire de prefork MPM, directiva MaxClients acum controaleaza numarul maxim de fire active la un moment dat.
5.10. Prevenirea pierderilor de informatii
Īn mod implicit, Apache ofera mai multe informatii de biti, pentru oricine este interesat. Orice informatie obtinuta de catre atacatori, ii ajuta sa construiasca o mai buna vizualizare a sistemului si pot strica mai usor sistemul. De exemplu, procesul de instalare pune automat adresa de email a utilizatorului īn fisierul de configurare. Aceasta arata contul pentru public, care sunt nedorite. Urmatoarele directive īnlocuiesc adresa de e-mail generata de Apache cu o adresa generic:
ServerAdmin [email protected]
Īn mod implicit, adresa de e-mail definitea cu aceasta directiva apare pe paginile generate server. Deoarece aceasta este, probabil, ceea ce nu doriti, aveti posibilitatea sa dezactivati aceasta caracteristica complet prin urmatoarele directive: ServerSignature Off
Protocolul HTTP defineste un antet de raspuns domeniului Server, al caror scop este de a identifica ca software-ul raspunde cererii. Īn mod implicit, Apache ocupa acest antet cu numele, numarul de versiune, ca si numele si numerele de versiune din toate modulele dispus sa se identifice ei īnsisi. Putem vedea cum arata aceasta prin trimiterea unei cereri test la server nou instalat:
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, Fri, 25 Apr 2008 22:05:35 GMT
Server: Apache/1.3.29 (Unix)
Content-Location: index.html.en
Vary: negotiate,accept-language,accept-charset
TCN: choice
Last-Modified: Fri, 18 Apr 2008 00:00:38 GMT
ETag: "4002c7-5b0-3af1f126;405a21d7"
Accept-Ranges: bytes
Content-Length: 1456
Connection: close
Content-Type: text/html
Content-Language: en
Expires: Fri, 25 Apr 2008 22:05:35 GMT
Acest cāmp arata specificatiile si valorile informatiilor pentru un atacator. Nu se pot ascunde complet dar putem spune serverului Apache sa dezvaluie doar numele serverului ("Apache").
5.11. Schimbarea numelui īn codul sursa
Putem efectua modificari pentru a schimba identitatea serverului de web īn doua locuri īn codul sursa. Unul este īn fisierul httpd.h īn Apache 1 (ap_release.h in Apache 2) īn cazul īn care versiunea macro-uri sunt definite:
#define SERVER_BASEVENDOR "Apache Group"
#define SERVER_BASEPRODUCT "Apache"
#define SERVER_BASEREVISION "1.3.29"
#define SERVER_BASEVERSION SERVER_BASEPRODUCT "/" SERVER_BASEREVISION
#define SERVER_PRODUCT SERVER_BASEPRODUCT
#define SERVER_REVISION SERVER_BASEREVISION
#define SERVER_VERSION SERVER_PRODUCT "/" SERVER_REVISION
Apache Benchmark recomanda ca numai valoarea macro SERVER_BASEPRODUCT sa fie schimbata, care sa permita altor informatii, cum ar fi numarul de versiune pentru a ramāne īn cod astfel īncāt sa poata fi folosita mai tārziu, de exemplu, pentru server de web.
Motivul pentru care Apache Benchmark recomanda schimbarea unei singure macrocomenzi este ca unele module (cum ar fi mod_ssl) sunt facute pentru a lucra doar cu o anumita versiune a serverului de web Apache. Pentru a asigura functionarea corecta, verificam aceste module Apache numarul de versiune (continute īn SERVER_BASEVERSION macro) si refuzam sa se execute īn cazul īn care numarul de versiune este diferit de cel ce este de asteptat.
O alta abordare pentru a schimba numele īntr-un fisier sursa este de a īnlocui ap_set_version(), care este responsabil pentru constructia numelui serverului īn primul loc. Pentru Apache 1, īnlocuirea functiei existente (īn http_main.c), cu o ca urmatoarele, cu precizarea indiferent de numele serverului pe care doriti:
static void ap_set_version(void)
Pentru Apache 2, īnlocuirea functiei existente (īn core.c):
static void ap_set_version(apr_pool_t *pconf)
|