PROBLEMA Nº1.- (10 puntos) [Servidor Apache] 1A) Configura APACHE para ofrecer un servicio Web anónimo con secciones Web no anónimas tal como se especifica en el siguiente tabla: (1,5 puntos) Sitio Web Anónimo Puerto 23332 on1 inicio.html serint1.iesx.es Dentro del DocumentRoot deberá existir un directorio de acceso restrigido llamado software. Crea un enlace desde la pagina de inicio a un supuesto programax.zip que unicamente podrá descargarse quien se autentifique correctamente. Autentificación a través de BD tipo DB: Usuarios permitidos: alumno1, alumno2, alumno3. Base de datos de los usuarios: controlacceso/usuarios.bd 1B) Configura APACHE para ofrecer un servicio Web anónimo que incluya etiquetas SSI. Estas etiquetas SSI serán utilizadas para ejecutar los comandos del sistema que nos permitan conocer la versión del sistema operativo que estamos utilizando en el servidor Web (comando uname -a ) y la lista de los últimos 10 (el comando tail -n nos permite ver las últimas n lineas del fichero especificado) usuarios que han sido dados de alta en el servidor (los usuarios del servidor se encuentran registrados en /etc/passwd ): (1,5 puntos) 88 on2 inicial.shtml serint2.iesx.es Sitio Web Anónimo SOLUCIÓN 1B: ServerName serint-ssi.ies.es DocumentRoot on2 DirectoryIndex inicial.shtml <Directory on2> Options +Includes AddType text/html.shtml AddOutputFilter INCLUDES.shtml </Directory> 1
1C) Configura APACHE para ofrecer un servicio Web anónimo con secciones Web no anónimas tal como se especifica en el siguiente tabla: (1,5 puntos) Sitio Web Anónimo Puerto 51222 on3 index.html serint3.iesx.es Dentro del DocumentRoot deberá existir un directorio de scripts CGI llamado codigo al cual se accederá a través del alias scripts. Tan sólo podrán ejecutar los scripts CGI aquellos usuarios que se autentifiquen correctamente. Autentificación a través de fichero plano: Grupos Usuarios permitidos: grupousu1: usu1, usu2, usu3. grupousu2: usu1, usu2, usu3. Fichero plano de usuarios y grupos: controlacceso/usuarios.txt controlacceso/grupos.txt La página de inicio estará formada por un formulario con un input-text a través del cual indicaremos el DNI de un usuario del cual queremos conocer sus datos (nombre, telefono y localidad). Para ello, haremos que el destinatario de los datos del formulario sea un script CGI llamado usuario.pl el cual se encargará de buscar en un fichero plano llamado usuarios.txt los datos requeridos: DNI:Nombre:Teléfono:Curso:Localidad. (2 puntos) 123456789A:Andres Ramirez Gonzalez:635213454:1ESO:Tauste 123123123A:Maria Sarsa Andreu:897463578:2ESO:Gallur 123321123A:Matias Gines Justo:345267891:1ESO:Pradilla 111222333A:Kike Andreu Ramirez:976256712:4ESO:Ejea... En caso de no encontrar ningún usuario con ese DNI deberá salir un mensaje que lo indique. SOLUCIÓN 1C: En primer lugar configuramos apache para dar servicio a un sitio Web que permitirá la ejecución de scripts CGI: 2
ServerName serint.ies.es DocumentRoot on3 ScriptAlias /scripts/ on3/codigo/ A continuación se muestra el contenido de la página de inicio y del script que al ejecutarse mostrará la información de la persona indicada: <html><head><title>ejercicio SCRIPT CGI</title></head> <body bgcolor=pink> <center> <hr> <h5>buscador DE DATOS DE ALUMNOS</h5> <hr> <form name=f1 method=post action='/scripts/usuario.pl'> Indica el DNI del alumno: <input type=text name=nombre size=10> <input type=submit value=comprobar> </form> </body> #!/bin/bash echo "Content-type: text/html" echo "" read DATOS DNI=`echo $DATOS cut -d"&" -f1 cut -d"=" -f2` echo "<html><head><title>script CGI</title></head> \ <body bgcolor=pink><center><hr><h5>datos DEL ALUMNO CON DNI $DNI</h5><hr>" NUMENCUENTROS=`cat usuarios.txt grep "$DNI" wc -l` if [ "$NUMENCUENTROS" -ne "0" ] then NOMBRECOMPLETO=`cat usuarios.txt grep "$DNI" cut -d":" -f2` TELEFONO=`cat usuarios.txt grep "$DNI" cut -d":" -f3` LOCALIDAD=`cat usuarios.txt grep "$DNI" cut -d":" -f5` echo "<table border=1><tr bgcolor=yellow><td>nombre</td><td>telefono</td><td>localidad</td></tr> \ <tr bgcolor=white><td>$nombrecompleto</td><td>$telefono</td><td>$localidad</td></tr> </table>" else echo "No existe ningun usuario con el DNI $DNI" fi echo "</center><a href=../index.html>volver</a></body></html>" 1D) Configura APACHE para ofrecer un servicio Web anónimo en PHP. (3,5 puntos) Puerto 7889 on4 productos.php serint4.iesx.es Sitio Web Anónimo 3
La página de inicio mostrará una tabla con la información almacenada en un fichero llamado productos.txt, con la opción de compra de estos: Id. Producto:Categoria:Descripcion:Precio:Cantidad disponible. (1,5 puntos) hp3650:impresora:impresora Deskject color:65:8 T3464Seagate:HD:Disco Duro Seagate:120:9 logitech325a:raton:raton Optico:13:26... Cada producto dispondrá de un botón de compra, que al ser pulsado, hará que la última columna correspondiente a la cantidad de productos disponibles se decremente en una unidad. Al llegar a cero, ese producto deberá desaparecer de la lista de productos.txt. SOLUCIÓN 1D: En primer lugar configuramos apache para dar servicio a un sitio Web PHP: ServerName serint-php.ies.es DocumentRoot on4 DirectoryIndex productos.php A continuación se mostrará el código de la pagina de inicio ( productos.php ) y de la encargada de decrementar en una unidad el numero del producto seleccionado ( comprar.php ): 4
<html><head><title>ejercicio PHP</title></head> <body bgcolor=pink><center><hr><h5>lista DE PRODUCTOS A LA VENTA</h5><hr> <table><tr bgcolor=yellow> <td>producto</td><td>categoria</td><td>precio</td><td>cantidad</td><td></td> </tr> <? $lineas=file("productos.txt"); foreach ($lineas as $indice => $linea) $trozos=explode(":",$linea,5); echo "<tr bgcolor=white>"; echo "<td>$trozos[0]</td><td>$trozos[1]</td><td>$trozos[3]</td><td>$trozos[4]</td>"; echo "<td><form name=f1 method=post action='comprar.php'>"; echo "<input type=submit name=comprar value=comprar>"; echo "<input type=hidden name=dato1 value=$trozos[0]></form></td>"; echo "</tr>";?> </table></font></center></body></html> <html><head><title>ejercicio PHP</title></head> <body bgcolor=pink><center><hr><h5>confirmacion DE COMPRA</h5><hr> <? if ($_POST['comprar'] == "COMPRAR") $producto=$_post['dato1']; echo "<br>has elegido comprar <font face='arial narrow' color=brown>$producto</font>, va a descontarse del almacen."; $lineas=file("productos.txt"); $cursor=fopen("auxiliar.txt","w"); foreach ($lineas as $indice => $linea) $trozos=explode(":",$linea,5); if ("$trozos[0]" == "$producto") fwrite($cursor,"$trozos[0]:$trozos[1]:$trozos[2]:$trozos[3]:".($trozos[4] - 1)."\n"); else fwrite($cursor,$linea); fclose($cursor); copy("auxiliar.txt","productos.txt");?> <br><br><a href=productos.php>volver</a></font></center></body></html> 5