Professional Documents
Culture Documents
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.....................................................................................#
-.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
"
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.
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
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
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
&'
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.
&&
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.
&(
&3
&!
#(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%
&"
&#
&$
#.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;
&%
#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;
('
#/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;
(&
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%
((
#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
("
()
(#
!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.
($
(%
3'
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>.
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&
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.
33
>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.
&,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".
3!
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"
2ara a"tivar este do"umento de error, nos basta "on aMadir la dire"tivaL
.rror!ocument O1O /errores/O1O.html.var
3#
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;
3%
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
@.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
!'
#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.
!&
!3
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.
!!
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/
!"
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;
!)
!#
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
!$
!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&
!%
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;
"'
!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.
"&
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]
"(
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".
"3
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.
"!
)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.
[;
""
"unction esAprimo8Nnum9a "or 8NiW2V Ni:NnumV Ni==9 i" 8Nnum \ Ni WW 19 return "alseV return trueV b
[;
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
")
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.
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)(.
"#
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
(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.
"$
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>.
[;
"%
[;
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.
)'
[;
)&
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.
)(
"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
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.
)!
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>.
)"
))
)#