Está en la página 1de 67

Manual de Supervivencia del

Administrador de Apache
En gnu/Linux, por supuesto
10 de noviembre de 2006
Autor: Miguel Jaque Barbero
3 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...........................................................................................................2-
3.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......................................................................................................................3-
1#.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 Apace
)in duda &pa",e es uno de los meCores servidores =eb que existen ,o1. 2ara mu",os, el
meCor.
4esde su "rea"i/n
1
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 tet/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 tet/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 eplcitamente9
Option& 'Inde(e&
</irector!%
:!irectory "/var/'''/descargas";
#.n este directorio< permitimos ndices autom,ticos< pero no
#permitimos enlaces simb#licos
5ptions =2ndees -(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 Ron0igura"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 tet/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 tet/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 tet/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 tet/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 tet/plain
.rror/og /tmp/juntaeA.%%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 tet/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*/1D.
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 tet/plain
.rror/og /tmp/juntaeA.%%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 tet/plain
.rror/og /tmp/juntaeA.%%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
9uthige&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/cursoul/digest pac usuB
# htdigest /usr/cursoul/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< 2ndees< /imit<
# 5ptions y None o combinaci#n de ellas $llo'5verride
#$ut4on"ig 2ndees
:/!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
AutT$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.
AutUser-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 3(
Access-ile*a+e
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 etensi#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 tet/plain
.rror/og /tmp/juntaeA.%%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 indeV 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 tet/html
4ontent-languageF es
+%2F inde.en.html
4ontent-typeF tet/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 tet/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 eiste un error en el servidor.
----------es--
4ontent-languageF en
4ontent-typeF tet/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
9dde&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,, .gnorease, )"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 tet/plain"
echo
echo "?ola Gundo. Soy un 4-2"
XuidadoY 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 tet/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 tet/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 tet/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 etensi#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 tet/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. -iceros 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 eistF /var/'''/curso/aym/noAeisto
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 /noAeisto
?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 etensiones 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"tet"/;: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 W _:html;:body;XV
Nhtml .W Z?as hecho login:br/;ZV
Nhtml .W ".l nombre es ".F57EG6ES:HIno24reIJ.":br/;"V
Nhtml .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"tet"/;: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" 8SNconeion9 a
echo "(all`oacuteV la conei`oacuteVn a la base de
datos.".2!&>)5error()V
eit89V
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"tet"/;:br/;ZV
Nhtml .W Z+suarioF :input nameW"usuario" typeW"tet"/;: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"tet"/;:br/;ZV
Nhtml .W Z:input typeW"submit" valueW"2nsertar"/;ZV
Nhtml .W Z:/"orm;ZV
b
elsea
Nconeion W mysqlAconnect8ZlocalhostZ< ZrootZ< ZZ9V
i" 8SNconeion9a
echo "Se "astidi`oacuteV"V
eit89V
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
eit89V
b
else
Nhtml W ".l registro se insert`oacuteV con `eacuteVito"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
Nconeion W mysqlAconnect8ZlocalhostZ< ZrootZ< ZZ9V
i" 8SNconeion9a
echo "Se "astidifg"V
eit89V
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
eit89V
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
Rlient6elloS "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 tet/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 -iceros 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 B..
&dem9s, los )). pueden suponer una pArdida de rendimiento.
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 Maxlients 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 -iceros .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 Apace
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.

También podría gustarte