You are on page 1of 67

Manual de Supervivencia del Administrador de Apache

En gnu/Linux, por supuesto

10 de noviembre de 2006 Autor: Miguel Jaque Barbero

Manual de Supervivencia del Administrador de Apache

ndice de Contenidos
Captulo 1. Introduccin.......................................................................................................................7 1.1. ontenido....................................................................................................................................! 1.2. Li"en"ia.......................................................................................................................................! 1.#. $esponsabilidad...........................................................................................................................! 1.%. &"er"a del &utor..........................................................................................................................' Captulo 2. Introduccin.......................................................................................................................9 2.1. (ienes )uerte de *tili+ar &pa",e................................................................................................2.2. .nstala"i/n....................................................................................................................................2.#. on0igura"i/n..............................................................................................................................2.%. &rranque 1 2arada.......................................................................................................................2.3. 2ro"esos.......................................................................................................................................Captulo . Servidor !"sico................................................................................................................11 #.1. )ervidor )en"illo.......................................................................................................................11 #.2. )ervidor on0igurado por 4ire"torios.......................................................................................1# Captulo #. $osts %irtuales.................................................................................................................17 %.1. 5p"iones de &rquite"tura..........................................................................................................1! %.2. 6osts 7irtuales por .2................................................................................................................1' %.#. 6osts 7irtuales por 2uerto.........................................................................................................1%.%. 6osts 7irtuales por 8ombre......................................................................................................20 %.3. 6osts 7irtuales por 8ombre, .2 1 2uerto..................................................................................21 %.6. 6osts 7irtuales 4in9mi"os........................................................................................................22 %.!. 4ire"tivas para la on0igura"i/n de 6osts 7irtuales................................................................2# Captulo &. Autenticacin...................................................................................................................2& 3.1. : /mo 0un"iona;.......................................................................................................................23 3.2. &utenti"a"i/n B9si"a.................................................................................................................26 3.#. &utenti"a"i/n B9si"a "on 2ermisos Espe"iales <&llo=>...........................................................2' 3.%. &utenti"a"i/n "on 4igest...........................................................................................................23.3. &utenti"a"i/n 2ersonali+ada......................................................................................................#0 3.6. 4ire"tivas para la &utenti"a"i/n................................................................................................#1 3.!. 5tras 5p"iones de &utenti"a"i/n..............................................................................................#2 Captulo '. (e)ociacin de Contenidos............................................................................................. 6.1. 8ego"ia"i/n de ontenidos por Multi7ie=s.............................................................................## 6.2. 8ego"ia"i/n de ontenidos "on (1pe Maps.............................................................................#% 6.#. 4ire"tivas para la 8ego"ia"i/n de ontenidos..........................................................................#3 Captulo 7. ndices............................................................................................................................... 7 !.1. 4ire"tivas para la on0igura"i/n de ?ndi"es..............................................................................#! Captulo *. +edirecciones................................................................................................................... 9 '.1. $edire""iones "on &lias............................................................................................................#'.2. $edire""iones "on $edire"t.......................................................................................................#'.#. $e=rite......................................................................................................................................#'.%. 4ire"tivas para la on0igura"i/n de $edire""iones...................................................................%1 Captulo 9. Contenidos ,in"micos con C-I.....................................................................................#

Miguel Jaque Barbero (mjaque@ilkebenson.com

-.1. :@uA es B.;.............................................................................................................................%# -.2. ECemplo de B..........................................................................................................................%# -.#. on0igura"i/n de B.s para *suarios.......................................................................................%3 -.%. 4ire"tivas para la on0igura"i/n de B...................................................................................%6 Captulo 1.. Server Side Includes......................................................................................................#7 10.1. ECemplo de )).........................................................................................................................%' 10.2. ECemplo &van+ado de ))........................................................................................................%Captulo 11. /o))in)...........................................................................................................................&1 11.1. Di",eros de Log.......................................................................................................................31 11.2. 4ire"tivas para la on0igura"i/n de Logs...............................................................................32 Captulo 12. 0$0.................................................................................................................................& 12.1. .nstala"i/n 1 on0igura"i/n.....................................................................................................3# 12.2. omprobando que Dun"iona....................................................................................................3% 12.#. 2ra"ti"ando "on 262...............................................................................................................3% 12.%. ManeCo de Dormularios............................................................................................................33 12.3. Evitando el aos......................................................................................................................36 Captulo 1 . Aplicaciones 1e2 con /AM0.......................................................................................&7 1#.1. .nstala"i/n 1 on0igura"i/n de M1)@L..................................................................................3! 1#.2. one"tando "on la Base de 4atos............................................................................................3' 1#.#. ECe"utando )enten"ias )@L.....................................................................................................3' 1#.%. .nsertando 4atos......................................................................................................................31#.3. onsultas de )ELE (.............................................................................................................60 Captulo 1#. Secure Soc3ets /a4er 5SS/6..........................................................................................'1 1%.1. omo Dun"iona ))L................................................................................................................61 1%.2. .nstala"i/n................................................................................................................................61 1%.#. on0igura"i/n..........................................................................................................................62 1%.%. ECemplo....................................................................................................................................62 Captulo 1&. Conse7os para Me7orar la Se)uridad...........................................................................' 13.1. Mantente al 4Ea.......................................................................................................................6# 13.2. 2rotege los Di",eros de on0igura"i/n....................................................................................6# 13.#. 7igila los Logs.........................................................................................................................6# 13.%. Evita los B............................................................................................................................6# 13.3. Evita ))...................................................................................................................................6% 13.6. Evita los ontenidos 4in9mi"os en Beneral...........................................................................6% 13.!. 7igila los Enla"es )imb/li"os.................................................................................................6% 13.'. 6a+ opias de )eguridad.........................................................................................................6% Captulo 1'. 8ptimi9acin de +endimiento......................................................................................'& 16.1. M9s $&M................................................................................................................................63 16.2. *sa Linux 2.% o )uperior.........................................................................................................63 16.#. Evita la $esolu"i/n de 48)s .nversos....................................................................................63 16.%. Evita los Enla"es )imb/li"os...................................................................................................66 16.3. Evita los Di",eros .,ta""ess.....................................................................................................66 16.6. La 8ego"ia"i/n de ontenidos................................................................................................66 16.!. Evita ))...................................................................................................................................66

"

Manual de Supervivencia del Administrador de Apache

16.'. ompila (u &pa",e.................................................................................................................66 Captulo 17. !i2lio)ra:a.....................................................................................................................'7

Manual de Supervivencia del Administrador de Apache

Captulo 1. Introduccin
1.1. Contenido
Este do"umento no es un manual "ompleto de &pa",e. (ampo"o es una guEa para programadores =eb ni, mu",o menos, para quienes deseen "olaborar en la programa"i/n del )ervidor Feb &pa",e. )implemente es una BuEa $9pida de $e0eren"ia para quienes tengan la suerte de administrar un )ervidor Feb &pa",e. 8aturalmente, este do"umento "ontiene errores <1 supongo que mu",os>. Go 1a sA que no so1 per0e"to, 1 si tu "reEas que lo era, lamento de0raudarte. 2ero puedes a1udarme a meCorarlo envi9ndome un "orreo "on las erratas, pi0ias 1 sugeren"ias <mCaqueHilIebenson."om>. (e lo agrade+"o de antemano. 7amos a lo tA"ni"o. Este do"umento est9 basado en &pa",e 2. 8o ,ago ninguna re0eren"ia a las versiones anteriores de &pa",e. 2ara todos los puntos, utili+arA un sistema operativo gnu/Linux. En "on"reto, 4ebian #.1. (endr9s que adaptar lo que ,a1 a la distribu"i/n o el sistema operativo que utili"es.

1.2. Licencia
Los dere",os de reprodu""i/n <"op1rig,t> de este do"umento pertene"en a su autor, Miguel Jaque Barbero J 2006. )e "on"ede permiso para "opiar, distribuir 1/o modi0i"ar este do"umento baCo los tArminos de la Li"en"ia B8* de 4o"umenta"i/n Libre <B8* Dree 4o"umentation Li"ense>, versi/n 1.1 o "ualquier versi/n posterior publi"ada por la Dunda"i/n de )o0t=are Libre <Dree )o0t=are Doundation>K sin se""iones invariantes, ni textos de portada o "ontraportada. *na "opia de esta li"en"ia est9 disponible en ,ttpL//===.gnu.org/"op1le0t/0dl.,tml. (odos los dere",os de reprodu""i/n <"op1rig,t> 1 mar"as registradas pertene"en a sus respe"tivos dueMos. El uso de "ualquier tArmino en este do"umento no se ,a reali+ado "on inten"i/n de "ontravenir ninguno de estos dere",os. )i "onsideras que alguno de sus dere",os de reprodu""i/n o mar"a registrada ,an sido vulnerados por este do"umento, o para "ualquier pregunta o duda, por 0avor ponte en "onta"to "on los autores en in0oHilIebenson."om.

1.3. Responsabilidad
8o se asume ninguna responsabilidad por los "ontenidos de este do"umento. El le"tor asume el riesgo derivado del uso de los "on"eptos, eCemplos 1 "ualquier otro "ontenido. &l tratarse de una nueva edi"i/n, este do"umento puede "ontener errores e impre"isiones.

Miguel Jaque Barbero (mjaque@ilkebenson.com

1.4. Acerca del Autor


Miguel Jaque Barbero na"i/ en Bar"elona en 1-6'. Es .ngeniero )uperior de (ele"omuni"a"i/n por la *niversidad 2olitA"ni"a de Madrid 1 M9ster en &dministra"i/n de Empresas por el .nstituto de Empresa de Madrid. 6a desarrollado toda su "arrera pro0esional en el se"tor de la ingenierEa de so0t=are 1, desde 1--- "entrado ex"lusivamente en te"nologEas de so0t=are libre a travAs de .lIe Benson <===.ilIebenson."om>. )u a"tividad pro0esional se "entra desde enton"es en el desarrollo de pro1e"tos, 0orma"i/n 1 "onsultorEa, utili+ando ex"lusivamente estas te"nologEas. 2ara "onta"tar "on el autorL mCaqueHilIebenson."om

Manual de Supervivencia del Administrador de Apache

Captulo 2. Introduccin
2.1. Tienes Suerte de Utilizar Apac e
)in duda &pa",e es uno de los meCores servidores =eb que existen ,o1. 2ara mu",os, el meCor. 4esde su "rea"i/n1 en 1--3 ,a dominado el mer"ado de servidores <ver ===.net"ra0t."om>. 6o1, &pa",e es desarrollado por una "omunidad de voluntarios que tiene su sede en ===.apa",e.org. &llE podr9s en"ontrar toda la do"umenta"i/n detallada.

2.2. Instalacin
on 4ebian, la instala"i/n de &pa",e es mu1 sen"illa. Basta "on eCe"utar el "omandoL
# apt-get install apache2

G tendr9s el servidor =eb instalado.

2.3. Con!i"uracin
La "on0igura"i/n de 4ebian, por de0e"to, in"lu1eL Los ar",ivos de "on0igura"i/n de &pa",e <"on0> en /etc/apache2 El dire"torio raE+ para los do"umentos <,tdo"s> en /var/www

2.4. Arran#ue $ %arada


&pa",e se eCe"uta "omo un demonio. 2ara arran"arlo basta "on eCe"utar el "omandoL
# /etc/init.d/apache2 start

G para detenerloL
# /etc/init.d/apache2 stop

E",9ndole un vista+o al s"ript </etc/init.d/apache2> ver9s que el "omando que realmente arran"a 1 detiene &pa",e es apa",e2"tl. onsultando la p9gina de manual <man apache2ctl> ver9s que tiene mu",as m9s op"iones que start 1 stop.

2.&. %rocesos
&unque &pa",e se eCe"uta ini"ialmente "omo root, pues en un sistema Linux s/lo root est9 autori+ado a abrir so"Iets en puertos por debaCo del 1000, 1 &pa",e es"u",a, por de0e"to, en el tradi"ional puerto '0 del proto"olo 6((2. &l arran"ar &pa",e el pro"eso de root arran"ar9 otros pro"esos ,iCos que 1a se eCe"utan "on otro usuario 1 grupo menos peligroso que root. 2or de0e"to estos pro"esos ,iCos se eCe"utan "on el usuario ;;;<data 1 el grupo ;;;<data. &segNrate de que este usuario
1 2ara "ono"er la ,istoria de &pa",e puedes "onsultar ,ttpL//en.=iIipedia.org/=iIi/&pa",eO=ebOserver

Miguel Jaque Barbero (mjaque@ilkebenson.com


tiene permiso para leer los do"umentos que debe servir &pa",e.

&'

El pro"eso ini"ial no atender9 ninguna peti"i/n de "liente para evitar asE problemas de seguridad. En su lugar, ser9n los pro"esos ,iCos quienes se en"arguen de servir las p9ginas. 2uedes "omprobar todo esto "on el "omando ps -aux para ver los pro"esos en eCe"u"i/n en tu sistema.

&&

Manual de Supervivencia del Administrador de Apache

Captulo 3. Ser'idor ()sico


El 0i",ero de "on0igura"i/n de &pa",e que 4ebian instala por de0e"to </etc/apach2/apache2.conf>, aunque es mu1 bueno, es tambiAn mu1 "ompli"ado 1 no nos sirve para expli"ar los "on"eptos m9s elementales de &pa",e. &sE que vamos a "ambiarlo <guardando antes una "opia de seguridad> por este otroL

3.1. Ser'idor Sencillo


#Fichero de Configuracin SENCILLO (/etc/apache2/apache2.conf) #Nombre con el que el Servidor se conoce a s mismo ServerName "aym.juntae .es" #!irectorio con los "icheros de con"iguraci#n de $pache Server%oot "/etc/apache2" #!irectorio ra& de los documentos publicados !ocument%oot "/var/'''" #(ichero en el que se guarda el n)mero del proceso $pache *id(ile /var/run/apache2.pid #+suario y grupo con los que se ejecutar, $pache +ser '''-data -roup '''-data #(ichero de log para los errores .rror/og /var/log/apache2/error.log #*uerto en el que escuchar, $pache /isten 01 #/ista de "icheros que pueden servir como ndices de directorio !irectory2nde inde .html inde .htm #(ichero con la lista de tipos mime 3ypes4on"ig /etc/mime.types #3ipo de "ichero por de"ecto !e"ault3ype te t/plain

7amos a expli"arlo paso a paso. 1. El 0i",ero es un 0i",ero de texto plano. 2. ada lEnea "ontiene una directiva de "on0igura"i/n.

#. Las lEneas que empie+an por = son "omentarios.

Miguel Jaque Barbero (mjaque@ilkebenson.com

&(

3.1.1. Directivas Bsicas


Ser'er*a+e Estable"e el nombre "on el que el servidor se "ono"e a sE mismo. Esta dire"tiva se utili+a para las redire""iones. Es de"ir, "uando &pa",e le tiene que indi"ar al "liente <el navegador> otra dire""i/n a la que tiene que ir. Es importante que ese nombre se pueda resuelver por 48). 4e lo "ontrario el "liente no podr9 a""eder a la p9gina redire""ionada. Ser'erRoot Estable"e el dire"torio en el que se en"uentran los 0i",eros de "on0igura"i/n de &pa",e. G si &pa",e no "ono"e el dire"torio de "on0igura"i/n, :"/mo puede a""eder a Aste 0i",ero de "on0igura"i/n; La respuesta a esta paradoCa es que &pa",e puede arran"arse pas9ndole "omo par9metro un 0i",ero de "on0igura"i/n. 2ero puede o"urrir que en el 0i",ero de "on0igura"i/n ,agamos re0eren"ia a otros 0i",eros que deben in"luirse. ,ocu+entRoot Estable"e el dire"torio en el que se en"uentran los 0i",eros que &pa",e servir9 a los "lientes <p9ginas 6(ML, s"ripts 262, B.s, et".>. %id-ile Estable"e el 0i",ero en el que se guardar9 el nNmero del pro"eso de &pa",e. Este 0i",ero es el que se lee "uando ,a1 que parar/matar el pro"eso. User Estable"e el usuario "on el que se eCe"utar9 &pa",e. Bueno, realmente el pro"eso &pa",e se eCe"uta "omo root, porque normalmente tiene que abrir un so"Iet de es"u",a para el puerto '0 1, en 25).P, s/lo root puede abrir puertos por debaCo del 1000. )in embargo, tras arran"ar ese primer pro"eso "omo root, &pa",e "rea varios pro"esos ,iCos que se eCe"utan "on el usuario estable"ido en esta dire"tiva <===Qdata en 4ebian>. Estos pro"esos ser9n quienes realmente atender9n las peti"iones de los usuarios. .roup Estable"e el grupo "on el que se eCe"utar9 &pa",e <sus pro"esos de es"u",a>.

&3

Manual de Supervivencia del Administrador de Apache


/rrorLo" Estable"e el 0i",ero de log de errores de &pa",e. En este 0i",ero se registrar9n los 0allos de a""eso, intentos de a""eso a re"ursos sin autori+a"i/n, p9ginas no en"ontradas, et". Listen Estable"e la dire""i/n .2 1 el puerto en el que es"u",ar9 &pa",e. 2or de0e"to, &pa",e es"u",ar9 en todas las dire""iones .2 ,abilitadas en la m9quina. ,irector$Inde0 Estable"e los nombres de 0i",eros que servir9n "omo Endi"es al a""eder a un dire"torio sin indi"ar ningNn re"urso "on"reto. &sE, si un usuario soli"ita ===.mi=eb.org/dir1/ &pa",e bus"ar9 en ese dire"torio 0i",eros "on el nombre indi"ado en esta dire"tiva para entreg9rselos. T$pesCon!i" Estable"e el 0i",ero "on la lista de tipos Mime. Los tipos Mime "onstitu1en un est9ndar que rela"iona tipos de 0i",eros "on sus extensiones 1 le permiten a &pa",e in0ormar al navegador del tipo de 0i",ero que le est9 entregando. &sE, el navegador de"ide "omo presentarlo <mostrando una p9gina =eb, eCe"utando un plugin, guard9ndolo en dis"o...> ,e!aultT$pe Estable"e el tipo Mime por de0e"to para aquellos 0i",eros "u1a extensi/n no 0igure en la lista de tipos Mime.

3.2. Ser'idor Con!i"urado por ,irectorios


En el servidor sen"illo que a"abamos de ver, la "on0igura"i/n es la misma para todos los do"umentos que estemos publi"ando. En algunos "asos puede interesarnos tener "on0igura"iones di0erentes para distintos dire"torios e in"luso para distintos 0i",eros. 2ara eso, podemos utili+ar un 0i",ero de "on0igura"i/n "omo el siguienteL

Miguel Jaque Barbero (mjaque@ilkebenson.com

&!

#(ichero de 4on"iguraci#n *5% 6/57+.S ServerName "aym.juntae .es" Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain !irectory2nde inde .html inde .htm

#.stablecemos la con"iguraci#n de cada directorio < irector! "/#ar/$$$"% #No permitimos los ndices autom,ticos en ning)n sitio 8salvo #los que permitamos e plcitamente9 Option& 'Inde(e& </ irector!% :!irectory "/var/'''/descargas"; #.n este directorio< permitimos ndices autom,ticos< pero no #permitimos enlaces simb#licos 5ptions =2nde es -(ollo'Sym/in>s #No permitimos a nadie acceder a los "icheros .htaccess de este #directorio <Fi)e& .htacce&&% order allo'<deny deny "rom all </Fi)e&% :/!irectory; <Location /&er#er'&tatu&% #.n esta direcci#n< mostramos in"ormaci#n sobre el estado del #servidor Set*and)er &er#er'&tatu& </Location%

3.2.1. Directivas para la Configuracin por Bloques


&l apli"ar "on0igura"iones di0erentes por dire"torio, por 0i",ero o por lo"ali+a"i/n, de"imos que estamos apli"ando R on0igura"i/n por BloquesS. 6emos utili+ado las siguientes dire"tivasL 1,irector$2 .ndi"a que el bloque de "on0igura"i/n que abar"a <entre T4ire"tor1U 1 T/4ire"tor1U> se apli"a al dire"torio indi"ado 1 a sus subdire"torios. (ambiAn ,a1 una dire"tiva T4ire"tor1Mat",U que permite utili+ar expresiones regulares. &sE, un mismo bloque de "on0igura"i/n puede apli"arse a varios dire"torios.

&"

Manual de Supervivencia del Administrador de Apache


3ption Modi0i"a las op"iones que se apli"an a un dire"torio. Las op"iones se aMaden <"on V> o se quitan <"on Q> respe"to a las que en ese momento se apli"asen sobre el dire"torio. Mediante esta dire"tiva pueden aMadirse/quitarse las siguientes op"ionesL &ll, Exe" B., Dollo=)1mLinIs, .n"ludes, .n"ludes85EPE , .ndexes, Multivie=s 1 )1mLinIs.05=nerMat",. 1-ile2 .ndi"a que el bloque de "on0igura"i/n que abar"a <entre TDileU 1 T/DileU> se apli"ar9 a los 0i",eros "u1o nombre "oin"ida "on el indi"ado. (ambiAn ,a1 una dire"tiva TDileMat",U que permite utili+ar expresiones regulares. &sE, un mismo bloque de "on0igura"i/n puede apli"arse a varios 0i",eros. 1Location2 .ndi"a que el bloque de "on0igura"i/n que abar"a <entre TDileU 1 T/DileU> se apli"ar9 a las lo"ali+a"iones que "oin"idan "on la indi"ada. La Rlo"ali+a"i/nS es la dire""i/n que soli"ita el "liente. DECate que no es lo mismo que el sistema de 0i",eros <sobre el que trabaCan T4ire"tor1U 1 TDileU>. *tili+ando redire""iones 1 alias es posible que un "liente soli"ite una determinada Rlo"ali+a"i/nS 1 que la p9gina que se le entregue tenga un pat, "ompletamente distinto al que Al espe"i0i"/. (ambiAn ,a1 una dire"tiva TLo"ationMat",U que permite utili+ar expresiones regulares. &sE, un mismo bloque de "on0igura"i/n puede apli"arse a varias lo"ali+a"iones. Set4andler Estable"e el maneCador que se utili+ar9 para atender la peti"iones a un dire"torio, a un tipo de 0i",eros o a una lo"ali+a"i/n. *n W,andlerW es una representa"i/n interna de &pa",e de una a""i/n que se va a eCe"utar "uando ,a1 una llamada a un 0i",ero. Beneralmente, los 0i",eros tienen ,andlers implE"itos, basados en el tipo de 0i",ero de que se trata. 8ormalmente, todos los 0i",eros son simplemente servidos por el servidor, pero algunos tipos de 0i",eros se tratan de 0orma di0erente. Los posibles ,andlers sonL de0aultQ,andler, sendQasQis, "giQs"ript, imapQ 0ile, serverQin0o, serverQstatus 1 t1peQmap.

&#

Manual de Supervivencia del Administrador de Apache

Captulo 4. 4osts 5irtuales


(ener todo un servidor &pa",e para atender s/lo un sitio =eb es una pArdida de re"ursos. &pa",e es "apa+ de atender, desde una sola m9quina a todo un "onCunto de sitios =eb. Es de"ir, podemos servir al mismo tiempo peti"iones para a1m.Cuntaex,es, bs.Cuntaex.es, ===.ilIebenson."om, ===.apa",e.org, ===.Iernel.org... Esto se ,a"e utili+ando R,osts virtualesS.

4.1. 3pciones de Ar#uitectura


2ara atender varios sitios =eb primero debemos "onseguir que las peti"iones de los "lientes para esas *$Ls lleguen ,asta nuestro servidor. Este es un problema de la "on0igura"i/n de 48)s que, "omo administradores de &pa",e, no nos "orresponde. 2ero, si lo que quieres es ,a"er pruebas, puedes modi0i"ar el 0i",ero ,osts de tus "lientes </et"/,osts en 4ebian> 1 mapear en Al los sitios =eb "on las dire""iones .2 que es"u",en tu/s tarCetas de red. *na ve+ ,e",o esto, tendremos varias op"iones para "on0igurar nuestros ,osts virtuales. En primer lugar, podemos estable"er varias dire""iones .2 1 asignar una a "ada ,ost virtual. Esto lo llamaremos R,osts virtuales por .2S. En segundo lugar, podemos estable"er distintos puertos de es"u",a para sitio =eb. )E, esto es algo "ompli"ado porque impli"a de"irle al "liente a quA puerto debe dirigirse. 2ero puede ser Ntil para redes internas. Esto lo llamaremos R,osts virtuales por 2uertoS. G, en ter"er lugar, el proto"olo 6((2 1.1 permite al "liente indi"arnos, mediante una "abe"era, el nombre del sitio =eb al que quiere a""eder. omo 1a apenas quedan navegadores que no soporten el proto"olo 6((2 1.1, est9 es la op"i/n m9s utili+ada. G por Nltimo, podemos ,a"er una me+"la "on todas estas op"iones.

Miguel Jaque Barbero (mjaque@ilkebenson.com

&$

4.2. 4osts 5irtuales por I%


)upongamos en primer lugar, que nuestro servidor atiende dos dire""iones .2 1 que asignamos "ada una de ellas a un sitio =eb. El 0i",ero de "on0igura"i/n serEa el siguienteL
#(ichero de 4on"iguraci#n para ?5S3S @2%3+$/.S *5% 2* Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain !irectory2nde inde .html inde .htm

#.stablecemos la con"iguraci#n para cada ?ost @irtual <+irtua)*o&t ,-2.,./.2.,..% #4ada uno tiene su nombre ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" #!ividimos los "icheros de log .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log </+irtua)*o&t% :@irtual?ost BC2.BD0.2.211; ServerName "idt.juntae .es" !ocument%oot "/var/'''/idt" .rror/og /tmp/idtA.%%5%.log 3rans"er/og /tmp/idtA$44.SS.log :/@irtual?ost;

&%

Manual de Supervivencia del Administrador de Apache

4.3. 4osts 5irtuales por %uerto


6agamos lo mismo, pero en una de las dire""iones .2, utili"emos dos puertos ( 2/.2 distintos para atender dos sitios di0erentes. El 0i",ero de "on0igura"i/n serEa el siguienteL
#(ichero de 4on"iguraci#n para ?5S3S @2%3+$/.S *5% 2* E *+.%35 Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain !irectory2nde inde .html inde .htm

#2ndicamos el puerto de cada sitio 'eb <+irtua)*o&t ,-2.,./.2.,..0/1% ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log </+irtua)*o&t% :@irtual?ost BC2.BD0.2.BDDF0101; ServerName "intranet.aym.juntae .es" !ocument%oot "/var/'''/aym/intranet" .rror/og /tmp/aymAintranetA.%%5%.log 3rans"er/og /tmp/aymAintranetA$44.SS.log :/@irtual?ost; :@irtual?ost BC2.BD0.2.211; ServerName "idt.juntae .es" !ocument%oot "/var/'''/idt" .rror/og /tmp/idtA.%%5%.log 3rans"er/og /tmp/idtA$44.SS.log :/@irtual?ost;

Miguel Jaque Barbero (mjaque@ilkebenson.com

('

4.4. 4osts 5irtuales por *o+bre


G a,ora, "on0iguremos el servidor utili+ando los nombres de "ada sitio =ebL
#(ichero de 4on"iguraci#n para ?5S3S @2%3+$/.S *5% N5G6%. Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain !irectory2nde inde .html inde .htm

#/a con"iguraci#n de hosts virtuales por nombre se aplica a las #peticiones recibidas en esta 2* Na2e+irtua)*o&t ,-2.,./.2.,.. #4on"iguramos haciendo re"erencia a cada sitio por su nombre <+irtua)*o&t a!2.3untae(.e&% ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log </+irtua)*o&t% :@irtual?ost bs.juntae .es; ServerName "bs.juntae .es" !ocument%oot "/var/'''/bs" .rror/og /tmp/bsA.%%5%.log 3rans"er/og /tmp/bsA$44.SS.log :/@irtual?ost;

(&

Manual de Supervivencia del Administrador de Apache

4.&. 4osts 5irtuales por *o+bre6 I% $ %uerto


2ara "ompletar el eCemplo, "on0iguremos el servidor utili+ando todas las op"ionesL
#(ichero de 4on"iguraci#n para ?osts @irtuales Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain !irectory2nde inde .html inde .htm

Na2e+irtua)*o&t ,-2.,./.2.,.. <+irtua)*o&t a!2.3untae(.e&% ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log </+irtua)*o&t% <+irtua)*o&t 4&.3untae(.e&% ServerName "bs.juntae .es" !ocument%oot "/var/'''/bs" .rror/og /tmp/bsA.%%5%.log 3rans"er/og /tmp/bsA$44.SS.log </+irtua)*o&t% <+irtua)*o&t ,-2.,./.2.2110/1% ServerName "bs.juntae .es" !ocument%oot "/var/'''/bs" .rror/og /tmp/bsA.%%5%.log 3rans"er/og /tmp/bsA$44.SS.log </+irtua)*o&t% <+irtua)*o&t ,-2.,./.2.2110/1/1% ServerName "intranet.bs.juntae .es" !ocument%oot "/var/'''/bs/intranet" .rror/og /tmp/bsAintranetA.%%5%.log 3rans"er/og /tmp/bsAintranetA$44.SS.log </+irtua)*o&t%

Miguel Jaque Barbero (mjaque@ilkebenson.com

((

4.7. 4osts 5irtuales ,in)+icos


2ero... :quA pasa si tenemos que "on0igurar de"enas, "ientos o in"luso miles de sitios =eb tal 1 "omo o"urre en un .)2; 2ara eso tenemos la op"i/n de 6osts 7irtuales 4in9mi"os. 7eamos un eCemploL
#(ichero de 4on"iguraci#n para ?osts @irtuales !in,micos ServerName "sabio" Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain .rror/og /tmp/juntae A.%%5%.log !irectory2nde inde .html inde .htm

#4argamos el m#dulo que nos permite hacer con"iguraci#n din,mica de #hosts virtuales Inc)ude /etc/apache2/2od&'a#ai)a4)e/#ho&t5a)ia&.)oad #/e indicamos a $pache que utilice como nombre 8ServerName9 el de la #petici#n recibida 6&eCanonica)Na2e Off #.stablecemos el !ocument%oot para cada sitio 'eb que atendemos. +irtua) ocu2ent7oot /#ar/$$$/8,.1

2ero, si tenemos mu",os sitios =eb, tambiAn puede ser Ntil que "ada uno de ellos tenga su propio 0i",ero de "on0igura"i/n <1a le daremos permiso a sus administradores para que lo gestionen ellos mismos>. Esto podemos "onseguirlo "argando todos los 0i",eros de "on0igura"i/n de los sitios virtuales desde un dire"torio. 2odrEamos ,a"erlo utili+ando la siguiente lEnea en el 0i",ero de "on0igura"i/n de &pa",eL
2nclude /etc/apache2/sites-enabled/HI.#JK

Esta dire"tiva in"lu1e en el 0i",ero de "on0igura"i/n todos los 0i",eros que en"uentre en el dire"torio indi"ado.

(3

Manual de Supervivencia del Administrador de Apache

4.8. ,irecti'as para la Con!i"uracin de 4osts 5irtuales


7eamos las dire"tivas que ,emos utili+adoL 15irtual4ost2 .ndi"a que el bloque de "on0igura"i/n que abar"a <entre T7irtual6ostU 1 T/7irtual6ostU> se apli"a al sitio =eb indi"ado. ada ,ost virtual se puede identi0i"ar por .2, .2L2uerto o por nombre. *a+e5irtual4ost Estable"e la dire""i/n .2 sobre la que se "on0igurar9n ,osts virtuales. 5irtual,ocu+entRoot Estable"e din9mi"amente la raE+ de los do"umentos <4o"ument$oot> para los ,osts virtuales. Include .n"lu1e uno o varios 0i",eros en el 0i",ero de "on0igura"i/n. UseCanonical*a+e Estable"e de quA 0orma "ono"er9 &pa",e su propio nombre <para las redire""iones>. Trans!erLo" Estable"e el 0i",ero de log de a""eso de &pa",e. En este 0i",ero se registrar9n los a""esos a las p9ginas servidas por &pa",e.

("

Manual de Supervivencia del Administrador de Apache

Captulo &. Autenticacin


En mu",as o"asiones querremos restringir el a""eso a algunos re"ursos <p9ginas>. on &pa",e podemos estable"er me"anismos de usuario 1 "ontraseMa, para limitar el a""eso. &dem9s, los usuarios pueden in"luirse en grupos 1 estable"er permisos para estos Nltimos. X2E$5 *.4&45Y la transmisi/n de in0orma"i/n tiene una en"ripta"i/n mu1 dAbil. 8o montes ninguno de los me"anismos que veremos a "ontinua"i/n si no utili+as tambiAn ))L. ualquier sni00er podr9 09"ilmente robarte las "ontraseMas.

&.1. 9C+o !unciona:


*na ve+ que estable"emos que un determinado re"urso de nuestro servidor requiere autenti"a"i/n, al intentar a""eder a Al &pa",e devuelve al "liente un mensaCe %01 <&ut,enti"ation $equired>. 8ormalmente, en los navegadores m9s a"tuales, si existe alguna pareCa usuario/"lave guardada para el re"urso la enviar9n al servidor de 0orma autom9ti"a. )i no es asE, preguntar9n al usuario. 4esde el lado del servidor, ,a1 dos me"anismos de autenti"a"i/n.

Miguel Jaque Barbero (mjaque@ilkebenson.com

()

&.2. Autenticacin ()sica


on este me"anismo la "ontraseMa es enviada en "laro por la red, o "omo mu",o, "on una "odi0i"a"i/n en base 6% <09"il, 09"il...>. 7eamos un eCemploL
#(ichero de 4on"iguraci#n con $utenticaci#n 6,sica ServerName "sabio" Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain !irectory2nde inde .html inde .htm Name@irtual?ost BC2.BD0.1.LB :@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log :!irectory /var/'''/aym/pac; #.stablecemos el tipo de 4ontrol de $cceso que se #utili&ar, para acceder a este directorio 9uth:!pe ;a&ic #/e damos un nombre al entorno privado que protegemos 9uthNa2e "Infor2acin <ri#ada de )a <9C" #(ichero con la in"ormaci#n de los usuarios autori&ados y #sus contraseMas 8encriptadas9. 9uth6&erFi)e /u&r/cur&oapache/u&er& #(ichero con la in"ormaci#n de los grupos y sus usuarios #miembros. 9uth=roupFi)e /u&r/cur&oapache/group& #.stablecemos el nivel de seguridad para este directorio. re>uire #a)id'u&er #5tros valores posibles sonF # require user usuarioB usuario2 ... lista con los # usuarios autori&ados # require group grupoB grupo2 ... lista con los # grupos autori&ados # require user usuB usu2 group grB gr2 ... una # combinaci#n de ambos :/!irectory; :/@irtual?ost;

(#

Manual de Supervivencia del Administrador de Apache

5.2.1. Ficheros de Usuarios

!rupos

La in0orma"i/n "on los usuarios 1 las "ontraseMas se guarda en el 0i",ero seMalado por la dire"tiva &ut,*serDile. Este 0i",ero tendr9 algo pare"ido aL
usuBFNaprBNEm2"v...N>-$t2gByDd5StO1OP">a2. usu2FNaprBN1!1n-/..Ncv0e$61(y>j/*no2*/1 D.

G, naturalmente, debe estar donde ningNn usuario del servidor =eb pueda llegar a leerlo. omo po"a gente es "apa+ de es"ribir dire"tamente la "ontraseMa en"riptada, &pa",e in"lu1e una apli"a"i/n para gestionar este 0i",ero. )e trata de htpasswd2. 2ara "rear un 0i",ero "omo el del eCemplo, tendremos que eCe"utar los siguientes "omandosL
# htpass'd2 -cm /usr/cursoapache/users usuB # htpass'd2 -m /usr/cursoapache/users usu2

El primero "rea el 0i",ero 1 le aMade el usuario usu1. La op"i/n " indi"a que se debe "rear un nuevo 0i",ero 1 la op"i/n m que la "ontraseMa se en"riptar9 "on M43. El segundo "omando simplemente aMade el usuario us2 al 0i",ero 1a "reado. En ambos "asos se nos preguntar9 por la "ontraseMa. El 0i",ero de grupos "ontiene la in0orma"i/n de estos, indi"ando quA usuarios pertene"en a "ada grupo. 8o requiere ningNn "omando, pues se trata de un simple 0i",ero de texto, "on una estru"tura "omo la siguienteL
pacF usuB usu2 desarrolloF progB prog2

DECate que los usuarios de "ada grupo no se separan por "omas <"omo se ,a"e en /et"/group>, sino por espa"ios en blan"o.

Miguel Jaque Barbero (mjaque@ilkebenson.com

($

&.3. Autenticacin ()sica con %er+isos /speciales ;Allo<=


2ero en o"asiones ne"esitamos estable"er permisos no solo por usuario, tambiAn por dire""i/n .2 de origen, subred, et". 2ara eso disponemos de la dire"tiva &llo=. 7emos un eCemploL
#(ichero de 4on"iguraci#n con $utenticaci#n 6,sica y $llo' ServerName "sabio" Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain .rror/og /tmp/juntae A.%%5%.log !irectory2nde inde .html inde .htm Name@irtual?ost BC2.BD0.1.LB :@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log :!irectory /var/'''/aym/pac; $uth3ype 6asic $uthName "2n"ormaci#n *rivada de la *$4" $uth+ser(ile /usr/cursoapache/users $uth-roup(ile /usr/cursoapache/groups require valid-user :/!irectory; :!irectory /var/'''/curso/aym/sistemas; #2ndicamos que s#lo puede accederse desde esta subred 9))o$ fro2 ,-2.,./.1.1/2??.2??.1.1 #3ambiQn podemos especi"icar nombres de dominios< #direcciones 2*< redes 8especi"icaci#n 42!%9... #!enegamos el acceso desde una direcci#n 2* determinada en! fro2 ,-2.,./.1.?1 #3ambiQn podemos especi"icar nombres de dominios< #direcciones 2*< redes 8especi"icaci#n 42!%9... #.speci"icamos el orden de aplicaci#n de las directivas #anteriores. R/a )ltima prevaleceS Order a))o$@den! #R5T5S el argumento de 5rder N5 //.@$ .S*$425S. #5tros valores posibles son deny<allo' y mutual-"ailure :/!irectory; :/@irtual?ost;

(%

Manual de Supervivencia del Administrador de Apache

&.4. Autenticacin con ,i"est


2odemos meCorar algo la seguridad utili+ando 4igest. En lugar de enviar la "ontraseMa en "laro <o "on "odi0i"a"i/n en base 6%> por la red, "on 4igest las "ontraseMas no viaCan por la red. En lugar de eso, al pedir un re"urso protegido, el servidor envEa al "liente un nNmero <noon"e>. *tili+ando ese nNmero RNni"oS, la *$. del re"urso soli"itado 1 la "ontraseMa, el navegador reali+a un digest. Es de"ir, un "9l"ulo basado en M43 que le da un nNmero mu1 raro 1 di0E"il de obtener sin la "ontraseMa <mu1 di0E"il>. El servidor "omprueba el digest utili+ando para ello la in0orma"i/n alma"enada. 2or pe"uliaridades matem9ti"as de este tipo de opera"iones, el servidor no ne"esita guardar la "ontraseMa <ni siquiera en"riptada>. Le basta "on guardar otro digest basado en la misma "ontraseMa para poder "omprobarlo. iertamente, este me"anismo redu"e el riesgo de "aptura de "ontraseMas. 7eamos un eCemploL
#(ichero de 4on"iguraci#n con $utenticaci#n con !igest ServerName "sabio" Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain .rror/og /tmp/juntae A.%%5%.log !irectory2nde inde .html inde .htm Name@irtual?ost BC2.BD0.1.LB #4argamos el m#dulo que necesitamos Inc)ude /etc/apache2/2od&'a#ai)a4)e/auth5dige&t.)oad :@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" Server$dmin "'ebmasterUaym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log :!irectory /var/'''/aym/pac; 9uth:!pe ige&t $uthName "pac" #(ichero con los !igest de los usuarios autori&ados 9uth ige&tFi)e /u&r/cur&oapache/dige&t require valid-user :/!irectory; :/@irtual?ost;

Miguel Jaque Barbero (mjaque@ilkebenson.com

3'

5.".1. Fichero de Digest


La gesti/n del 0i",ero de digest en el servidor se reali+a "on la apli"a"i/n ,tdigest2. 2ara aMadir los mismos usuarios que tenEamos, debemos reali+ar los siguientes "omandosL
# htdigest -c /usr/curso ul/digest pac usuB # htdigest /usr/curso ul/digest pac usu2

4e nuevo, la op"i/n " en el primer "omando "rear9 el 0i",ero. DECate que es ne"esario pasarle al "omando el nombre del entorno protegido <Rpa"S>.

&.&. Autenticacin %ersonalizada


2ero en o"asiones ne"esitaremos que los propios administradores de los dominios que alberguemos estable+"an sus permisos de a""eso. G, naturalmente no queremos que urgen en nuestro 0i",ero de "on0igura"i/n. 2ara ello, &pa",e permite espe"i0i"ar 0i",eros de "on0igura"i/n adi"ionales que se guardar9n en "ada dire"torio. En "ada peti"i/n, &pa",e bus"a, lee 1 pro"esa estos 0i",ero <"on la "onsiguiente pArdida de tiempo>. 7eamos un eCemplo redu"ido s/lo a la "on0igura"i/n del servidor virtualL
... resto del "ichero de con"iguraci#n de $pache :@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log #.speci"icamos el "ichero con la con"iguraci#n particular de #cada directorio 9cce&&Fi)eNa2e .htacce&& :!irectory /var/'''/aym/desarrollo; $uth3ype 6asic $uthName "desarrollo" $uth+ser(ile /usr/cursoapache/users $uth-roup(ile /usr/cursoapache/groups require group desarrollo #2ndicamos quQ directivas de con"iguraci#n est,n #autori&adas en el "ichero .htaccess 9))o$O#erride 9uthConfig #5tras opciones son $ll< (ile2n"o< 2nde es< /imit< # 5ptions y None o combinaci#n de ellas $llo'5verride #$ut4on"ig 2nde es :/!irectory; :/@irtual?ost;

En el servidor virtual a1m.Cuntaex.es, en su dire"torio /desarrollo, podremos para "ada uno de sus subdire"torios "rear un 0i",ero llamado .,ta""ess "on dire"tivas "omo $equire, &ut,(1pe, &ut,*serDile, &ut,BroupDile, &ut,8ame, et".

3&

Manual de Supervivencia del Administrador de Apache

&.7. ,irecti'as para la Autenticacin


7eamos las dire"tivas que ,emos utili+adoL Aut T$pe Estable"e el tipo de autenti"a"i/n de usuario que se utili+ar9. Los valores posibles son Basi" 1 4igest. Aut *a+e Estable"e el nombre para el espa"io protegido. Aut User-ile Estable"e el 0i",ero del servidor que guarda la in0orma"i/n de usuarios 1 sus "ontraseMas en"riptadas <para autenti"a"i/n B9si"a>. Aut ,i"est-ile Estable"e el 0i",ero del servidor que guarda la in0orma"i/n de usuarios 1 sus digests <para autenti"a"i/n 4igest>. Aut .roup-ile Estable"e el 0i",ero del servidor que guarda la in0orma"i/n de grupos de usuarios <para autenti"a"i/n B9si"a>. Re#uire Estable"e quA usuarios podr9n a""eder al re"urso protegido. Los valores posibles sonL user, group, validQuser o "ualquier "ombina"i/n de ellos. &l utili+ar user 1/o group, debe aMadirse una lista separada por espa"ios "on los nombres de los usuarios 1/o los grupos autori+ados. Allo< ontrola quA "lientes pueden a""eder al re"urso protegido. 2ueden estable"erse "ontroles por .2, subred 1 nombres de dominios. ,en$ ontrola quA "lientes no pueden a""eder al re"urso protegido. 2ueden estable"erse "ontroles por .2, subred 1 nombres de dominios. 3rder Estable"e en quA orden se apli"an las dire"tivas &llo= 1 4en1. Los valores posibles son R4en1,&llo=S, R&llo=,4en1S 1 RMutualQ DailureS. La Nltima prevale"e.

Miguel Jaque Barbero (mjaque@ilkebenson.com


Access-ile*a+e

3(

Estable"e el nombre para los 0i",eros de "on0igura"i/n distribuidos. Allo<3'erride Estable"e quA dire"tivas est9n permitidas en los 0i",eros de "on0igura"i/n distribuidos. Los valores posibles sonL &ut, on0ig, Dile.n0o, .ndexes, Limit 1 5ptions.

&.8. 3tras 3pciones de Autenticacin


2ero no todo es Basi" 1 4igest. &l menos, en lo que al servidor respe"ta, Aste puede guardar la in0orma"i/n de autenti"a"i/n en otros sistemas adem9s de en simples 0i",eros de texto plano. &pa",e permite guardar la "ontraseMa en bases de datos <tipo 4B 1 4BM>, en un dire"torio L4&2 e in"luso en bases de datos rela"ionales "omo M1)@L.

33

Manual de Supervivencia del Administrador de Apache

Captulo 7. *e"ociacin de Contenidos


&pa",e es "apa+ de entregar re"ursos di0erentes en 0un"i/n de las pre0eren"ias del "liente. Es de"ir, que para un "liente italiano, &pa",e puede entregare la versi/n italiana de un do"umento 1 para un oreano, entregarle la versi/n "oreana <siempre que ambas existan en su dire"torio de re"ursos>. Esta adapta"i/n a las pre0eren"ias del "liente no se limita al idioma. (ambiAn puede apli"arse aL

>ipo Mime de documento. 2or eCemplo, entregando im9genes en 0ormato Cpg para navegadores antiguos 1 en png para los m9s modernos. /a con7unto de caracteres del recurso 5charset6. 7ariando entre isoQ''3-Q13 para "lientes del sur de Europa e isoQ''3-Q3 para los "lientes tur"os. /a codi:icacin 5encondin)6. 7ariando entre un re"urso "omprimido "omo g+ip 1 otro "omo rar. ? el Idioma, men"ionado anteriormente.

2ara "onseguir todo esto, &pa",e dispone de dos me"anismos di0erentes.

7.1. *e"ociacin de Contenidos por >ulti5ie<s


Este es el sistema m9s 09"il de implementar, pero tambiAn el menos potente. 7eamos "omo 0un"ionaL
:@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" #$sociamos cada e tensi#n con su idioma 9ddLanguage e& .e& $dd/anguage en .en #.stablecemos las prioridades por si el navegador no nos dice #nada. Language<riorit! e& en :!irectory /var/'''/aym/; #4ualquier inde .K puede valer como ndice irector!Inde( inde( #$ctivamos la negociaci#n de contenidos Option& ABu)ti+ie$& :/!irectory; :/@irtual?ost;

&,ora, bastar9 "on que en el dire"torio /var/===/a1m pongamos un 0i",ero index para "ada idioma. Los 0i",eros deben llamarse index.,tml.es, index.,tml.en, et".

Miguel Jaque Barbero (mjaque@ilkebenson.com

3!

7.2. *e"ociacin de Contenidos con T$pe >aps


La segunda 0orma que tenemos para nego"iar "ontenidos es mediante mapas de tipos <t1pe maps>, tambiAn "ono"idos "omo 0i",eros .var. 7amos "on el eCemploL
#(ichero de 4on"iguraci#n para Negociaci#n de 4ontenidos por 3ype #Gaps ServerName "sabio" Server%oot "/etc/apache2" !ocument%oot "/var/'''" *id(ile /var/run/apache2.pid +ser '''-data -roup '''-data .rror/og /var/log/apache2/error.log /isten 01 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain .rror/og /tmp/juntae A.%%5%.log !irectory2nde inde .html inde .html #.stablecemos el manejador para los "icheros .var 9dd*and)er t!pe'2ap #ar Name@irtual?ost BC2.BD0.1.LB :@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" :!irectory /var/'''/aym/; # .n este directorio< el ndice ser, un "ichero .var irector!Inde( inde(.#ar :/!irectory; :/@irtual?ost;

Este me"anismo es mu",o m9s potente 1 permitirEa in"luso nego"iar plugins. 7eamos a,ora "omo es"ribimos el 0i",ero inde@.var para que nos permita mostrar los Endi"es en "ada idioma.
# .stablecemos el nombre del "ichero y el tipo de variaci#n +%2F inde V varyW"language" # tambiQn podemos variar por type< charset y enconding # Si 4ontent-language es es< el "ichero ser, inde .es.html +%2F inde .es.html 4ontent-typeF te t/html 4ontent-languageF es +%2F inde .en.html 4ontent-typeF te t/html 4ontent-languageF en

3"

Manual de Supervivencia del Administrador de Apache


Los 0i",eros .var tambiAn pueden in"luir "ontenido en lEnea. Este es un eCemplo, de do"umento de error "on varia"i/nL
+%2F O1OV varyWXlanguageX 4ontent-languageF es 4ontent-typeF te t/htmlV charsetW2S5-00LC-B 6odyF----------es-.l documento solicitado :b;RN5 .S3YS:/b; *or "avor contacte con el :a hre"W"mailtoFin"oUin"o.in"o";'ebmaster:/a; en caso de que usted crea que e iste un error en el servidor. ----------es-4ontent-languageF en 4ontent-typeF te t/htmlV charsetW2S5-00LC-B 6odyF----------en-3he requested document :b;2SNZ3 ?.%.S:/b; *lease contact :a hre"W"mailtoFin"oUin"o.in"o";'ebmaster:/a; i" you presume there is an error in this server. ----------en--

2ara a"tivar este do"umento de error, nos basta "on aMadir la dire"tivaL
.rror!ocument O1O /errores/O1O.html.var

7.3. ,irecti'as para la *e"ociacin de Contenidos


7eamos las dire"tivas utili+adasL AddLan"ua"e &so"ia una extensi/n "on un determinado idioma <para Multi7ie=s>. Lan"ua"e%riorit$ Estable"e las prioridades de los idiomas por si el navegador no indi"a ninguna pre0eren"ia. /rror,ocu+ent &so"ia un do"umento a un mensaCe de error. 6a1 otras dire"tivas, "omo 5ptions 1 &dd6andler que 1a ,abEamos visto en "apEtulos anteriores.

3#

Manual de Supervivencia del Administrador de Apache

Captulo 8. ?ndices
En o"asiones puede resultar imposible mantener a"tuali+ada la p9gina de Endi"e de un dire"torio. 2or eCemplo, si se trata de un dire"torio de des"argas en el que varios usuarios pueden subir in0orma"i/n para que otros a""edan a ella. &dem9s, para quA vamos a trabaCar ,a"iendo Endi"es en 6(ML si &pa",e puede ,a"erlos por nosotros. &pa",e dispone de dire"tivas no solo para reali+ar Endi"es mu1 potentes, sino tambiAn para personali+arlos aMadiendo o quitando op"iones. 7eamos "omo "on0igurarlosL
:@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/curso/aym" :!irectory /var/'''/curso/aym/"ormularios; #.stablecemos ndices bonitos para este directorio Inde(Option& Fanc!Inde(ing #$Madimos una descripci#n para algunos recursos 9dd e&cription "For2u)ario de Contacto" contacto.ht2) #?acemos que algunos elementos no apare&can en el ndice Inde(Ignore C.3pg Inde(Ignore .. :/!irectory; :/@irtual?ost;

8.1. ,irecti'as para la Con!i"uracin de ?ndices


6a1 mu",as dire"tivas que nos permitir9n "on0igurar los Endi"es. &quE ,a1 algunasL Inde03ptions Estable"e las op"iones para los Endi"es. 2ueden ser, entre otrasL 4es"riptionFidt,, Dan"1.ndexing, DoldersDirst, ."ons&reLinIs, ."on6eig,t, ."onFidt,, .gnore ase, )"an6(ML(itles ... Inde0I"nore Estable"e que 0i",eros no apare"er9n en el Endi"e. Add,escription &Made una des"rip"i/n para uno o varios 0i",eros del Endi"e. AddIcon &so"ia un i"ono a un 0i",ero o tipo de 0i",eros

3%

Manual de Supervivencia del Administrador de Apache

Captulo @. Redirecciones
En o"asiones es ne"esario mover las "osas de sitio. 6a1 que mover dire"torios de un sitio a otro, trasladar 0i",eros ... 1 queremos que nuestros "lientes sigan a""ediendo "omo lo ,a"Ean antes. 2ara "onseguirlo tenemos tres me"anismosL

@.1. Redirecciones con Alias


&lias nos permite dar a""eso a re"ursos que no est9n en la dire""i/n indi"ada por la dire"tiva 4o"ument$oot. 2or eCemplo,
:@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" #!amos acceso a un directorio que N5 est, en !ocument%oot 9)ia& /4iene&tar&ocia) /#ar/$$$/4& #3ambiQn podemos crear accesos a directorios de !ocument%oot 9)ia& /pro!, /#ar/$$$/a!2/de&arro))o/pro!,/te&t :/@irtual?ost;

@.2. Redirecciones con Redirect


$edire"t aso"ia una *$L antigua "on una nueva. La nueva *$L es noti0i"ada al "liente para que reali"e la "onexi/n "on ella. 2or eCemploL
:@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/curso/aym" #%edireccionamos a los clientes a la nueva 'eb 7edirect /pac http0//$$$.agra)ia.e& :/@irtual?ost;

@.3. Re<rite
(odo lo anterior, 1 mu",o m9s, podemos ,a"erlo "on $e=rite. $e=rite es un m/dulo mu1 extenso 1 "ompleto que, b9si"amente, apli"a un patr/n a una *$L 1 reali+a sustitu"iones en ella. 2or eCemploL

Miguel Jaque Barbero (mjaque@ilkebenson.com

!'

#4argamos el m#dulo que necesitamos 2nclude /etc/apache2/mods-available/re'rite.load Name@irtual?ost BC2.BD0.1.LB :@irtual?ost aym.juntae .es; ServerName "aym.juntae .es" !ocument%oot "/var/'''/curso/aym" #$ctivamos el motor de re'rite %e'rite.ngine on #.stablecemos el "ichero de log %e'rite/og /tmp/logAre'rite #.stablecemos el nivel de log %e'rite/og/evel C #/a direcci#n aym.juntae .es/in"o/ la redirigimos a agralia %e'rite%ule I/in"o/N httpF//'''.agralia.es :/@irtual?ost;

2ero ,a1 reglas de re=rite mu",o m9s "ompli"adas 1 Ntiles. 2or eCemplo, imaginemos que tenemos una p9gina =eb "u1o "ontenido depende de un par9metro <tEpi"o de p9ginas 262, 2erl, et".>. El problema es que ni a los seres ,umano ni tampo"o a los bus"adores les gusta re"ordar una *$L del tipo ,ttpL//a1m.Cuntaex.es/prog.p,p;op"ionZ1. 2re0erimos las *$L) dire"tas. :@uA podemos ,a"er; 2odemos rees"ribir las peti"iones que nos lleguen a una dire""i/n R09"ilS. 2or eCemplo, si la op"i/n 1 nos da in0orma"i/n de la 2& 1 la op"i/n 2 nos da in0orma"i/n del (aba"o, podemos "rear dos dire""iones R0i"ti"iasS que sean ,ttpL//a1m.Cuntaex.es/pa"/ 1 ,ttpL//a1m.Cuntaex.es/taba"o/ 1 poner en el 0i",ero de "on0igura"i/n la siguientes dire"tivasL
%e'rite%ule I/pac/N prog.php[opcionWB H/J %e'rite%ule I/tabaco/N prog.php[opcionW2 H/J

DECate en la op"i/n [L\ al 0inal. .ndi"a al pro"eso que es una regla 0inal. )i se apli"a, no se seguir9n apli"ando m9s reglas. Las reglas de re=rite se eCe"utan en "as"ada. La *$L de entrada para la segunda regla es la salida de la primera. Esto nos permite utili+ar reglas en"adenadas. Las op"iones son "asi ilimitadasL podemos pasar partes de la *$L "omo par9metros, podemos estable"er "ondi"iones, "adenas de reglas... ualquier problema de redire""i/n, por "ompli"ado que sea, puede resolverse "on este m/dulo.

!&

Manual de Supervivencia del Administrador de Apache

@.4. ,irecti'as para la Con!i"uracin de Redirecciones


6emos utili+ado las siguientes dire"tivasL Alias &so"ia *$Ls "on 0i",eros del sistema. Redirect EnvEa una redire""i/n externa indi"9ndole al "liente que "argue otra *$L. Re<rite/n"ine &"tiva/4esa"tiva el motor de re=rite. Re<riteLo" Estable"e el 0i",ero de log para el motor de re=rite. Re<riteLo"Le'el Estable"e el nivel de depura"i/n para el motor de re=rite. Re<riteRule Estable"e una regla para el motor de re=rite.

!3

Manual de Supervivencia del Administrador de Apache

Captulo A. Contenidos ,in)+icos con C.I


iertamente, ,o1 no podemos limitar nuestro =eb a los "ontenidos est9ti"os de 6(ML. 8e"esitamos "one"tar "on bases de datos, o0re"er "ontenidos personali+ados a "ada usuario, generar in0ormes al momento, vender, tramitar... 2ara todo esto ne"esitamos que nuestro servidor =eb genere los "ontenidos din9mi"amente. G, a0ortunadamente, existen mu",as te"nologEas que nos 0a"ilitan la vida.

A.1. 9BuC es C.I:


B. son las siglas de Common -ate;a4 Inter:ace. )e trata de una de las ,erramientas m9s antiguas para generar "ontenidos din9mi"os en el =eb. B. propor"iona un inter0a+ entre el servidor =eb 1 las apli"a"iones que generar9n din9mi"amente los "ontenidos. )e trata de un inter0a+ antiguo 1 mu1 "ono"ido, pero algo ine0i"iente. 4e todas 0ormas, mere"e la pena que le e",emos un vista+o.

A.2. /De+plo de C.I


& travAs de B. podemos eCe"utar "ualquier programa del sistema operativo del servidor <"on0igurando los permisos ade"uadamente>. )er9 el programa llamado quien se en"argar9 de generar el 6(ML <o lo que queramos> que el servidor =eb entregar9 al "liente. 2ara nuestro eCemplo, vamos a "rear un s"ript de bas, mu1 sen"illitoL
#S/bin/bash echo "4ontent-3ypeF te t/plain" echo echo "?ola Gundo. Soy un 4-2"

X uidadoY En un "gi todo es importante. 6a1 que espe"i0i"ar la "abe"era, ,a1 que deCar una lEnea en blan"o despuAs de las "abe"eras... (ambiAn tenemos que ,a"er el s"ript eCe"utable para el usuario de &pa",e. 2ara ello, "rearemos un dire"torio "d "gi en /usr/"ursoapa",e/"giQbin. En Al guardaremos el s"ript anterior 1 le ,aremos eCe"utable. Bastar9 "on eCe"utar el "omandoL
#; chmod = /usr/cursoapache/cgi-bin/ejemplo.cgi

Es importante deCar los "gis en un dire"torio que no pertene+"a al 9rbol de do"umentos de &pa",e <4o"ument$oot>. 4e esta 0orma evitamos que, por error, alguien pueda a""eder al "/digo 1 aprove",ar las debilidades de nuestros programas.

Miguel Jaque Barbero (mjaque@ilkebenson.com

!!

8os resta de"irle a &pa",e que tiene que eCe"utar los programas de ese dire"torio "omo si 0ueran "gis <que es lo que son>. 2ara ello, reali+amos el siguiente 0i",ero de "on0igura"i/nL
#(ichero de 4on"iguraci#n para 4-2s ServerName "localhost" Server%oot "/etc/apache2" *id(ile /var/run/apache2.pid 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain +ser '''-data -roup '''-data .rror/og /tmp/apacheA.%%5%.log 3rans"er/og /tmp/apacheA$44.SS.log !ocument%oot "/var/'''" /isten 01 !irectory2nde inde .html inde .html # 2ncluimos el m#dulo que necesitamos para ejecutar 4-2s Inc)ude "/etc/apache2/2od&'a#ai)a4)e/cgi.)oad" # .stablecemos el directorio que contendr, programas 4-2 Script9)ia& /cgi'4in/ /u&r/cur&oapache/cgi'4in/

&,ora, si vamos a ,ttpL//lo"al,ost/"giQbin/eCemplo."gi, podremos ver nuestro programa 0un"ionando.

!"

Manual de Supervivencia del Administrador de Apache

A.3. Con!i"uracin de C.Is para Usuarios


La "on0igura"i/n anterior se apli"a a todo el servidor =eb. En o"asiones, en mu1 po"as o"asiones, ne"esitaremos "on0igurar el servidor de modo que nuestros usuarios puedan subir 1 eCe"utar programas B.. XEsto es un enorme problema de seguridadY &sE que, lo meCor es no ,a"erlo. 2ero, si no tienes m9s remedio, si "on0Eas en tus usuarios, en que no "ometer9n errores en sus programas, en que ser9n "uidadosos "on su uso... enton"es puedes "on0igurar el servidor de la siguiente 0ormaL
#(ichero de 4on"iguraci#n para 4-2s 22 ServerName "localhost" Server%oot "/etc/apache2" *id(ile /var/run/apache2.pid 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain +ser '''-data -roup '''-data .rror/og /tmp/apacheA.%%5%.log 3rans"er/og /tmp/apacheA$44.SS.log /isten 01 !irectory2nde inde .html inde .html

2nclude "/etc/apache2/mods-available/cgi.load" !ocument%oot "/var/'''" :@irtual?ost BC2.BD0.1.LB; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" #*ermitimos ejecutar 4-2s en esta locali&aci#n <Location /cgi % 9dd*and)er cgi'&cript cgi Option& AE(ecC=I </Location% :/@irtual?ost;

on esta "on0igura"i/n, el administrador del dominio virtual puede "rear sus propios B.s e instalarlos en su dire"torio /"gi <que "orreponde "on /var/===/a1m/"gi si no se utili+a ningNn &lias>. 2ero, antes de ,a"erlo... :Est9s seguro de que quieres ,a"er algo asE; :8o ,a1 otra alternativa;

Miguel Jaque Barbero (mjaque@ilkebenson.com

!)

A.4. ,irecti'as para la Con!i"uracin de C.I


6emos utili+ado las siguientes dire"tivasL ScriptAlias &so"ia una lo"ali+a"i/n "on un dire"torio del sistema de 0i",eros 1 estable"e su "ontenido "omo B.s. 3ptions E/0ecC.I 2ermite la eCe"u"i/n de B.s para el dire"torio.

!#

Manual de Supervivencia del Administrador de Apache

Captulo 1F. Ser'er Side Includes


8aturalmente ,a1 otras op"iones para generar "ontenidos din9mi"os. *na de las menos peligrosas, 1 tambiAn de las menos potentes, es utili+ar )). <)erver )ide .n"ludes>. Mediante esta te"nologEa, &pa",e parsea los do"umentos 6(ML antes de envi9rselos al "liente. En este parseo, dete"ta unas mar"as espe"iales 1 las sustitu1e por los valores que "orrespondan. 4e esta 0orma, la p9gina 0inal me+"la su "ontenido est9ti"o "on algunos "ampos variables. Estos pueden serL

7alores de 7ariables. )alidas de omandos. (amaMo de un Di",ero. De",a de ]ltima Modi0i"a"i/n de un Di",ero.

(ambiAn es posible mediante )). in"luir unos 0i",eros en otros. )intaxis de )). Las dire"tivas de ))., esas que luego ser9n rees"ritas, tiene la sintaxis de un "omentario de 6(ML. Es de"ir
:S--#nombre de la directiva parmetros --;

2or eCemplo, la siguiente dire"tiva se tradu"ir9 en la 0e",a de modi0i"a"i/n del 0i",ero indi"ado
:S--#"lastmod virtualWX "ichero.htmlX--;

4onde 0lastmod es el nombre de la dire"tiva, virtual es el nombre del par9metro 1 R0i",ero.,tmlS su valor. La extensi/n de los 0i",eros )). suele ser .s,tml

Miguel Jaque Barbero (mjaque@ilkebenson.com

!$

1F.1. /De+plo de SSI


7amos a es"ribir un pequeMo eCemplo de )).L
:S--#con"ig errmsgW" .rror de SS2 "--; :S--#con"ig si&e"mtW"bytes"--; .l tamaMo de este "ichero es :S--#"si&e "ileW"ssi.shtml"--;bytes.

2ara poder eCe"utarlo, estable"emos este 0i",ero de "on0igura"i/n de &pa",eL


#(ichero de 4on"iguraci#n para SS2 ServerName "localhost" Server%oot "/etc/apache2" *id(ile /var/run/apache2.pid 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain +ser '''-data -roup '''-data .rror/og /tmp/apacheA.%%5%.log 3rans"er/og /tmp/apacheA$44.SS.log /isten 01 !irectory2nde inde .html inde .html

!ocument%oot "/var/'''" #2ncluimos el m#dulo que necesitamos Inc)ude "/etc/apache2/2od&'a#ai)a4)e/inc)ude.)oad" #$sociamos la e tensi#n shtml al manejador de SS2 9dd*and)er &er#er'par&ed &ht2) #.stablecemos que se pueden ejecutar en todos los directorios #8por de"ecto suele estar deshabilitado9 Option& AInc)ude&

&,ora, si reini"iamos &pa",e 1 pedimos ,ttpL//lo"al,ost/ssi.s,tml podremos ver la salida parseada.

!%

Manual de Supervivencia del Administrador de Apache

1F.2. /De+plo A'anzado de SSI


)). tiene mu",o m9s. 8os permite in"luir 0i",eros, de0inir variables e in"luso utili+ar estru"turas de "ontrol "omo i0, t,en, else. 7amos a ver un eCemplo en el que utili+amos )). para de0inir un mismo pie para todas las p9ginas de nuestro =ebsite. En primer lugar, "reamos un 0i",ero )). "on la in0orma"i/n que queremos mostrarL
:S-.vitamos que el usuario vea los errores. Ea los veremos en el log--; :S--#con"ig errmsgW":S-- .rror de SS2 --;"--; :S-- 4on"iguramos el "ormato de la "echa seg)n str"mt --; :S--#con"ig time"mtW"\$< \e de \6 de \E a las \?F\GF\S"--; :hr/; :S-- +tili&ando echo podemos ver el contenido de variables--; :p;4opy%ight 2l>e 6enson 211D - :S--#echo varW"!54+G.N3A+%2"--; Godi"icado el :S--#echo varW"/$S3AG5!2(2.!"--;.:/p; :S--#echo varW"!$3.A/54$/"--;

Este 0i",ero lo guardaremos en /usr/"ursoapa",e/ssi "on el nombre pie.s,tml. &,ora lo enla+aremos en el resto de p9ginas de nuestro =ebsite. 2ara ello, "ambiamos nuestro index.,tml por index.s,tmlL
:html; :head;:title;4onsejera de $gricultura y Gedioambiente:/title;:/head; :body; :hB;4onsejera de $gricultura y Gedioambiente:/hB; 6la< bla< bla... :S-- /a directiva include nos permite incluir "icheros--; <D''#inc)ude #irtua)E"/inc)ude/pie.&ht2)"''% :/body; :/html;

Miguel Jaque Barbero (mjaque@ilkebenson.com


2or Nltimo, s/lo nos resta "on0igurar ade"uadamente nuestro servidor &pa",eL
#(ichero de 4on"iguraci#n para SS2 -eneral ServerName "localhost" Server%oot "/etc/apache2" *id(ile /var/run/apache2.pid 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain +ser '''-data -roup '''-data .rror/og /tmp/apacheA.%%5%.log 3rans"er/og /tmp/apacheA$44.SS.log /isten 01 !irectory2nde inde(.&ht2) inde .html inde .html

"'

!ocument%oot "/var/'''" Inc)ude "/etc/apache2/2od&'a#ai)a4)e/inc)ude.)oad" 9dd*and)er &er#er'par&ed &ht2) #4reamos un alias para encontrar los includes 9)ia& /inc)ude /u&r/cur&oapache/&&i :@irtual?ost BC2.BD0.1.LB; ServerName "aym.juntae .es" !ocument%oot "/var/'''/aym" :/@irtual?ost;

)i a,ora vamos "on nuestro navegador a ,ttpL//a1m.Cuntaex.es/ veremos el pie que ,emos "reado.

"&

Manual de Supervivencia del Administrador de Apache

Captulo 11. Lo""in"


Los 0i",eros de log son un instrumento "rEti"o para la seguridad de nuestro servidor. En este "apEtulo veremos "/mo "on0igurarlos para que &pa",e guarde la in0orma"i/n que ne"esitamos, tanto para meCorar su rendimiento "omo para resolver problemas a los usuarios, "ono"er a quA se""iones a""eden m9s, intentos de a""eso no autori+ados, et". 2ero no basta "on "on0igurar "orre"tamente los logs para que guarden la in0orma"i/n que queremos. (ambiAn tenemos que "onsultarla peri/di"amente. )ino, "ualquier in0orma"i/n que pudiAramos registrar ser9 inNtil. Existen mu",os programas que te pueden a1udar a inspe""ionar 1 gestionar los logs de &pa",e. 2uedes en"ontrarlos en los paquetes apa",e2Qutils, s"anerrlog, visitors, vlogger, =ebdruid...

11.1. -ic eros de Lo"


&unque 1a los ,emos utili+ado, vamos a men"ionarlos explE"itamente. &pa",e utili+a dos 0i",eros de logL

Arror/o) ^ 2ara registrar los errores que se produ"en al a""eder a los re"ursos de &pa",e. >rans:er/o) ^ 2ara registrar los a""esos que no produ"en error.

11.1.1. #rror$og
El "ontenido de ErrorLog es algo pare"ido a estoL
H3ue Nov 2B BBF21FBO 211DJ HnoticeJ caught S2-3.%G< shutting do'n H3ue Nov 2B BBF21FBL 211DJ HnoticeJ $pache/2.1.LL 8!ebian9 con"igured -- resuming normal operations H3ue Nov 2B BBF21FB0 211DJ HerrorJ Hclient B2].1.1.BJ un>no'n directive ""s&eW"ssi.shtml"" in parsed doc /var/'''/ssi.shtml H3ue Nov 2B B2FB2F^D 211DJ HerrorJ Hclient BC2.BD0.1.LBJ (ile does not e istF /var/'''/curso/aym/noAe isto

En Al podemos ver los mensaCes de "ierre de &pa",e, de reini"io, errores de dire"tivas ))., p9ginas no en"ontradas, et".

11.1.2. %ransfer$og
El "ontenido de (rans0erLog ser9 pare"ido a estoL
BC2.BD0.1.LB - - H2B/Nov/211DFB1F22F^2 =1B11J "-.3 /cgi/aym.cgi ?33*/B.B" 211 LB B2].1.1.B - - H2B/Nov/211DFBBF1]F^1 =1B11J "-.3 /ssi.shtml ?33*/B.B" 211 B^1 BC2.BD0.1.LB - - H2B/Nov/211DFBBFO^F21 =1B11J "-.3 /inde .shtml ?33*/B.B" 211 ^O0 BC2.BD0.1.LB - - H2B/Nov/211DFB2FB2F^D =1B11J "-.3 /noAe isto ?33*/B.B" O1O 21]

Miguel Jaque Barbero (mjaque@ilkebenson.com

"(

En Al podemos ver desde quA dire""i/n se ,a a""edido a nuestro servidor, en que momento, quA peti"i/n se re"ibi/, resultado, et".

11.2. ,irecti'as para la Con!i"uracin de Lo"s


2odemos utili+ar las siguientes dire"tivas para la "on0igura"i/n de los 0i",eros de logL /rrorLo" Estable"e el 0i",ero que para el log de errores. 5p"ionalmente puede ser un programa que, por eCemplo, registre los errores en una base de datos. Lo"Le'el Estable"e el nivel de detalle para el log de errores. Los valores posibles sonL emerg, alert, "rit, error, =arn, noti"e, in0o 1 debug. Trans!erLo" Estable"e el 0i",ero que para el log de a""esos. 5p"ionalmente puede ser un programa que, por eCemplo, registre los a""esos en una base de datos. Lo"-or+at 4e0ine un 0ormato de log para el log de a""esos o para un log personali+ado. Custo+Lo" Estable"e el 0i",ero 1 el 0ormato para un log personali+ado.

"3

Manual de Supervivencia del Administrador de Apache

Captulo 12. %4%


7ale, ,a1 mu",as 0ormas de generar "ontenidos din9mi"os en un servidor =eb. 2ero la que ,o1 en dEa se lleva la palma es 262. 262 es un lenguaCe de s"ript, "on orienta"i/n a obCetos <espe"ialmente desde la versi/n 3>, "on gran "antidad de librerEas 0un"ionales <"onexi/n "on bases de datos, tratamientos de PML, 0un"iones matem9ti"as, genera"i/n de 24Ds...> 1 una dilatada "arrera "omo lenguaCe de programa"i/n para apli"a"iones =eb. &sE que, no podemos pasarlo por alto.

12.1. Instalacin $ Con!i"uracin


2ara poder eCe"utar programas 262 en tu servidor &pa",e primero debemos "on0igurarlo "orre"tamente. 8e"esitamos un paquete 4ebian que instalaremos "on el siguiente "omandoL
#; apt-get install libapach2-mod-phpL

Este "omando instalar9 en nuestro ordenador, entre otros, los 0i",eros /et"/apa",e2/modsQ available/p,p3.load 1 /et"/apa",e2/modsQavailable/p,p3."on0. onviene e",ar un vista+o a su "ontenido para entender su 0un"ionamiento. Estos son ambos 0i",eros "omentadosL
#4ontenido de phpL.load #4argamos el m#dulo que interpretar, los "icheros php /oadGodule phpLAmodule /usr/lib/apache2/modules/libphpL.so #4ontenido de phpL.con" #Si el m#dulo est, cargado... :2"Godule modAphpL.c; #$sociamos las e tensiones con el tipo Gime de php $dd3ype application/ -httpd-php .php .phtml .php^ $dd3ype application/ -httpd-php-source .phps :/2"Godule;

omo ves, no son 0i",eros "ompli"ados, asE que puedes in"luirlos en "ualquier otra "on0igura"i/n que tengas para tu servidor.

Miguel Jaque Barbero (mjaque@ilkebenson.com

"!

12.2. Co+probando #ue -unciona


7amos a,ora a "rear una sen"illa p9gina p,p para "omprobar que todo 0un"iona. Este es el "/digoL
:[php [;

echo _?ola GundoXV

)alvemos a,ora la p9gina "omo ,olamundo.p,p <dentro de nuestro 9rbol 4o"ument$oot> 1, tras reini"iar &pa",e, podremos a""eder "on nuestro navegador a esa dire""i/n. La p9gina nos mostrar9 el mensaCe R6ola MundoS. DECate que, si tienes algNn error en la "on0igura"i/n, &pa",e no sabr9 quA ,a"er "on el 0i",ero de extensi/n 262. )i tienes el 4e0ault(1pe a text/plain, ver9s en tu navegador el "/digo de 262. )i lo tienes a text/,tml, no ver9s nada <salvo que mires el "/digo 0uente de la p9gina>, las mar"as de 262 son ignoradas por el navegador "uando se interpretan "omo 262. 8aturalmente no podemos meter en este Manual de )uperviven"ia todo un "urso de 262. 2uedes en"ontrar toda la in0orma"i/n que ne"esitas sobre 262 en ===.p,p.net. 2ero si podemos aprove",ar la o"asi/n para aprender un po"o.

12.3. %racticando con %4%


7amos a preparar un eCemplo m9s "ompli"ado. 6agamos el tEpi"o eCer"i"io de presentar en la pantalla los nNmeros primos que ,a1 entre el 1 1 el 100. En este eCer"i"io ne"esitaremos utili+ar estru"turas de "ontrol <bu"les 0or e i0 t,en> 1 utili+aremos 0un"iones que guardaremos en un 0i",ero externo. Este es el "/digo de primos.p,p
:[php requireAonce8"/var/'''/lib.php"9V Nhtml W ""V Nhtml .W ":html;:body;"V Nhtml .W ":hB;4alculando N`uacuteVmeros *rimos:/hB;"V "or 8NiWBV Ni:B11V Ni==9a i"8esAprimo8Ni99 Nhtml .W Ni."< "V b Nhtml .W ":/body;:/html;"V echo NhtmlV

[;

""

Manual de Supervivencia del Administrador de Apache


omo ves, este programa "arga un 0i",ero "on otras 0un"iones auxiliares. En este "aso, el 0i",ero lib.p,p "ontiene la 0un"i/n esOprimo<>. DECate que la instru""i/n requireOon"e garanti+a que el 0i",ero se "arga s/lo una ve+, aunque sea llamado en varios sitios <por eCemplo, porque in"luimos 0i",eros que in"lu1en 0i",eros que in"lu1en 0i",eros...> El "/digo de lib.p,p es el siguienteL
:[php

"unction esAprimo8Nnum9a "or 8NiW2V Ni:NnumV Ni==9 i" 8Nnum \ Ni WW 19 return "alseV return trueV b

[;

12.4. >aneDo de -or+ularios


2ero el uso m9s ,abitual de 262 es para "rear apli"a"iones =eb. En ellas, ne"esitamos que el usuario nos envEe in0orma"i/n, pro"esarla 1 devolverle un resultado. 7amos a ver, "on el siguiente eCemplo de login, "omo nos llegan las variables de usuario a p,p 1 "omo las leemos. En primer lugar, el usuario introdu"e los valores que nos quiere enviar en un 0ormulario 6(ML que nos envEa al programa 262 <espe"i0i"9ndolo en el atributo a"tion del elemento 0orm>. Este es el "/digoL
:html; :head; :title;/ogin del .jercicio de *?*:/title; :/head; :body; :"orm actionE")ogin.php" methodW"*5S3"; NombreF :input na2eE"no24re" typeW"te t"/;:br/; 4laveF :input na2eE"c)a#e" typeW"pass'ord"/;:br/; :input typeW"submit" valueW"$ceptar"/; :/"orm; :/body; :/html;

DECate en los nombres que damos a los "amposK nos servir9n para a""eder a las variables al re"ibir el 0ormulario. Esto lo ,a"emos en el 0i",ero login.p,p
:[php Nhtml Nhtml Nhtml Nhtml [; W _:html;:body;XV .W Z?as hecho login:br/;ZV .W ".l nombre es ". F57EG6ES:HIno24reIJ .":br/;"V .W "/a clave es ". F57EG6ES:HIc)a#eIJ .":br/;"V

echo NhtmlV

Miguel Jaque Barbero (mjaque@ilkebenson.com

")

omo ves, la in0orma"i/n que nos envEa el usuario se re"ibe en un arra1 indexado <un arra1 que, en lugar de utili+ar un Endi"e numAri"o, utili+a nombres>. El arra1 indexado es _O$E@*E)(. )alva ambos 0i",eros en el mismo dire"torio 1 "omprueba su 0un"ionamiento.

12.&. /'itando el Caos


&l programar en 262 podemos en"ontrarnos 09"ilmente metidos en un buen lEo. )i no somos "uidadosos, nos en"ontraremos "on 0un"ionalidad distribuida entre varios 0i",eros <"omo en el "aso anterior>, "/digo de distintos lenguaCes en un mismo 0i",ero, et". 7amos a simpli0i"ar nuestro eCemplo anterior. 2ara ello, in"luiremos el "/digo del 0ormulario en el mismo 0i",ero que el "/digo de la respuesta al 0ormulario.
:[php

poner5ca4ecera()K if (Di&&et(F57EG6ES:HIno24reIJ))L Nhtml W Z:"orm actionW"login.php" methodW"*5S3";ZV Nhtml .W ZNombreF :input nameW"nombre" typeW"te t"/;:br/;ZV Nhtml .W Z4laveF :input nameW"clave" typeW"pass'ord"/;:br/;ZV Nhtml .W Z:input typeW"submit" valueW"$ceptar"/;ZV Nhtml .W Z:/"orm;ZV M e)&eL Nhtml W Z?as hecho cZlogincZ`aposV:br/;ZV Nhtml .W ".l nombre es ".NA%.7+.S3HZnombreZJ.":br/;"V Nhtml .W "/a clave es ".NA%.7+.S3HZclaveZJ.":br/;"V M echo NhtmlV poner5pie()K "unction ponerAcabecera89a echo ":html;:body;"V b "unction ponerApie89a echo ":/body;:/html;"V b

[;

En este eCemplo, ,emos "reado dos 0un"iones para poner el pie 1 la "abe"era de las p9ginas. 8ormalmente estas 0un"iones estar9n en un 0i",ero externo <que "argaremos "on in"lude o requireOon"e> 1 ser9n "ompartidas por otras p9ginas. &dem9s, el programa tiene dos partes "orrespondientes a la estru"tura i0 t,en. En la primera, se muestra el 0ormulario de login. En la segunda, se muestra la respuesta al 0ormulario. 4e"idimos si eCe"utar una u otra en 0un"i/n de que exista <isset> la variable _O$E@*E)(.

"#

Manual de Supervivencia del Administrador de Apache

Captulo 13. Aplicaciones Geb con LA>%


L&M2 son las siglas de LinuxQ&pa",eQM1)@LQ262 1 es, sin duda, la arquite"tura m9s utili+ada ,o1 para la programa"i/n de apli"a"iones =eb. Ga ,emos visto "omo 0un"ionan "onCuntamente Linux, &pa",e 1 262. &sE que s/lo nos queda ver "/mo integramos la Base de 4atos 1 a""edemos a ella.

13.1. Instalacin $ Con!i"uracin de >$SBL


6ablamos de 4ebian, asE que la instala"i/n de M1)@L tendr9 que ser 09"il. En "on"reto, tenemos que instalar dos paquetes. El primero es el propio servidor M1)@L, 1 el segundo es la librerEa de 0un"iones de 262 para a""eder a M1)@L. El "omando para ,a"er todo esto <en menos de 3 segundos> es el siguienteL
#; apt-get install mysql-server phpL-mysql

8o ne"esitamos ninguna "on0igura"i/n parti"ular, asE que vamos a "rear un nueva base de datos llamada R"ursoS "on un usuario para a""eder a ella 1 una tabla "on algunas "olumnas. 2ara ello, es"ribimos el siguiente 0i",ero )@LL
!%5* !$3$6$S. 2( .P2S3S cursoV 4%.$3. !$3$6$S. cursoV -%$N3 S./.43< 2NS.%3< +*!$3.< !./.3. 5N curso.K 35 curso 2!.N32(2.! 6E "claveAcurso"V +S. cursoV !%5* 3$6/. 2( .P2S3S usuarioV 4%.$3. 3$6/. usuario 8 id 2N3 $+35A2N4%.G.N3< usuario @$%4?$%8219 +N27+.< clave @$%4?$%8B119< categoria @$%4?$%8L19< correo @$%4?$%8B119< *%2G$%E d.E8id9 9V

Buardamos el 0i",ero "omo "urso.sql 1 lo eCe"utamos "on el siguiente "omandoL


N; mysql -u root : curso.sql

(endremos "reada nuestra base de datos. 4e nuevo, no estamos en un "urso de M1)@L. &sE que tendr9s que "onsultar la do"umenta"i/n en ===.m1sql."om si ne"esitas a"tuali+ar tu )@L.

Miguel Jaque Barbero (mjaque@ilkebenson.com

"$

13.2. Conectando con la (ase de ,atos


omo primer eCer"i"io, "one"temos nuestro usuario R"ursoS "on la base de datos. 2ara ello, es"ribimos el siguiente programa 262L
:[php

echo "Ge voy a conectar a GyS7/:br/;"V Fcone(ion E 2!&>)5connect(I)oca)ho&tI@ IrootI@ II)K i" 8SNcone ion9 a echo "(all`oacuteV la cone i`oacuteVn a la base de datos.".2!&>)5error()V e it89V b

[;

En este eCemplo realmente lo que estamos ,a"iendo es R"one"tarS "on el servidor de base de datos. 2ero no basta "on eso, ne"esitamos espe"i0i"ar "u9l de todas las bases de datos del servidor es la que vamos a utili+ar. Eso lo ,a"emos "on la instru""i/nL m1sqlOsele"tOdb<nombreOdb>.

13.3. /Decutando Sentencias SBL


ECe"utar senten"ias sen"illas, "omo .8)E$(, 4ELE(E o *24&(E que no devuelven ningNn resultado, es 09"il. Basta "on "one"tarse "on el servidor de base de datos, sele""ionar la base de datos "on la que queremos operar 1 lan+ar la senten"ia )@L. Este es un eCemploL
:[php mysqlAconnect8ZlocalhostZ<ZcursoZ<ZclaveAcursoZ9V mysqlAselectAdb8ZcursoZ9V Nconsulta W "!./.3. (%5G usuario e?.%. idW".NA%.7+.S3HZidZJV i" 8mysqlAquery8Nconsulta99 echo "Se borr`oacuteV el registro"V else echo "(all`oacuteV el borrado.:br/;".mysqlAerror89V

[;

"%

Manual de Supervivencia del Administrador de Apache

13.4. Insertando ,atos


7amos a utili+ar lo que 1a sabemos de 262 para ,a"er un 0ormulario que inserte datos en la tabla de la base de datosL
:[php ponerAcabecera89V i" 8Sisset8NA%.7+.S3HZusuarioZJ99a Nhtml W Z:"orm actionW"insertar.php" methodW"*5S3";ZV Nhtml .W Z2dF :input nameW"id" typeW"te t"/;:br/;ZV Nhtml .W Z+suarioF :input nameW"usuario" typeW"te t"/;:br/;ZV Nhtml .W Z4laveF :input nameW"clave" typeW"pass'ord"/;:br/;ZV Nhtml .W Z%epita la 4laveF :input nameW"clave2" typeW"pass'ord"/;:br/;ZV Nhtml .W ZNombre 4ompletoF :input nameW"nombre" typeW"te t"/;:br/;ZV Nhtml .W Z:input typeW"submit" valueW"2nsertar"/;ZV Nhtml .W Z:/"orm;ZV b elsea Ncone ion W mysqlAconnect8ZlocalhostZ< ZrootZ< ZZ9V i" 8SNcone ion9a echo "Se "astidi`oacuteV"V e it89V b 2!&>)5&e)ect5d4(Ite&tI)K Nconsulta W Z2NS.%3 2N35 usuario ZV Nconsulta .W ZS.3 idWZ.NA%.7+.S3HZidZJ.Z<ZV Nconsulta .W Z usuarioW"Z.NA%.7+.S3HZusuarioZJ.Z"<ZV Nconsulta .W Z claveW*$SSe5%!8"Z.NA%.7+.S3HZclaveZJ.Z"9<ZV Nconsulta .W Z nombreW"Z.NA%.7+.S3HZnombreZJ.Z"ZV if(D2!&>)5>uer!(Fcon&u)ta))L echo "/a consulta ha "alladoF ".mysqlAerror89V e it89V b else Nhtml W ".l registro se insert`oacuteV con `eacuteV ito"V b echo NhtmlV ponerApie89V "unction ponerAcabecera89a echo ":html;:body;"V b "unction ponerApie89a echo ":/body;:/html;"V b

[;

La instru""i/n m1sqlOquer1 eCe"uta la "onsulta )@L. 2ara senten"ias .8)E$(, *24&(E o 4ELE(E es 09"il. 2ero la "osa se "ompli"a "uando tenemos que eCe"utar una senten"ia )ELE ( 1 re"orrer el "onCunto de resultados que generan.

Miguel Jaque Barbero (mjaque@ilkebenson.com

)'

13.&. Consultas de S/L/CT


7eamos un eCemplo m9s "ompletoL
:[php ponerAcabecera89V Ncone ion W mysqlAconnect8ZlocalhostZ< ZrootZ< ZZ9V i" 8SNcone ion9a echo "Se "astidifg"V e it89V b mysqlAselectAdb8ZtestZ9V Nconsulta W ZS./.43 K (%5G usuarioZV Nresultado W 2!&>)5>uer!(Fcon&u)ta)K i"8SNresultado9a echo "/a consulta ha "alladoF ".mysqlAerror89V e it89V b Nhtml W Z:table borderW"B";ZV 'hile8N"ila W 2!&>)5fetch5arra!(Fre&u)tado) 9a Nhtml .W Z:tr;ZV Nhtml .W Z:td;Z.Ffi)aHIidIJ.Z:/td;ZV Nhtml .W Z:td;Z.Ffi)aHIu&uarioIJ.Z:/td;ZV Nhtml .W Z:td;Z.Ffi)aHIc)a#eIJ.Z:/td;ZV Nhtml .W Z:td;Z.Ffi)aHIno24reIJ.Z:/td;ZV Nhtml .W Z:td;ZV Nhtml .W Z:a hre"W"httpF//localhost/borrar.php[idWZ.N"ilaHZidZJV Nhtml .W Z";6orrar +suario:/a;:/td;ZV Nhtml .W Z:/tr;ZV b Nhtml .W ":/table;"V echo NhtmlV ponerApie89V "unction ponerAcabecera89a echo ":html;:body;"V b "unction ponerApie89a echo ":/body;:/html;"V b

[;

)&

Manual de Supervivencia del Administrador de Apache

Captulo 14. Secure SocHets La$er ;SSL=


))L es un proto"olo "riptogr90i"o de "omuni"a"i/n utili+ado para garanti+ar la identidad 1 la priva"idad de las "omuni"a"iones =eb. (A"ni"amente se "orresponde "on la "apa de transporte del Modelo .)5, por eso tambiAn es "ono"ido "omo (L) <(ransport La1er )e"urit1>.

14.1. Co+o -unciona SSL

uando el navegador soli"ita una p9gina ))L al servidor le envEa un mensaCe R lient6elloS "on in0orma"i/n de R,ands,aIeS. En Al 0iguran los algoritmos de "i0rado soportados, la m9xima versi/n de ))L soportada 1 varios nNmeros aleatorios que ser9n utili+ados en la "omuni"a"i/n. El navegador sabe que una p9gina es segura porque su *$L estable"e el proto"olo ,ttps <2.eC. ,ttpsL//"aCabadaCo+.es>. El servidor responde "on un mensaCe R)erver6elloS en el que elige los par9metros de la "omuni"a"i/n entre los o0re"idos por el "liente. &,ora que 1a est9n de a"uerdo, el servidor su "erti0i"ado al navegador, generalmente del tipo P.30-. Existe la posibilidad de que el servidor soli"ite al navegador su propio "erti0i"ado. Esto servirEa para identi0i"ar al "liente. 2ero no es lo ,abitual. En la "omuni"a"i/n ))L, solo est9 identi0i"ado el servidor. 2or Nltimo, ambos nego"ian una "lave se"reta Rmaster se"retS que suele ser una "lave elegida por el navegador 1 en"riptada por Aste "on la "lave pNbli"a del servidor. Esta ser9 la "lave que ambos utili"en en sus "omuni"a"iones.

14.2. Instalacin
La instala"i/n de versiones anteriores a &pa",e 2 eran bastante "ompli"adas. &,ora, "on &pa",e 2 1 espe"ialmente "on 4ebian, la instala"i/n es realmente sen"illa... X8o ,a1 que instalar nadaY &pa",e 2 1a in"lu1e soporte para ))L.

1".2.1. !enerando el Certificado


El Nni"o RproblemillaS es que ne"esitamos un "erti0i"ado para nuestro servidor. 2ara eso, re"urrimos al "omando apa",e2QsslQ"erti0i"ate. &l eCe"utarlo, nos plantear9 algunas preguntas para la in0orma"i/n del "erti0i"ado 1 generar9 dos ar",ivos en el dire"torio /et"/apa",e2/ssl Ga tenemos nuestro "erti0i"ado. Lo que ,emos ,e",o es generando nuestro propio "erti0i"ado de servidor, lo

Miguel Jaque Barbero (mjaque@ilkebenson.com

)(

"ual es "/modo para un "urso "omo este pero di0E"ilmente "reEble si pretendemos utili+arlo en un =eb pNbli"o. )i quieres un "erti0i"ado RserioS puedes a"udir a "ualquier empresa espe"iali+ada <(,a=te, erti)ign, 7eri)ign o la propia D8M(>.

14.3. Con!i"uracin
La "on0igura"i/n es igual que todo lo que ,emos visto anteriormente... salvo para las dire"tivas propias de ))L. 2or "ierto, si vas a utili+ar ))L "on 6osts7irtuales, tendr9s que asignar a "ada ,ost una .2 <"on0igura"i/n de ,osts virtuales por .2 ver %.2>, no puedes ,a"erlo por nombres.

14.4. /De+plo
7eamos un eCemplo de "on0igura"i/nL
#(ichero de 4on"iguraci#n para ?osts @irtuales con SS/ ServerName "sabio" Server%oot "/etc/apache2" *id(ile /var/run/apache2.pid .rror/og /tmp/apache2.log 3ypes4on"ig /etc/mime.types !e"ault3ype te t/plain +ser '''-data -roup '''-data /isten 01 /isten OO^ !irectory2nde inde .html inde .html

#4argamos el m#dulo que necesitamos y su con"iguraci#n Inc)ude /etc/apache2/2od&'a#ai)a4)e/&&).)oad Inc)ude /etc/apache2/2od&'a#ai)a4)e/&&).conf #2ndicamos donde tenemos nuestro certi"icado SSLCertificateFi)e /etc/apache2/&&)/apache.pe2 :@irtual?ost BC2.BD0.1.^; SSLEngine on ServerName "aym.juntae .es" !ocument%oot "/var/'''/curso/aym" .rror/og /tmp/aymA.%%5%.log 3rans"er/og /tmp/aymA$44.SS.log :/ocation /seguro; SSL7e>uireSSL ://ocation; :/@irtual?ost;

)3

Manual de Supervivencia del Administrador de Apache

Captulo 1&. ConseDos para >eDorar la Se"uridad


&pa",e no tiene problemas espe"iales de seguridad. M9s bien todo lo "ontrario. )e trata de un servidor mu1 seguro 1 "on po"os puntos dAbiles <que son r9pidamente "orregidos "uando se dete"tan>. )in embargo, una "on0igura"i/n des"uidada puede poner en riesgo el servidor 1 su "ontenido. G, "omo no todo el mundo est9 espe"iali+ado en seguridad =eb, no viene mal repasar algunos "on"eptos.

1&.1. >antente al ,a
ada dEa se dete"tan nuevos tipos de ataques, problemas de "on0igura"i/n, aguCeros de so0t=are... RLos MalosS est9n siempre al a"e",o 1, desgra"iadamente, siempre ir9n por delante. Es mu1 di0E"il prevenir nuevos tipos de ataque que todavEa no se ,an inventado. Lo que sE debe ,a"er un buen administrador es mantenerse in0ormado de los nuevos problemas de seguridad que se dete"ten. &sE puede valorarlos 1 tomar las medidas que "onsidere oportunas <a ve"es es meCor no ,a"er nada que meternos en una "ompleCa a"tuali+a"i/n para prevenir un ataque po"o probable o es"asamente daMino>. &pa",e dispone de una lista de distribu"i/n para mantener in0ormados a los administradores. 2uedes darte de alta en ,ttpL//,ttpd.apa",e.org/lists.,tml`,ttpQannoun"e.

1&.2. %rote"e los -ic eros de Con!i"uracin


Los 0i",eros de "on0igura"i/n de &pa",e, asE "omo sus subdire"torios, s/lo ne"esita leerlos root. 8o ,a1 porque dar permisos, ni de le"tura, a ningNn otro usuario.

1&.3. 5i"ila los Lo"s


R5Cos que no ven, torta+o que te pegasS :4e quA te sirve tener unos logs magnE0i"os, per0e"tamente "on0igurados si nun"a los "onsultas; 2on los sistemas de an9lisis que te avisen de las situa"iones de los logs 1 bNs"ate un rato para e",arles un vista+o de ve+ en "uando. Lo ideal serEa que te ,i"ieras tus propios programas de an9lisis 1 aMadieras reglas para dete"tar situa"iones de riesgo.

1&.4. /'ita los C.I


)implemente son un gran problema de seguridad. )i realmente los ne"esitas, es meCor que los es"ribas tN mismo o alguien de quien te 0Ees mu",o. G a"tiva la op"i/n suexe" para asegurarte de que se eCe"utan "on los permisos que tN de"idas <los del propietario del 0i",ero>. XX85 L5) B*&$4E) 5M5 $55(YY

Miguel Jaque Barbero (mjaque@ilkebenson.com

)!

1&.&. /'ita SSI


on la dire"tiva exe" "md de )). se puede ,a"er el mismo daMo que "on un &dem9s, los )). pueden suponer una pArdida de rendimiento. B..

2ero si realmente los ne"esitas, puedes a"tivar la op"i/n suexe", 1 al menos evitar9s que se eCe"uten "on los permisos de &pa",e <no se te o"urra guardarlos "on el usuario root>.

1&.7. /'ita los Contenidos ,in)+icos en .eneral


5tros lenguaCes "omo 262, 2erl o ( L se eCe"utar9n "on los permisos de los propietarios de los 0i",eros. Eso signi0i"a que pueden ,a"er mu",as "osas, qui+9s demasiadas. )i no puedes evitar los programas de genera"i/n de "ontenidos en tu servidor, al menos revisa bien "on quA usuario se est9n eCe"utando 1 quA permisos tienen esos usuarios.

1&.8. 5i"ila los /nlaces Si+blicos


Lo meCor es no permitirlos. &sE evitas que un usuario a""eda a "ontenido al que no deberEa a""eder. 2ero si quieres ,abilitarlos, al menos asegNrate de que el destino del enla"e es legal aMadiendo la op"i/n )1mLinIs.05=nerMat",

1&.@. 4az Copias de Se"uridad


2or Nltimo, ten en "uenta que lo m9s valioso de tu servidor probablemente sea la in0orma"i/n que alberga. *n ataque por denega"i/n de servi"io puede deCarnos 0uera de la red unas ,oras, pero no a0e"tar9 a nuestros "ontenidos. )in embargo, un intruso puede daMar o eliminar la in0orma"i/n que albergamos. &segNrate que puedes reponerla.

)"

Manual de Supervivencia del Administrador de Apache

Captulo 17. 3pti+izacin de Rendi+iento


&l igual que o"urre "on la seguridad, &pa",e no tiene problemas de rendimiento. M9s bien al "ontrario. Es "ierto que no es un servidor diseMado para batir re"ords en ban"os de pruebas. 2ero en entornos reales de produ""i/n su rendimiento es m9s que a"eptable. 4e todas 0ormas, si eres un ,istAri"o del rendimiento o tienes una m9quina realmente pequeMa <para la "arga de tu servidor> aquE tienes algunos "onseCosL

17.1. >)s RA>


Lo m9s importante para el rendimiento de un servidor =eb es no s=apear. G eso depende de la "antidad de memoria $&M que tengas disponible. 2ara evitarlo, "ontrola el par9metro Max lients que determina el nNmero m9ximo de pro"esos &pa",e que se eCe"utar9n en la m9quina. Mide "uanto o"upa "ada uno de ellos 1 reparte la memoria $&M disponible. Es "ierto que ,a1 otros 0a"tores que ,a"en el "9l"ulo inexa"to... 6a1 otros pro"esos en el sistema que "onsumir9n $&M al eCe"utarse, pero tambiAn ,a1 memoria "ompartida entre todos los pro"esos de &pa",e. El resto de par9metros son importantes. 2or eCemplo, una buena 2*, una buena tarCeta de $ed, dis"os r9pidos... pero sobretodo, XM9s $&MY uanta m9s $&M tengas, m9s pro"esos de &pa",e <si s=apear> podr9s tener arran"ados para atender a tus "lientes.

17.2. Usa Linu0 2.4 o Superior


&pa",e 0un"iona en otros entornos. 2ero si quieres que "orra, ponle sobre una buena "arretera. Las llamadas al )istema 5perativo que ne"esita &pa",e est9n mu",o m9s optimi+adas si puedes eCe"utarlo sobre Linux 2.6.

17.3. /'ita la Resolucin de ,*Ss In'ersos


ada ve+ que &pa",e tiene que resolver el nombre de m9quina o dominio que "orresponde a una dire""i/n .2, debe ,a"er una llamada a un 48). G eso "onsume mu",o tiempo. &pa",e ne"esita resolver 48)s inversos "uando utili+as 6ost8ameLooI*ps o dire"tivas &llo=, 4en1 basadas en nombres de m9quina o de dominio. .ntenta evitarlas. )i lo "on0iguras por .2 ser9 mu",o m9s r9pido <la dire""i/n .2 viene en el paquete ( 2/.2 del "liente>.

Miguel Jaque Barbero (mjaque@ilkebenson.com

))

17.4. /'ita los /nlaces Si+blicos


)i permites enla"es simb/li"os, "ada ve+ que &pa",e entra en un dire"torio tendr9 que bus"arlos. )i adem9s utili+as )1mLinIs.05=nerMat",, tambiAn tendr9 que "omprobar a quiAn pertene"e el enla"e 1 a quiAn pertene"e el destino del enla"e... Mu",o trabaCo.

17.&. /'ita los -ic eros . taccess


Est9 mu1 bien tener "on0igura"i/n personali+ada por los usuarios. 2ero tiene un "oste. ada ve+ que &pa",e tiene que bus"ar un re"urso, debe "omprobar si en ese dire"torio <1 en todos los anteriores> ,a1 0i",eros de "on0igura"i/n parti"ulares que sean apli"ables... )i la estru"tura de dire"torios es mu1 pro0unda, puede requerir un mont/n de llamadas al sistema. G si en"ima ,a1 0i",eros .,ta""ess, tambiAn tendr9 que abrirlos 1 pro"esarlos. 2or lo tanto, evita la dire"tiva &llo=5verride.

17.7. La *e"ociacin de Contenidos


)E, es "ierto que la nego"ia"i/n de "ontenidos requiere tiempo de pro"eso. 2ero es tan es"aso 1 al mismo tiempo resuelve tantos problemas, que son mu1 raras las o"asiones en que ne"esites evitarla. )i realmente ne"esitas nego"ia"i/n de "ontenidos, &pa",e resuelve la situa"i/n "on el menor "oste de rendimiento posible. Es pre0erible utili+ar (1pe Maps que Multivie=s. pues este Nltimo requiere mirar en todo el dire"torio para ver quA ar",ivos ,a1 mientras que "on (1pe Maps la "on0igura"i/n est9 en un Nni"o 0i",ero.

17.8. /'ita SSI


)i a"tivas )). <)erver )ide .n"ludes> &pa",e tendr9 que parsear todos los 0i",eros sus"eptibles de "ontener ))., lo tengan o no.

17.@. Co+pila Tu Apac e


omo Nltima medida, puedes redu"ir la imagen en memoria de los pro"esos de &pa",e si "ompilas a tu medida el "/digo. ompElalo in"lu1endo Nni"amente los m/dulos que ne"esitas. uanto m9s pequeMo sea el eCe"utable, mas pro"esos podr9s albergar en la $&M del servidor sin ne"esidad de s=apear. G "uantos m9s pro"esos, m9s peti"iones podr9s atender. 2on espe"ial "uidado en elegir la arquite"tura M2M m9s "onveniente para tu servidor. )i, "omo ,emos re"omendado, utili+as Linux 2.6, "ompila tu &pa",e "on soporte para =orIer. &sE obtendr9s los meCores resultados.

)#

Manual de Supervivencia del Administrador de Apache

Captulo 18. (iblio"ra!a


La meCor 0uente de do"umenta"i/n para &pa",e est9 en ===.apa",e.org. &,E en"ontrar9s la re0eren"ia a todas las dire"tivas de "on0igura"i/n, do"umentos sobre ))L, )eguridad, M2M, $endimiento, .nstala"i/n, ompila"i/n... X6asta el "/digoY LQ> (ambiAn ,a1 libros mu1 buenos. Beneralmente es"ritos por alguno de los programadores de &pa",e que parti"ipa en la omunidad. 2uedes "onsultar, por eCemplo, R&pa",e $e0eren"e BuideS de Ben 1 2eter Laurie de la editorial 5a$eill1.

You might also like