This shows you the differences between two versions of the page.
gsr:laboratoare:laborator-07 [2016/12/08 11:27] alexandru.carp |
gsr:laboratoare:laborator-07 [2016/12/08 20:39] (current) alexandru.carp |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Laborator 07: Servicii web ====== | ====== Laborator 07: Servicii web ====== | ||
- | Documentatie: http://httpd.apache.org/docs/2.2/ | + | <note>Documentatie: http://httpd.apache.org/docs/2.2/</note> |
- | ==== Instalare Apache si configurari de baza ==== | + | ===== Instalare Apache si configurari de baza ===== |
* Instalati serverul Apache (pachetul **apache2**). | * Instalati serverul Apache (pachetul **apache2**). | ||
Line 9: | Line 9: | ||
* Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta pe URL-ul http://localhost | * Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta pe URL-ul http://localhost | ||
- | === Site default === | + | ==== Site default ==== |
* Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML. | * Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML. | ||
Line 19: | Line 19: | ||
* Modificati fisierul gasit anterior astfel incat sa contina mesajul "GSR web services". | * Modificati fisierul gasit anterior astfel incat sa contina mesajul "GSR web services". | ||
- | === Listening ports === | + | ==== Listening ports ==== |
* Pe ce port asculta in mod implicit serverul Apache? Investigati folosind ''netstat''. | * Pe ce port asculta in mod implicit serverul Apache? Investigati folosind ''netstat''. | ||
Line 25: | Line 25: | ||
* Modificati portul astfel incat Apache sa asculte pe 8080. | * Modificati portul astfel incat Apache sa asculte pe 8080. | ||
* Hint: ''/etc/apache2/ports.conf'' | * Hint: ''/etc/apache2/ports.conf'' | ||
- | * Hint: Nu uitati sa modificati si ''NameVirtualHost'' | + | * Hint: Nu uitati sa modificati si in ''VirtualHost'' |
* Verificati folosind ''netstat'', apoi un browser. | * Verificati folosind ''netstat'', apoi un browser. | ||
Line 32: | Line 32: | ||
- | ==== Alti clienti HTTP ==== | + | ===== Alti clienti HTTP ===== |
Desi in majoritatea cazurilor folosim un browser in mod grafic pentru a naviga, putem folosi si clienti in mod text (interactiv sau non-interactiv). Acestia sunt utili mai ales in automatizare. | Desi in majoritatea cazurilor folosim un browser in mod grafic pentru a naviga, putem folosi si clienti in mod text (interactiv sau non-interactiv). Acestia sunt utili mai ales in automatizare. | ||
- | === wget === | + | ==== wget ==== |
Un astfel de client in mod text, non-interactiv, este **wget**. | Un astfel de client in mod text, non-interactiv, este **wget**. | ||
Line 42: | Line 42: | ||
* Folositi ''wget'' pentru a descarca fisierul ''index.html'' servit de Apache. Ca parametru pentru ''wget'' veti folosi acelasi URL ca si in browser. | * Folositi ''wget'' pentru a descarca fisierul ''index.html'' servit de Apache. Ca parametru pentru ''wget'' veti folosi acelasi URL ca si in browser. | ||
- | == Descarcare recursiva == | + | === Descarcare recursiva === |
* Creati urmatoarea ierarhie de fisiere in ''/var/www/html'': | * Creati urmatoarea ierarhie de fisiere in ''/var/www/html'': | ||
Line 62: | Line 62: | ||
* Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''index.html''. Hint: ''man wget'', ''/reject''. | * Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''index.html''. Hint: ''man wget'', ''/reject''. | ||
- | == Autentificare folosind wget == | + | === Autentificare folosind wget === |
* Folosind ''wget'' incercati sa descarcati ce este la adresa ''http://repository.grid.pub.ro/cs/gsr/''. | * Folosind ''wget'' incercati sa descarcati ce este la adresa ''http://repository.grid.pub.ro/cs/gsr/''. | ||
Line 71: | Line 71: | ||
* Sa faceti ca ''wget'' sa va ceara parola. Hint: ''man wget'', ''/ask-password''. | * Sa faceti ca ''wget'' sa va ceara parola. Hint: ''man wget'', ''/ask-password''. | ||
- | === netcat (nc) === | + | ==== netcat (nc) ==== |
De multe ori, in debugging, este util sa observati sau sa interveniti direct asupra datelor schimbate intre client si server. Un utilitar care ne ajuta in acest scop este **netcat** (comanda ''nc''). | De multe ori, in debugging, este util sa observati sau sa interveniti direct asupra datelor schimbate intre client si server. Un utilitar care ne ajuta in acest scop este **netcat** (comanda ''nc''). | ||
Line 87: | Line 87: | ||
* Hint: ''echo'', pipe | * Hint: ''echo'', pipe | ||
- | ==== Userdir ==== | + | ===== Userdir ===== |
Server-ul Apache permite utilizatorilor sa serveasca fisiere din propriile directoare home. Fisierele trebuie stocate in ''/home/username/public_html'', iar acestea vor fi accesate folosind un URL de forma ''http://server/~username''. | Server-ul Apache permite utilizatorilor sa serveasca fisiere din propriile directoare home. Fisierele trebuie stocate in ''/home/username/public_html'', iar acestea vor fi accesate folosind un URL de forma ''http://server/~username''. | ||
Line 100: | Line 100: | ||
* Incercati din nou sa accesati URL-ul. | * Incercati din nou sa accesati URL-ul. | ||
- | ==== PHP === | + | ===== PHP ==== |
* Creati in ''/var/www/html'' un fisier cu numele ''index.php'' care sa contina un cod PHP simplu (de exemplu, sa afiseze un mesaj): | * Creati in ''/var/www/html'' un fisier cu numele ''index.php'' care sa contina un cod PHP simplu (de exemplu, sa afiseze un mesaj): | ||
Line 109: | Line 109: | ||
* Apoi, dintr-un browser in mod grafic incercati sa accesati fisierul ''index.php'' de pe server. Ce observati? Script-ul PHP se ruleaza pe server? De ce? | * Apoi, dintr-un browser in mod grafic incercati sa accesati fisierul ''index.php'' de pe server. Ce observati? Script-ul PHP se ruleaza pe server? De ce? | ||
- | * Instalati pachetul corespunzator modulului PHP pentru Apache (''libapache2-mod-php5''). | + | * Instalati pachetul corespunzator modulului PHP pentru Apache (''libapache2-mod-php''). |
* Verificati ca modulul a fost activat. Hint: ''/etc/apache2/mods-enabled''. | * Verificati ca modulul a fost activat. Hint: ''/etc/apache2/mods-enabled''. | ||
* Accesati din nou fisierul ''index.php''. Ce observati acum? | * Accesati din nou fisierul ''index.php''. Ce observati acum? | ||
- | ==== Autentificare basic ==== | + | ===== Autentificare basic ===== |
In anumite cazuri, este util sa restrictionam accesul catre anumite directoare ale site-ului. O modalitate este folosind feature-ul de autentificare din protocolul HTTP. | In anumite cazuri, este util sa restrictionam accesul catre anumite directoare ale site-ului. O modalitate este folosind feature-ul de autentificare din protocolul HTTP. | ||
Line 129: | Line 129: | ||
* Restartati serviciul Apache si verificati ca incercand sa accesati, din browser, directorul ''secret'', se cere autentificare. | * Restartati serviciul Apache si verificati ca incercand sa accesati, din browser, directorul ''secret'', se cere autentificare. | ||
- | ==== Virtual Hosts ==== | + | ===== Virtual Hosts ===== |
- | === Configurare de baza === | + | ==== Configurare de baza ==== |
- | + | ||
- | * Instalati serverul Apache. | + | |
* In ''/etc/hosts'', adaugati 2 alias-uri, astfel incat host-urile ''gsr.ro'' si ''www.gsr.ro'' sa fie mapate pe adresa IP ''127.0.0.1'' | * In ''/etc/hosts'', adaugati 2 alias-uri, astfel incat host-urile ''gsr.ro'' si ''www.gsr.ro'' sa fie mapate pe adresa IP ''127.0.0.1'' | ||
Line 154: | Line 152: | ||
* Fisierele de log pentru acest site vor fi in ''/var/log/apache2/gsr.ro.log'' si ''/var/log/apache2/gsr.ro.err.log'' | * Fisierele de log pentru acest site vor fi in ''/var/log/apache2/gsr.ro.log'' si ''/var/log/apache2/gsr.ro.err.log'' | ||
- | <solution -hidden -en><code> | + | <code> |
root@mjolnir:~# mkdir /var/www/html/gsr.ro | root@mjolnir:~# mkdir /var/www/html/gsr.ro | ||
Line 184: | Line 182: | ||
CustomLog /var/log/apache2/gsr.log combined | CustomLog /var/log/apache2/gsr.log combined | ||
</VirtualHost> | </VirtualHost> | ||
- | </code></solution> | + | </code> |
* Activati site-ul ''gsr.ro'' | * Activati site-ul ''gsr.ro'' | ||
Line 202: | Line 200: | ||
* Testati accesand adresa ''http://gsr.ro'' intr-un browser. | * Testati accesand adresa ''http://gsr.ro'' intr-un browser. | ||
- | === Alias-uri === | + | ==== Alias-uri ==== |
*Vom configura 2 tipuri de alias-uri: | *Vom configura 2 tipuri de alias-uri: | ||
* Alias-uri pentru partea de domeniu din URL. | * Alias-uri pentru partea de domeniu din URL. | ||
* Alias-uri pentru partea de cale (path) din URL. | * Alias-uri pentru partea de cale (path) din URL. | ||
+ | |||
+ | === Alias pentru domeniu === | ||
* Pentru primul tip de alias-uri, configurati Virtual Host-ul ''gsr.ro'' astfel incat sa raspunda si la cereri pentru ''www.gsr.ro'' | * Pentru primul tip de alias-uri, configurati Virtual Host-ul ''gsr.ro'' astfel incat sa raspunda si la cereri pentru ''www.gsr.ro'' | ||
* Hint: ''ServerAlias'' | * Hint: ''ServerAlias'' | ||
* Testati accesand adresa ''http://www.gsr.ro'' intr-un browser. | * Testati accesand adresa ''http://www.gsr.ro'' intr-un browser. | ||
+ | | ||
+ | === Alias pentru URL path === | ||
| | ||
* Pentru al doilea tip de alias-uri, configurati Virtual Host-ul ''gsr.ro'' astfel incat la accesarea adresei ''http://gsr.ro/config'' sa fie afisat continutul directorului ''/var/www/html/gsr.ro/configfiles''. | * Pentru al doilea tip de alias-uri, configurati Virtual Host-ul ''gsr.ro'' astfel incat la accesarea adresei ''http://gsr.ro/config'' sa fie afisat continutul directorului ''/var/www/html/gsr.ro/configfiles''. | ||
Line 217: | Line 219: | ||
* Testati accesand adresa ''http://gsr.ro/config'' intr-un browser. | * Testati accesand adresa ''http://gsr.ro/config'' intr-un browser. | ||
- | <solution -hidden -en><code> | + | <code> |
root@mjolnir:~# mkdir /var/www/html/gsr.ro/configfiles | root@mjolnir:~# mkdir /var/www/html/gsr.ro/configfiles | ||
Line 246: | Line 248: | ||
... waiting [Fri Jan 27 18:32:58 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ... waiting [Fri Jan 27 18:32:58 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ||
. | . | ||
- | </code></solution> | + | </code> |
- | === Redirect === | + | ==== Redirect ==== |
* Configurati site-ul ''gsr.ro'' astfel incat la accesarea adresei ''http://gsr.ro/redirect'' sa fiti redirectati catre ''http://ocw.cs.pub.ro/courses/gsr''. | * Configurati site-ul ''gsr.ro'' astfel incat la accesarea adresei ''http://gsr.ro/redirect'' sa fiti redirectati catre ''http://ocw.cs.pub.ro/courses/gsr''. | ||
Line 256: | Line 258: | ||
* Testati accesand adresa ''http://gsr.ro/redirect'' intr-un browser. | * Testati accesand adresa ''http://gsr.ro/redirect'' intr-un browser. | ||
- | <solution -hidden -en><code> | + | <code> |
root@mjolnir:~# mkdir /var/www/html/gsr.ro/redirect | root@mjolnir:~# mkdir /var/www/html/gsr.ro/redirect | ||
root@mjolnir:~# echo "redirect" > /var/www/html/gsr.ro/redirect/index.html | root@mjolnir:~# echo "redirect" > /var/www/html/gsr.ro/redirect/index.html | ||
Line 269: | Line 271: | ||
... waiting [Fri Jan 27 18:41:55 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ... waiting [Fri Jan 27 18:41:55 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ||
. | . | ||
- | </code></solution> | + | </code> |
- | === Restrictionarea accesului pe baza adresei IP === | + | ==== Restrictionarea accesului pe baza adresei IP ==== |
* Configurati Virtual Host-ul ''gsr.ro'' pentru a se permite accesul la acesta **doar** de la adresa ''127.0.0.1''. | * Configurati Virtual Host-ul ''gsr.ro'' pentru a se permite accesul la acesta **doar** de la adresa ''127.0.0.1''. | ||
Line 282: | Line 284: | ||
* Pe sistemul colegului, adaugati o intrare in ''/etc/hosts'' pentru ''restricted.gsr.ro'', care sa se mapeze cu adresa IP a sistemului vostru. | * Pe sistemul colegului, adaugati o intrare in ''/etc/hosts'' pentru ''restricted.gsr.ro'', care sa se mapeze cu adresa IP a sistemului vostru. | ||
- | <solution -hidden -en><code> | + | <code> |
root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro.conf | root@mjolnir:~# cat /etc/apache2/sites-available/gsr.ro.conf | ||
<VirtualHost *:80> | <VirtualHost *:80> | ||
Line 308: | Line 309: | ||
... waiting [Fri Jan 27 19:27:56 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ... waiting [Fri Jan 27 19:27:56 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ||
. | . | ||
- | </code></solution> | ||
- | ==== SSL / TLS ==== | ||
- | |||
- | * Activati modulul SSL pentru Apache. | ||
- | * Hint: ''a2enmod'' | ||
- | |||
- | * Pe ce port asculta serverul Apache pentru conexiuni SSL? Inspectati folosind ''netstat''. | ||
- | <solution -hidden -en><code> | ||
- | root@mjolnir:~# netstat -lntp | grep apache | ||
- | tcp 0 0 172.16.7.133:8080 0.0.0.0:* LISTEN 7747/apache2 | ||
- | tcp6 0 0 :::80 :::* LISTEN 7747/apache2 | ||
- | tcp6 0 0 :::443 :::* LISTEN 7747/apache2 | ||
- | </code></solution> | ||
- | |||
- | * Activati site-ul default Apache care are suport pentru SSL. | ||
- | * Hint: ''ls /etc/apache2/sites-available'', ''a2ensite'' | ||
- | * Testati accesand adresa ''https://localhost'' intr-un browser. | ||
- | |||
- | <solution -hidden -en><code> | ||
- | root@mjolnir:~# ls /etc/apache2/sites-available/ | ||
- | default default-ssl gsr.ro sric.ro | ||
- | |||
- | root@mjolnir:~# a2ensite default-ssl | ||
- | Enabling site default-ssl. | ||
- | To activate the new configuration, you need to run: | ||
- | service apache2 reload | ||
- | </code></solution> | ||
- | |||
- | * In continuare, vom general un certificat self-signed pentru domeniul ''gsr.ro''. Vom folosi o cheie pe 2048 de biti. | ||
- | * Creati directorul ''/etc/apache2/ssl-certs/''. | ||
- | * Generati perechea de chei RSA: | ||
- | <code> | ||
- | openssl genrsa -out gsr.ro.key 2048 | ||
</code> | </code> | ||
- | * Generati un certificate signing request (CSR), pe baza cheii: | ||
- | <code> | ||
- | openssl req -new -key gsr.ro.key -out gsr.ro.csr | ||
- | </code> | ||
- | * Creati un certificat self-signed pe baza CSR-ului generat anterior: | ||
- | <code> | ||
- | openssl x509 -req -days 365 -in gsr.ro.csr -signkey gsr.ro.key -out gsr.ro.crt | ||
- | </code> | ||
- | * Copiati fisierele generate in ''/etc/apache2/ssl-certs/'' | ||
- | |||
- | * Creati un nou Virtual Host pentru domeniul ''gsr.ro'', dar care sa serveasca peste HTTPS. | ||
- | * Fisierul de configurare va fi ''/etc/apache2/sites-available/gsr.ro-ssl.conf'' | ||
- | * Site-ul va folosi certificatele generate anterior. | ||
- | * Ca model, puteti folosi fisierul de configurare pentru site-ul default SSL. | ||
- | |||
- | * Activati site-ul ''gsr.ro-ssl''. | ||
- | * Testati accesand adresa ''https://gsr.ro'' intr-un browser. | ||
- | * In browser, inspectati certificatul primit de la server. | ||
- | |||
- | <solution -hidden -en><code> | ||
- | root@mjolnir:/etc/apache2/sites-available# cat gsr.ro-ssl.conf | grep -v '^.*#' | grep -v '^$' | ||
- | <IfModule mod_ssl.c> | ||
- | <VirtualHost _default_:443> | ||
- | ServerAdmin webmaster@localhost | ||
- | ServerName gsr.ro | ||
- | ServerAlias www.gsr.ro | ||
- | DocumentRoot /var/www/html/gsr.ro | ||
- | <Directory /> | ||
- | Options FollowSymLinks | ||
- | AllowOverride None | ||
- | </Directory> | ||
- | <Directory /var/www/html/gsr.ro/> | ||
- | Options Indexes FollowSymLinks MultiViews | ||
- | AllowOverride None | ||
- | Order allow,deny | ||
- | allow from all | ||
- | </Directory> | ||
- | ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | ||
- | <Directory "/usr/lib/cgi-bin"> | ||
- | AllowOverride None | ||
- | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
- | Order allow,deny | ||
- | Allow from all | ||
- | </Directory> | ||
- | ErrorLog ${APACHE_LOG_DIR}/error.log | ||
- | LogLevel warn | ||
- | CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined | ||
- | Alias /doc/ "/usr/share/doc/" | ||
- | <Directory "/usr/share/doc/"> | ||
- | Options Indexes MultiViews FollowSymLinks | ||
- | AllowOverride None | ||
- | Order deny,allow | ||
- | Deny from all | ||
- | Allow from 127.0.0.0/255.0.0.0 ::1/128 | ||
- | </Directory> | ||
- | SSLEngine on | ||
- | SSLCertificateFile /etc/apache2/ssl-certs/gsr.ro.crt | ||
- | SSLCertificateKeyFile /etc/apache2/ssl-certs/gsr.ro.key | ||
- | <FilesMatch "\.(cgi|shtml|phtml|php)$"> | ||
- | SSLOptions +StdEnvVars | ||
- | </FilesMatch> | ||
- | <Directory /usr/lib/cgi-bin> | ||
- | SSLOptions +StdEnvVars | ||
- | </Directory> | ||
- | BrowserMatch "MSIE [2-6]" \ | ||
- | nokeepalive ssl-unclean-shutdown \ | ||
- | downgrade-1.0 force-response-1.0 | ||
- | BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown | ||
- | </VirtualHost> | ||
- | </IfModule> | ||
- | |||
- | |||
- | root@mjolnir:/etc/apache2/sites-available# a2ensite gsr.ro-ssl | ||
- | Enabling site gsr.ro-ssl. | ||
- | To activate the new configuration, you need to run: | ||
- | service apache2 reload | ||
- | |||
- | root@mjolnir:/etc/apache2/sites-available# /etc/init.d/apache2 restart | ||
- | Restarting web server: apache2[Fri Jan 27 21:13:02 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ||
- | [Fri Jan 27 21:13:02 2012] [warn] NameVirtualHost *:443 has no VirtualHosts | ||
- | [Fri Jan 27 21:13:02 2012] [warn] NameVirtualHost *:80 has no VirtualHosts | ||
- | ... waiting [Fri Jan 27 21:13:03 2012] [warn] NameVirtualHost 172.16.7.133:8080 has no VirtualHosts | ||
- | [Fri Jan 27 21:13:03 2012] [warn] NameVirtualHost *:443 has no VirtualHosts | ||
- | [Fri Jan 27 21:13:03 2012] [warn] NameVirtualHost *:80 has no VirtualHosts | ||
- | . | ||
- | </code></solution> | ||
- | ==== mod_rewrite ==== | + | ===== mod_rewrite ===== |
Modulul ''rewrite'' din Apache permite rescrierea URL-urilor din request-urile HTTP, dupa anumite reguli. | Modulul ''rewrite'' din Apache permite rescrierea URL-urilor din request-urile HTTP, dupa anumite reguli. |