Mòdul 4
Serveis de xarxa amb GNU/Linux
Exercici 123

 
Personalització del servei
 

Introducció

En aquest apartat descriurem, en forma d'exemples, alguns dels paràmetres que poden composar la configuració mínima de l'Apache de manera que, cada administrador, pugui adaptar-lo a les característiques de l'estructura web desitjada dins el centre.
 

Configuració servidor web Apache

Els paràmetres que governen l'Apache apareixen tots dins un únic fitxer de text anomenat httpd.conf desat normalment al directori /etc/httpd/conf.

Qualsevol modificació de la configuració ha "d'activar-se" reiniciant el servei, executant l'ordre:

 # /etc/rc.d/init.d/httpd restart
 

Exemples de personalització

A continuació detallarem en forma d'exemples les característiques que normalment utilitzarem de les múltiples opcions de l'Apache. Amb aquestes opcions podrem conformar una configuració completament operativa i adaptada a les nostres necessitats:

- Usuari amb què s'executarà l'Apache
- Selecció del port per atendre les peticions HTTP
- Mapejats per servir HTML bàsic
- Mapejats per servir aplicacions tipus CGI
- Control d'accés als continguts del servidor
- Control de l'aplicació de monitorització apache-status
- Correu electrònic de contacte amb l'administrador del sistema
- Nivell i rotació del registre de funcionament (logs)
 

Usuari amb què s'executarà l'Apache

Per evitar problemes de seguretat és molt recomanable que el servidor web Apache i els seus processos associats no s'executin amb drets de l'usuari root.

Normalment podem utilitzar l'usuari nobody o un altre creat expressament per aquesta tasca, indicant-ho dins la configuració amb el paràmetre:

User nobody

a partir d'aquest moment podem arrencar el servei com a root i tots els processos del servidor web adquireixen els drets de l'usuari nobody.

Aquest usuari doncs ha de poder llegir els directoris que vulguem publicar i també ha d'ésser el propietari del directori on vulguem emmagatzemar els logs, sinó,  podem tenir problemes de permisos.

<-

Selecció del port per atendre les peticions HTTP

Per defecte el programa treballa pel port HTTP estàndard, el 80, de manera que no cal indicar-ho en les URL dels navegadors, responent sense problemes a peticions del tipus:

http://www.intracentre

Ara bé, si ja tenim en servei un altre web pel port 80 o volem tenir un espai més reservat, podem canviar el port per on l'Apache atendrà les peticions, amb el paràmetre:

Server Port 8008

Cal comentar que els ports de nombre superior a 1024 pot utilitzar-los qualsevol usuari del sistema, de manera que cada usuari podria tenir el seu servidor personal Apache, si utilitza un nombre elevat, com per exemple el 8008. Els ports de valors inferiors estan reservats només per a serveis a executar per l'usuari root.

<-

Mapejats per servir HTML bàsic

Anem a veure alguns dels serveis bàsics del nostre Apache:

1) 'Arrel' o directori principal del servidor Web

L'estructura principal del servidor web 'penja' de la URL

http://www.intracentre/

i correspon per defecte al directori

/home/httpd/html

qualsevol directori creat aquí es veurà directament com un 'afegit' a la URL principal.

Per exemple, si fem el directori "nadal" dins /home/httpd/html, podrem consultar-hi les pàgines emmagatzemades, des de qualsevol navegador, indicant la URL:

http://www.intracentre/nadal

La pàgina que el servidor web agafa per defecte pot ser index.html o index.htm, el servidor Web les cercarà per aquest ordre, per a qualsevol URL on no s'indica un fitxer .htm concret.

Cal tenir en compte que el servidor Web ha de poder accedir als directoris, o sigui com a mínim han de tenir drets d'execució per a tothom ( r-xr-x--x ) i poder llegir els fitxers que hi hagi, o sigui han de tenir drets de lectura per a tothom (rwxr-xr--). 

2) Publicació de pàgines personals

Si es tracta de publicar pàgines d'usuari, l'aplicació Apache ho fa directament amb les URL del tipus:

http://www.intracentre/~usuari

agafant el contingut de la carpeta public_html de qualsevol dels usuaris donats d'alta en el sistema.

L'usuari root obrirà els drets d'execució per a tothom (quedant amb els drets rwxr-x--x) dels directoris dels usuaris que vulguin publicar les seves pàgines personals, permetent així que el servidor Web hi pugui accedir.

3) Noves URL contra directoris específics del disc

Si volem realitzar 'mapejats' concrets sobre altres espais del disc, que estiguin fora de l'abast de l'estructura principal (arrel del servidor, /home/httpd/html), utilitzarem la directiva Alias, indicant el nom que voldrem que composi la URL i el directori físic a què correspon.

Per exemple, per crear la URL:

http://www.intracentre/fisica

contra el directori físic /home/xal/fisica/web

afegirem a la configuració de l'Apache:

Alias /fisica "/home/xal/fisica/web/"

Atenció, la definicio de l'àlias no pot acabar amb '/', per exemple l'entrada

Alias /mates/  "/home/xal/mates/"

seria incorrecte.

Si no hi ha els drets correctament aplicats sobre tots els directoris que formen la 'cadena', pot aparèixer un missatge d'accés denegat al navegador de l'usuari i dades més concretes dins els registre d'errors del servidor /var/log/httpd/error.log tal com podem veure a la figura:

La primera línia pot estar indicant que hi ha algun dels directoris de la cadena /home/xal/fisica/web que no té els drets correctes perquè l'usuari nobody (o sigui el servidor Web) hi pugui accedir.

La segona només apareixerà quan l'espai web tingui com a pàgina principal index.htm, doncs cerca sempre la primera pàgina per defecte index.html, que en aquest cas no existeix. 

En la tercera es veu clarament que hi ha problemes de drets sobre el fitxer final i que el servidor (o sigui l'usuari nodody) no pot accedir al fitxer index.htm.

<-

Mapejats per servir aplicacions tipus CGI

La configuració inicial inclou un directori per executar 'via web' aplicacions del tipus CGI.

Aquestes normalment són 'scripts' fets amb el lleguatge shell del Linux o amb Perl, molt utilitzat a Internet.

Aquest directori per defecte, on hi podrem desar els fitxers que vulguem que el servidor executi via Web, és:

/home/httpd/cgi-bin

i la URL des d'on els executarem:

http://www.intracentre/cgi-bin/nom_de_lexecutable

Per exemple, si desem el següent script, amb drets d'execució per a tothom:

primer.cgi

dins el directori dels cgi, l'execució des dels navegadors de la següent URL:

http://www.intracentre/cgi-bin/primer.cgi

ens mostraria:

Encara que en l'exemple hem executat el cgi directament des del navegador, és molt més freqüent fer-ho des d'una pàgina web, en forma de 'links' o bé passant-los paràmetres.

Amb l'script de l'exemple, comprovem que l'execució d'aplicacions tipus CGI funciona correctament, a partir d'aquí, un bon llibre i algunes cerques encertades a Internet sobre el tema ens permetran augmentar les prestacions del nostre servei web dins el centre, dotant-lo de pàgines interactives, formularis de recollida de dades, comptadors de visites, etc.

<-

Control d'accés als continguts del servidor

Podem crear zones d'accés restringit sobre qualsevol Alies de la nostra estructura Web (o qualsevol URL vist des del punt de vista del navegador), de manera que es permeti l'entrada si es coneix un usuari/contrasenya o directament si es té una adreça IP d'un rang concret.

Hi ha diferents maneres de fer-ho, veurem les més utilitzades, mitjançant els fitxers de control ocults .htaccess i els paràmetres de control d'accés dins el fitxer httpd.conf.

Seguint els punts següents entendrem mitjançant uns exemple d'ús com ho podríem implementar:

1) Preparem el servidor Web per a treballar amb zones restringides

El primer que cal fer és indicar al servidor Web que pot trobar-se amb zones a les quals caldrà aplicar restriccions si hi ha un fitxer .htaccess. Això ho farem modificant la configuració general per defecte que indica originalment:

<Directory />
     Options FollowSymLinks
     AllowOverride None
</Directory>

Canviant-ho per:

<Directory />
     Options FollowSymLinks
     AllowOverride AuthConfig
</Directory>

Reiniciem el servei Web i ja tenim el sistema de control d'accés preparat per actuar.

2) Control d'accés senzill amb usuari/contrasenya

Ens proposem activar el control d'accés a l'espai web del seminari de física amb un usuari/contrasenya que només coneixeran els seus membres.

En el punt anterior s'ha creat la URL:

http://www.intracentre/fisica

que correspon al directori físic:

/home/xal/fisica/web

Generem un fitxer ocult, específic per al servidor Web, amb les dades d'aquest usuari de nom 'fisica' executant:

# htpassswd -c /etc/httpd/.fisica-passwd fisica

introduint a continuació la contrasenya de l'usuari 'fisica', per exemple curs2000

Aquesta operació es pot repetir, sense el paràmetre '-c', i afegir al fitxer tants usuaris com faci falta.

A continuació només cal crear un fitxer de nom .htaccess amb els paràmetres adients i desar-lo dins el directori físic que correspon a la URL. En aquest cas era /home/xal/fisica/web.

L'estructura del fitxer .htaccess seria:

AuthType Basic 
AuthUserFile /etc/httpd/.fisica-passwd
AuthName "Espai seminari de Fisica" 
require valid-user 

Indicant el tipus d'autentificació que utilitzaran els navegadors (Basic), la localització del fitxer que conté les dades de l'usuari o usuaris (.fisica-passwd), el nom de la 'zona' a què pertany aquesta autentificació (Espai seminari de Fisica) i quin tipus d'actuació cal fer per guanyar l'accés, en aquest cas hem d'entrar les dades d'un usuari vàlid (valid-user).

Quan es fa l'accés des dels navegadors, apareix una finestra demanant l'usuari i la contrasenya. Només hi deixarà accedir amb l'usuari fisica i com a contrasenya curs2000.

Per canviar aquesta contrasenya només cal executar la comanda htpasswd altre cop, tal com ho vam fer per donar d'alta l'usuari.

3) Control senzill per adreça IP

Per evitar tenir que recordar una contrasenya, els membres del seminari de Física els sembla més còmode que l'accés a les pàgines reservades, només pugui fer-se des d'un nombre d'equips concrets.

Aquests són: 192.168.0.100, 192.168.0.101 i 192.168.0.24

En aquest cas, restringirem l'accés utilitzant les directives de control dins el fitxer httpd.conf.

Sota l'Alias que defineix la URL del seminari, afegim:

Alias /fisica "/home/xal/fisica/web/"

<Directory "/home/xal/fisica/web">
    Allow from 192.168.0.100 192.168.0.101 192.168.0.24
    Deny from all
</Directory>

Un cop reiniciat el servidor Web només podran accedir a les pàgines del seminari les màquines amb les IP vàlides.

4) Control combinat, usuari / IP

Sembla que els membres del seminari de Física han tornat a canviar d'estratègia... esperem que sigui la definitiva.

Volen deixar obert l'espai web del seminari per a tot el centre, però també volen poder-lo consultar des de l'exterior. Com que hi ha dades dels alumnes que no poden 'publicar-se' en obert per a tot el món, si la consulta es fa des d'Internet, que demani autorització amb usuari i contrasenya.

Som-hi doncs, anem a intentar-ho.

Si apliquem el que hem vist fins ara en quant a validació a nivell d'usuari i contrasenya, deixarem tancat l'espai del seminari tant per a la xarxa del centre, com per a la resta d'Internet...

Combinant les dues estratègies, podem aconseguir el que ens demanen (potser la propera vegada els haurem de dir que no es pot fer...)

Utilitzem els paràmetres que tenim en el fitxer httpd.conf respecte al control d'accés via IP. Els modifiquem perquè només accepti les adreces de la nostra xarxa i afegim la validació d'usuari per a la resta.

Com queda això?

<Directory "/home/xal/fisica/web">
    Allow from 192.168.0
    Deny from all
    AuthType Basic
    AuthUserFile /etc/httpd/.fisica-passwd
    AuthName "Intranet Fisica"
    Require valid-user
    Satisfy any
</Directory>

La trampa està en el paràmetre Satisfy any que permet que qualsevol de les dues regles pugui validar l'entrada, sigui quina sigui.

Reiniciem el servidor Web i podem comprovar que dins la xarxa amb adreces 192.168.0.x es pot accedir sense restriccions i des de l'exterior (o des d'una segona xarxa del tipus 192.168.2.x) ens demana l'usuari i la contrasenya.

Un apunt, les restriccions configurades directament dins el fitxer de configuració passen per davant de les que hi hagi en el fitxer .htaccess. Si hi són les dues, primer verifica que es compleixen les del fitxer de configuració i llavors verificarà les que detalla el fitxer .htaccess.

Com heu pogut veure, les regles de control d'accés donen força joc, i ens han de permetre poder configurar el nostre espai Web de la manera més útil i segura possible.

<-

Control de l'aplicació de monitorització apache-status

Per poder saber realment quina càrrega està suportant el servidor web Apache, hi ha una directiva interna que ens genera una pàgina d'estat.

Per activar aquesta mesura de l'estat del nostre servidor caldrà descomentar les entrades del fitxer httpd.conf que corresponen a:

<Location /stat-web>
    SetHandler server-status

    allow from 192.168.0 .xtec.es
    deny from all
</Location>

modificant l'entrada corresponent al control d'accés, si volem evitar que 'molestin' al nostre servidor Web des de l'exterior i personalitzant la URL amb un nom diferent al que té per defecte.

La consulta de les estadístiques es farà a la URL:

http://www.intracentre/stat-web

En l'apartat següent veurem quin tipus d'informació podem treure d'aquesta pàgina.

<-

Correu electrònic de contacte amb l'administrador del sistema

Especificarem l'adreça de contacte per si els usuaris observen problemes amb el servidor.

Indicarem l'adreça en el paràmetre:

ServerAdmin  webmaster@linux.intracentre

Aquesta adreça apareix de forma automàtica dins els missatges d'error que el servidor mostra als usuaris via Web.

<-

Nivell i rotació del registre de funcionament (logs)

L'apache manté un registre del seu funcionament i del servei web de forma separada dins dos fitxers de 'log' localitzats al directori:

1) /var/log/httpd/access_log

Dins aquest fitxer s'hi anoten totes les peticions dels clients al servidor Web. Aquest fitxer es pot processar i generar estadístiques dels accessos a les pàgines.

Una mostra del contingut pot ser:

Segons el nivell de peticions que rebi el servidor Web, aquest fitxer pot crèixer força. Cal fer-ne una 'rotació' de forma setmanal o periòdica per evitar problemes de saturació de disc.

Per defecte el sistema fa una rotació diària, a les quatre i dos minuts de la matinada i manté quatre còpies dels fitxers de log.

Si no tenim prou espai de disc per mantenir tants logs podem reduir les còpies a dues, per exemple, modificant el fitxer apache que hi ha dins el directori /etc/logrotate.d/, on hi ha les entrades referents a l'access.log i error.log afegint el paràmetre rotate 2.

2) /var/log/httpd/error_log

Aquest fitxer reflexa els errors del servei, per defecte amb el nivell marcat pel paràmetre:

LogLevel  warn

Poden 'emmagatzemar-se' altres tipus, afegint a més de la categoria d'avisos (warn), altres com per exemple debug, info, crit, emerg.

Veiem algunes línies d'aquest registre:

 <-