2014Proyecto Integrado CFGS Administración de Sistemas Informáticos en Red Autor: Francisco José Cruz Jiménez Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 2 Índice Enunciado.......................................................................................................................................................3 Descripción del escenario ...............................................................................................................................3 Descripción máquinas de la red interna ......................................................................................................4 vigila.proyectint.org ........................................................................................................................4 aplica.proyectint.org .......................................................................................................................4 datos.proyectint.org ........................................................................................................................4 Descripción máquinas de la red cliente .......................................................................................................4 clientex.proyectint.org ....................................................................................................................4 Configuración del escenario ............................................................................................................................5 Configuración máquina vigila.proyectint.org ...................................................................................................8 Instalación pfSense .....................................................................................................................................8 Configuración Servidor DNS ......................................................................................................................10 Configuración Servidor VPN ......................................................................................................................11 Configuración Firewall ..............................................................................................................................16 Configuración máquina aplica.proyectint.org ................................................................................................17 Instalación de Webmin .............................................................................................................................18 Instalación y configuración servidor web...................................................................................................19 Instalación y configuración servidor de correo ..........................................................................................23 Instalación y configuración de Nagios .......................................................................................................27 Aplicación web de gestión.........................................................................................................................35 Copias de seguridad automática ...............................................................................................................42 Copias de seguridad manual .....................................................................................................................47 Configuración máquina datos.proyectint.org ................................................................................................48 Instalación de Webmin .............................................................................................................................48 Instalación servidor de Bases de Datos......................................................................................................49 Instalación y configuración de servidor FTP ...............................................................................................54 Instalación y configuración de LDAP ..........................................................................................................62 Configuración máquina clientex.proyectint.org .............................................................................................68 Instalación y configuración cliente VPN .....................................................................................................68 Copias de seguridad ..................................................................................................................................70 Anexos..........................................................................................................................................................72 Código de la aplicación web ......................................................................................................................73 Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 3 Enunciado Después de la excelente formación recibida en el clico de ASIR, te animas a montar tu propia empresa de servicios informáticos: Proyect Int. El objetivo es crear la infraestructura necesaria para dar servicio de respaldo de información (copias de seguridad) a tus clientes. El mecanismo será el siguiente: Al crear un contrato con un cliente, deberá definirse el numero de máquinas que desea integrar en el servicio (a las que se les va a realizar copias de seguridad). Se instalará en la red del cliente una máquina y se configurará como cliente VPN para que sea accesible desde tu red. Esta contendrá un software para realización de copias de seguridad de las distintas máquinas (configurando el tipo, periodicidad, programación, etc…) mediante la red, dando como resultado un archivo por cada una. Tu sistema deberá tener un proceso para que cada noche copie esos archivos a una maquina especial de tus instalaciones, cuyo cometido es el de mantener las copias seguras. El estado y toda la información del proceso de copia deberán ser almacenados en una base de datos. Toda la información anterior estará reflejada en una web, que servirá como herramienta de comprobación del correcto funcionamiento del sistema. Descripción del escenario El esquema de red es el siguiente: Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 4 Como se muestra en el dibujo, la red de la empresa constará de tres máquinas, cada una con los servicios o herramientas que se indica en el esquema. Las máquinas llevarán montado el sistema operativo Debian, sin entorno gráfico, además la máquina Vigila tendrá instalado pfSense. Además las otras dos máquinas se le instalará Webmin, un panel de control para administrar el servidor vía web. A continuación adjunto descripción más detallada de las máquinas que se configurarán: Descripción máquinas de la red interna vigila.proyectint.org Dispondrá de tres interfaces de red, una para la red interna y otra para la conexión a Internet. Se implementará mediante una máquina virtual con pfSense. Contendrá los siguientes servicios: Firewall Servidor VPN Servidor DNS aplica.proyectint.org Ubicado en la red interna, se implentará mediante una máquina virtual Debian y contendrá los siguientes servicios: Servidor Web Servidor de correo Aplicación de monitorización con Nagios Aplicativo web de gestión datos.proyectint.org Ubicado en la red interna, implementado mediante una máquina virtual Debian, tendrá el cometido de almacenar tanto las copias de seguridad realizas a los clientes, mediante un servidor FTP, como una Base de Datos. También se encargará de dar el servicio LDAP. Descripción máquinas de la red cliente clientex.proyectint.org Ubicado en la red del cliente, tendrá el cometido de realizar las copias de seguridad de los distintos equipos contratados y tenerlos disponible para su copia desde la red de tu empresa. Deberá tener un directorio “copias” que contendrá tantos subdirectorios como máquinas contratadas exista, y dentro de estas estará el archivo resultante de la realización de la copia de seguridad a la máquina en cuestión (maquina.tar.gz). Será configurado como un cliente VPN. Las máquinas se importaran desde una OVA con una instalación limpia de Debian.proyectint.org Para empezar importamos la OVA que contiene una máquina limpia con Debian instalado.2º ASIR 5 Configuración del escenario Para la realizar la configuración del escenario se utilizaran máquinas virtuales. vigila. en concreto se usará el software VirtualBox.Proyecto Integrado – Francisco José Cruz Jiménez . A continuación describiré todo el proceso de configuración de cada máquina para obtener el escenario propuesto.A continuación vamos a la configuración de las interfaces y establecemos las siguientes configuraciones: . así que cuando se haga la instalación de éste.proyectint. se configurarán las direcciones de red. aplica.Proyecto Integrado – Francisco José Cruz Jiménez . (Ver apartado correspondiente). importamos la OVA y configuraremos la interfaz de esta forma: . # nano /etc/network/interfaces # service networking restart datos.org Como anteriormente.proyectint.2º ASIR 6 Esta máquina llevara instalado pfSense.org Como anteriormente. importamos la OVA y configuraremos la interfaz de esta forma: Para la configuración de la dirección de red modificamos el archivo correspondiente. # nano /etc/network/interfaces # service networking restart .org Como anteriormente.2º ASIR 7 Para la configuración de la dirección de red modificamos el archivo correspondiente.proyectint. importamos la OVA y configuraremos la interfaz de esta forma: Para la configuración de la dirección de red modificamos el archivo correspondiente.Proyecto Integrado – Francisco José Cruz Jiménez . # nano /etc/network/interfaces # service networking restart cliente1. Para la instalación necesitamos la ISO. Así quedará la configuración. Tras unos segundos nos empezará a pedir que le indiquemos las interfaces de red.proyectint. Posteriormente arrancamos desde dicho dispositivo y seleccionamos la opción 1.org/download/index. que es una distribución personalizada de FreeBSD adaptada para su uso como Firewall y Router (entre otras muchas caracteristicas). la podemos descargar de la siguiente dirección: https://pfsense.Proyecto Integrado – Francisco José Cruz Jiménez .org Instalación pfSense Para la máquina vigila vamos a utilizar el software pfSense.2º ASIR 8 Configuración máquina vigila.html Tras descargar dicha ISO la asignamos a una unidad de almacenamiento en la máquina vigila. . las configuraremos tal que así: La siguiente la dejamos vacía. Una vez en el menú de pfSense elegimos la opción 2 para asignar las direcciones IP a las interfaces. Seguimos con la configuración de LAN Y por último la interfaz DMZ (en estos momentos se llama OPT1).Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 9 La interfaz WAN la dejamos como está. . Nos quedara así la configuración. Posteriormente debemos ir a System General Setup para cambiar los servidores DNS. para ello vamos a Interfaces OPT1 y modificamos lo siguiente. También existe la posibilidad de habilitar la administración desde WAN. A continuación vamos a modificar el nombre de la interfaz OPT1 por DMZ. añadiremos como servidor la propia máquina. Configuración Servidor DNS Para configurar el servidor DNS en pfSense basta con ir a la pestaña Services DNS Forwarder y allí introducir los hosts. para ello hay que crear una regla en el cortafuegos. La configuración que precede a este apartado la podemos dejar por defecto si queremos un funcionamiento estándar.Proyecto Integrado – Francisco José Cruz Jiménez . .2º ASIR 10 Ya podemos entrar en el navegador y escribir la dirección de interfaz LAN de pfSense para entrar en la configuración (desde algún equipo de la subred INTERNA). Acabado esto ya tenemos instalado pfSense en la máquina vigila. La autentificación se realizará mediante certificados digitales. Tan solo será necesario incorporar un equipo de la red de cada cliente.2º ASIR 11 Comprobamos que funciona correctamente. que será la que contendrá el archivo con la . Configuración Servidor VPN Para conectar con la máquina cliente que se implantará en cada red de clientes usaremos una red privada virtual o VPN.Proyecto Integrado – Francisco José Cruz Jiménez . Mediante OpenVPN se deberá crear un servidor que permita la interconexión de nuestra red con las distintas sedes de los clientes. Para generarlo vamos a System Cerficate Authority Manager Certificates . necesitamos uno para cada cliente. pero como solo vamos a usar un cliente de momento. solo generaremos uno. Ahora crearemos los certificados para los clientes.org.2º ASIR 12 copia de seguridad que deberá copiarse a la máquina datos. Además los clientes VPN no pueden verse entre ellos.0/24. Para ello vamos a System Cerficate Authority Manager Cas y desde aquí creamos la autoridad certificadora.0.proyectint.Proyecto Integrado – Francisco José Cruz Jiménez . Para configurar el servidor VPN vamos a la aplicación web de pfsense. A cada cliente se le asignará una IP del rango 10.0. como antes se ha dicho. Lo primero que se realizará es la creación de certificados. Proyecto Integrado – Francisco José Cruz Jiménez . solo habrá que cambiar el nombre del cliente.2º ASIR 13 Para crear otros certificados para clientes distintos será de la misma forma. También tenemos que crear el certificado para el servidor. Ahora nos dirigimos a VPN OpenVPN Server y añadimos uno. . le indicaremos esta configuración. Ahora vamos a System User Manager Users para crear los usuarios para los clientes.2º ASIR 14 Ahora tenemos que crear usuarios para que los clientes puedan identificarse a la hora de conectarse por OpenVPN. . crearemos tantos usuarios como cliente tengamos. en este caso solo crearemos uno.Proyecto Integrado – Francisco José Cruz Jiménez . Tambien crearemos un grupo para englobar todos los usuarios de VPN. Vamos a System User Manager Groups. Se nos descargará un ZIP. Para ver la configuración del cliente ver este apartado del documento (Instalación y configuración cliente VPN). este archivo lo pasaremos a la máquina cliente. podemos usar por ejemplo el programa WinSCP. . Para ello vamos a System Packages y elegimos este paquete.Proyecto Integrado – Francisco José Cruz Jiménez . gracias a este paquete podemos exportar los archivos de configuración y pasarlo a la máquina cliente. A continuación nos dirigimos a VPN OpenVPN Client Export y elegimos la siguiente opción.2º ASIR 15 Ahora necesitamos un instalar un paquete para facilitar la configuración del cliente. org desde la dmz (10. Permitir conexiones entre aplica.org .10.1.proyectint.0/24) y la red interna (10. Permitir el paso de conexiones smtp desde el equipo aplica.org hacia el servidor dns del ISP.2.2º ASIR 16 Configuración Firewall El firewall deberá configurarse con las siguientes reglas: Solo se aceptarán conexiones a los servicios dns a la máquina vigila.proyectint.org hacia los puertos que consideres necesarios de la máquina datos.org.org y datos.0/24). Permitir peticiones y respuestas dns desde vigila.org para el acceso a consultas a la base de datos y al ldap.0.org hacia Internet. No permitir el paso de pings por el gateway desde la subred 10.0/24 al puerto 80 de vigila.10.proyectint.0.proyectint.org hacia el puerto 443 de la máquina aplica.0.Proyecto Integrado – Francisco José Cruz Jiménez .proyectint.org hacia el puerto 8080 de la máquina aplica.0. Redireccionar todas las conexiones ftp recibidas de la subred 10.0.0.0/24 a vigila.0.proyectint.proyectint.proyectint.org.proyectint.proyectint.0. Redireccionar todas las conexiones http recibidas de la subred 10. con sus respectivas respuestas. Redireccionar todas las conexiones https recibidas de la subred 10.proyectint.0/24 hasta el resto: interna o dmz.0/24 al puerto 443 de vigila. . o Permitir rsync desde aplica a clientes VPN o Ping para monitorizar con Nagios el estado de las máquinas.2º ASIR 17 Otras: o Necesito que pueda acceder a FTP desde aplica a datos para subir las copias desde el script. Estos son los alias usados. o Acceso a Nagios y a App web desde LAN.Proyecto Integrado – Francisco José Cruz Jiménez . DHCP. Además debemos establecer el nameserver para usar el servidor DNS de la máquina vigila. etc….webmin. DNS. En mi caso me decanto por el . entre otros. GNU/Linux y otros sistemas Unix.org Instalación de Webmin Webmin es una herramienta de configuración de sistemas accesible vía web para OpenSolaris.proyectint. http://www. como usuarios. # nano /etc/resolv. FTP. para ello debemos tener instalado ssh en dicha máquina para utilizar scp desde la máquina cliente o desde la máquina real (si tenemos permitido estas conexiones en el firewall). Para ello tenemos que descargarnos el paquete de su web.conf # service networking restart $ ping vigila $ ping 8. archivos de configuración. Con él se pueden configurar aspectos internos de muchos sistemas operativos. como el servidor web Apache. tenemos internet en la máquina aplica. Samba. podemos bajarnos el código fuente o un . así como modificar y controlar muchas aplicaciones y servicios. Lo primero que vamos a comprobar es que después de las configuraciones del cortafuegos de la máquina vigila.8. Con la instalación de esta herramienta podremos configurar fácilmente desde cualquier navegador los servicios que instalaremos.8 # apt-get install ssh . PHP.deb. apagado del equipo. cuotas de espacio.html Una vez descargado el programa debemos transferirlo a la máquina aplica.2º ASIR 18 Configuración máquina aplica.8.deb.com/download. servicios.Proyecto Integrado – Francisco José Cruz Jiménez . Lo bajaré desde la máquina real y lo transferiré con el comando scp. MySQL. # netstat –natup | egrep apache2 . sino que posee varios pares de ellos. https://10. que por cada petición crea un proceso).1.2 Antes tenemos que instalar unas dependencias que necesita webmin.10.Proyecto Integrado – Francisco José Cruz Jiménez .10. en concreto instalaré apache2.2:10000 Instalación y configuración servidor web A continuación vamos a instalar un servidor web en nuestra máquina aplica.2º ASIR 19 $ scp webmin. # ps aux | egrep apache2 Además también comprobaremos que el puerto 80 está a la escucha. dependiendo si su MPM es Worker o Prefork (El modo Worker trabaja con hilos. Para instalarlo usamos: # apt-get install apache2 Ahora comprobamos que la instalación ha sido satisfactoria observando que existen procesos apache2.deb root@10. # apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions # dpkg –i webmin.deb Ya podemos accede en el navegador a Webmin. esto hace que tenga menos procesos que si fuese modo Prefork. Son las siguientes.1. hay que resaltar que apache no solo tiene un proceso como los servicios anteriormente vistos. Para configurar apache2 podemos optar por hacerlo mediante Webmin. Una vez instalado el servidor web. procedemos a configurarlo para que cumpla con el enunciado.2º ASIR 20 Otra comprobación que podemos hacer es poner la dirección IP del servidor en un navegador. nos vamos al módulo de Servidor Web Apache veremos los virtual hosts activos. Ahora vamos a crear los dos sitios que nos pide el enunciado. . para ellos vamos al ámbito global.Proyecto Integrado – Francisco José Cruz Jiménez . Para el siguiente sitio tenemos que activar el modulo ssl de apache. Luego el 443. Y activamos el módulo siguiente. si apache2 está correcto nos mostrara lo siguiente. si entramos en este. Primero el que escucha por el puerto 8080. key Ahora tenemos que agregar estos puertos al archivo ports.pem –keyout httpd. en Webmin nos vamos al ámbito global y le damos a Redes y Direcciones.Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 21 A continuación generaremos un certificado que usaremos posteriormente en la configuración SSL. # apt-get install openssl # openssl req –new –x509 –days 365 –nodes –out httpd.conf. . Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 22 A continuación le damos a Reiniciar Apache. . # netstat –natup | egrep 8080 # netstat –natup | egrep 433 Podemos ver que gracias al servidor DNS que creamos anteriormente podemos usar el nombre de la máquina en vez de la dirección IP. Ya tan solo nos queda comprobar que está a la escucha y además crear unos documentos html de prueba y entrar en los sitios en el navegador. 2º ASIR 23 Para servir la aplicación web que posteriormente se va desarrollar vamos a necesitar el interprete PHP. # apt-get install php5 libapache2-mod-php5 php5-mysql # service apache2 restart Instalación y configuración servidor de correo Para mandar futuras notificaciones (por ejemplo con Nagios) necesitamos un servidor de correo instalado y configurado. La configuración que se establecerá será para que funciones de manera segura. son estos. y cómo solo hay que dar soporte para correo saliente. Como servidor de correo en la máquina aplica usaremos postfix. PHP (Hypertext Preprocessor) es un lenguaje de programación diseñado para producir sitios web dinámicos. A continuación vamos a instalar PHP5. es utilizado en aplicaciones del lado del servido. no hará falta instalar ningún software para correo entrante (protocolos POP3 e IMAP).Proyecto Integrado – Francisco José Cruz Jiménez . que es un servidor de correo de software libre. . # apt-get install postfix Durante la instalación de postfix nos pedirá una serie de datos. el módulo de Apache para PHP5 y la librería para la conexión con MySQL. 2º ASIR 24 Una vez haya terminado la instalación probaremos el servicio de diversas formas. # ps aux | egrep postfix # netstat –natup | egrep 25 .Proyecto Integrado – Francisco José Cruz Jiménez . 0.cf . # nano /etc/postfix/main.0. en concreto los siguientes.cf # nano /etc/postfix/master.1 25 Para configurar el servicio de correo saliente tendremos que modificar dos archivo de configuración de Postfix. (Modificamos lo que aparece resaltado en amarillo).Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 25 telnet 127. # adduser admin # su admin $ mail –s correo_de_prueba
[email protected] porque se solapa).com He usado Yopmail porque al enviar a Gmail.Proyecto Integrado – Francisco José Cruz Jiménez .com).2º ASIR 26 # service postfix restart A continuación comprobamos que el puerto está a la escucha y comprobamos su funcionamiento. # netstat –natup | egrep 465 Añadimos un usuario para los correos e intentamos enviar un correo. . Google bloquea el correo porque considera que es SPAM (lo mismo pasa con Outlook. (apenas se ve la dirección pepe@yopmail. Aquí está la captura de la comprobación. ). la máquina aplica ya cuenta con esto.. uso de los discos. Funciona independientemente de sistemas operativos instalados en los equipos. ya que será la que usemos para entrar en la administración vía web. Para usar Nagios. SSH.). En este caso. Lo instalamos con el siguiente comando. generando avisos. BBDD. alertando cuando el comportamiento de los mismos no sea el deseado.. Entre sus características principales figuran la monitorización de servicios de red (SMTP.. Esta es importante. la monitorización de los recursos de sistemas hardware de los equipos de la red (carga del procesador. .. necesitamos una máquina que cuente con un servidor web instalado previamente y además de soporte para PHP. memoria. # apt-get install nagios3 Durante la instalación de Nagios nos aparecerá una ventana pidiendo que introduzcamos una contraseña. que pueden ser recibidas por los responsables correspondientes mediante correo electrónico y mensajes SMS.Proyecto Integrado – Francisco José Cruz Jiménez . POP3.2º ASIR 27 Instalación y configuración de Nagios Nagios es un sistema de monitorización de redes de código abierto ampliamente utilizado. estado de los puertos. HTTP. que vigila los equipos y servicios que se configuren. El directorio donde se encuentra estos archivos es /etc/nagios3/conf.d/ # nano equipos. no es obligatorio hacerlo como propongo a continuación.2º ASIR 28 Una vez acabado el proceso.d/.Proyecto Integrado – Francisco José Cruz Jiménez .). $ nagios3 –V La configuración de Nagios que debemos establecer para la correcta monitorización de los servicios y demás se reparte en varios archivos (aunque podemos organizarlo como nos parezca mejor. para verificar la instalación usamos el siguiente comando para comprobar que Nagios3 se ha instalado. $ cd /etc/nagios3/conf.cfg . 2º ASIR 29 # nano servicios.Proyecto Integrado – Francisco José Cruz Jiménez .cfg . # nano commands.cfg # nano grupos.Proyecto Integrado – Francisco José Cruz Jiménez .cfg . Lo primero es crear un usuario con privilegios mínimos en nuestro servidor de MySQL y añadimos lo siguiente.2º ASIR 30 El plugin necesario para monitorizar MySQL (check_mysql) viene integrado en Nagios aunque necesita alguna configuración para su uso. 2º ASIR 31 Ahora vamos a configurar las notificaciones. # nano contactos.cfg # nano nagios.cfg .Proyecto Integrado – Francisco José Cruz Jiménez . . lo instalamos con: # apt-get install nagios-nrpe-server Además tendremos que configurar el siguiente archivo y establecer la IP del servidor Nagios.cfg Para instalarlo en la máquina vigila podemos ir al área de instalación de paquetes y buscar el siguiente. # nano /etc/nagios/nrpe. necesitamos otro paquete.2º ASIR 32 # service nagios3 restart Para la monitorización de espacio en disco y demás cosas del sistema en otras máquinas remotas.Proyecto Integrado – Francisco José Cruz Jiménez . 2º ASIR 33 Para configurarlo vamos a Services NRPEv2.Proyecto Integrado – Francisco José Cruz Jiménez . Accedemos vía web a la aplicación. . 2º ASIR 34 .Proyecto Integrado – Francisco José Cruz Jiménez . Proyecto Integrado – Francisco José Cruz Jiménez . La página de inicio de la aplicación es la siguiente. El código de la aplicación lo adjunto en el anexo. podrá añadir en la base de datos y consultar clientes. además de poder ordenar copias de seguridad manualmente y consultar las copias realizadas. Si es un administrador el que se loguea dispondrá de más opciones. podrá consultar las copias de seguridad realizadas de sus máquinas. Si es cliente. .2º ASIR 35 Aplicación web de gestión Con el servicio web de esta máquina. La aplicación será desarrollada en PHP. máquinas y usuarios para acceder a la aplicación almacenados en ésta. desde el sitio HTTPS (el que está a la escucha por el puerto 443). según el rol que tenga el usuario que se loguee dispondrá de unas opciones u otras. A continuación voy a explicar las diferentes ventanas y opciones. ofreceremos una aplicación web de gestión tanto para clientes como para administradores. Estructura de la aplicación. nos permite loguearnos. Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 36 Los datos introducidos en este formulario se dirigen a login. Si nuestro usuario existe pero no tenemos ningún rol asignado nos aparecerá la siguiente.php. dos mostrará las copias de seguridad realizadas a dicho cliente. . Si nuestro usuario introducido es un cliente. Existe tres distintas redirecciones. si los datos de acceso son erróneos la pantalla es la siguiente. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 37 Si somos un administrador nos mostrara las posibles opciones que tenemos disponible. Estas son las pantallas de las diferentes opciones. Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 38 Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 39 Proyecto Integrado – Francisco José Cruz Jiménez - 2º ASIR 40 Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 41 . en concreto una para MySQL y otra para FTP.Proyecto Integrado – Francisco José Cruz Jiménez . Para comenzar necesitamos tener instalado rsync en ambas máquinas. luego continuará el script bk.2º ASIR 42 Copias de seguridad automática Para realizar las copias de seguridad automáticas de los diferentes directorios que tenemos sincronizados en la máquina clienteX.sh ip_maquina cod_maquina cod_cliente DATE=$(date "+%d%h%Y%H%M") TO="/root/bk/$3/$2/rsync" FROM="root@$1:/root/copias/$2/" if test ! -d /root/bk/$3 then . Como ya se ha dicho antes. Lo instalamos usando cpan. Con el script Perl (su nombre será bk.pl. tomará los datos que le ha dejado el Shell Script y realizaremos una conexión a la BDD para insertar los datos de la copia y la subida al servidor FTP. # cpan –i DBI # cpan –i Net::SFTP::Foreign Este es el Shell script que usaremos. #! /bin/bash # Ejecutar bash bk. tendremos un script Perl que será el encargado de realizar estas copias de seguridad. # apt-get install rsync Tambien necesitamos algunas librerías para Perl. insertar en la BDD los datos de dicha copia y por ultimo subirlas a la carpeta del cliente en el servidor FTP. la máquina clienteX tendrá un directorio Copias en el cual se almacenarán los archivos de las máquinas de clientes (ver apartado Copias de Seguridad en clienteX).sh) que será el que usará el comando rsync para copiarnos el directorio de sincronización de la máquina deseada y empaquetarlo.pl) haremos una llamada al sistema para ejecutar un Shell Script (bk. Proyecto Integrado – Francisco José Cruz Jiménez . $port="3306".sh @ARGV[0] @ARGV[2] @ARGV[1]`.$host:$port".. $sql_date->execute().'no')"./$PAQ * echo "OK" > /root/temp echo $PAQ >> /root/temp else echo "no" > /root/temp fi Y este es el script Perl. # Inserto primeros datos de la copia $query="insert into copias (cod_cliente.cod_maquina. # Realizamos la conexión a la base de datos $db = DBI->connect($connectionInfo.2º ASIR 43 mkdir /root/bk/$3 fi if test ! -d /root/bk/$3/$2 then mkdir /root/bk/$3/$2 fi if test ! -d /root/bk/$3/$2/rsync then mkdir /root/bk/$3/$2/rsync fi if rsync --delete -avb $FROM $TO then cd /root/bk/$3/$2/rsync/ PAQ="BACKUP-$2-$DATE. $date = $sql_date->fetchrow_array().correcta) values ('@ARGV[1]'.'@ARGV[3]'.tar" tar cf . use Net::SFTP::Foreign. $sql_date = $db->prepare($qu_date).fecha_ini. #!/usr/bin/perl # Ejecutar perl bk.proyectint. # Cogemos fecha desde MySQL $qu_date="select sysdate()". .'@ARGV[2]'.org". $sql->execute().'$date'. $host="datos.$pass).pl ip_maquina cod_cliente cod_maquina tipo_copia [auto o manual] usuario_ftp pass_ftp use DBI.$user. $user="user_proyectint". $sql = $db->prepare($query).tipo_copia. #Datos de la conexión $db="db_proyectint". $connectionInfo="DBI:mysql:database=$db. $pass="12Proyectint34*". # Llamada al script bash SOLUCIONAR!! `bash /root/bk. } $sql2 = $db->prepare($up). print "Copia de seguridad no realizada\n". while (<re>){ chomp. } close re. password => "@ARGV[5]") or die("No se pudo conectar al servidor: $!").org". # ssh-keygen -b 4096 -t rsa .proyectint. `rm /root/temp`. debemos crear una relación de confianza entre las máquinas para que al ejecutar el script no nos pida la contraseña del usuario. print "Copia de seguridad realizada con exito\n". $sql_date->finish(). $sql2->finish(). # Subir a FTP el paquete $sftp = Net::SFTP::Foreign->new("datos. @result[$n]=$_.2º ASIR 44 $n=0. Para ello debemos realizar estos pasos en la máquina aplica. # Elimino paquete `rm /root/bk/@ARGV[1]/@ARGV[2]/@result[1]`. }else{ $up="update copias set fecha_fin = sysdate() where fecha_ini = '&date'"."/root/temp") or die "$!n". $n++. Para que las copias se realicen de manera automática.Proyecto Integrado – Francisco José Cruz Jiménez .@ARGV[2]. correcta= 'si'. $sql2->execute(). open (re.'/'.user => "@ARGV[4]". # Actualizo datos de copia en BDD if (@result[0] eq "OK"){ $up="update copias set fecha_fin = sysdate(). nombre_fichero = '@result[1]' where fecha_ini = '$date'".@result[1]) or die "$!n". además de crear un tarea programada en el cron.'/'. $sftp->put('/root/bk/'.@ARGV[1]. $db->disconnect. org # ssh
[email protected]º ASIR 45 # ssh-copy-id root@datos. # ssh-copy-id
[email protected] Hacemos lo mismo para poder conectarnos a cliente1 desde aplica.Proyecto Integrado – Francisco José Cruz Jiménez .6 . Ahora para que el proceso de las copias es totalmente automático.0. vamos a añadirlo a cron para que se haga diariamente los backup.6 A01 A01 auto cliente1 cliente1 Ahora comprobamos si la copia se ha subido a FTP y se ha insertado la información en la BDD.Proyecto Integrado – Francisco José Cruz Jiménez .pl 10.0.0.6 # perl bk.2º ASIR 46 # ssh root@10. # crontab –e .0. Lo instalamos. # apt-get install xinetd A continuación vamos a añadir nuestro nuevo servicio en el siguiente archivo. podemos ordenar una copia de seguridad manualmente desde la aplicación web si estamos logueados como administrador. cada una con sus datos correspondientes. se llamará copias y estará escuchando por el puerto 6666.pl con los argumentos que necesita para su correcta ejecución (que los daremos mediante la aplicación web). # nano /etc/xinetd. # nano /etc/services Ahora creamos el archivo para la definición del servicio. #!/usr/bin/perl . Para crear este servicio usaremos el super servicio xinetd.2º ASIR 47 Como vemos en la imagen. Copias de seguridad manual Como antes vimos. que se ponga en contacto con un servicio que crearemos.d/copias Lo siguiente es desarrollar el script del servidor y lo colocaremos en /root/copiam. añadiremos tantas tareas como máquinas de clientes tengamos.pl. Lo que queremos que este servidor haga es ejecutar el script que realiza las copias de seguridad bk.Proyecto Integrado – Francisco José Cruz Jiménez . Para solucionar esto vamos a recurrir a un script CGI escrito en Perl. desde un script PHP.2º ASIR 48 $com = <STDIN>. El código del script se encuentra en el anexo de este documento. # service xinetd restart # netstat –natup | egrep 6666 Para conectar con este servidor desde la aplicación web se usará socket. exec “perl /root/bk. reiniciamos el super servicio xinetd y comprobamos que el puerto está a la escucha.proyectint. se creará el socket. # nano /etc/resolv.org).proyectint. # $com debe de contener: ip_maquina cod_cliente cod_maquina manual usuario_ftp pass_ftp Por último.Proyecto Integrado – Francisco José Cruz Jiménez .pl ". se establecerá la conexión con el servidor y se le transmitirá los datos necesarios para la copia de seguridad.org Antes que nada debemos establecer el nameserver para usar el servidor DNS de la máquina vigila.$com. Configuración máquina datos. .conf # service networking restart $ ping vigila Instalación de Webmin (Ver instalación en aplica. # apt-get install mysql-client mysql-server En el transcurso de la instalación nos pedirá que introduzcamos una clave para root.2º ASIR 49 Instalación servidor de Bases de Datos Según se nos define en el enunciado del proyecto. $ netstat -natup | egrep 3306 También podemos iniciar con el cliente que instalamos anteriormente. a las diferentes máquinas que dispone cada cliente e información referente a las copias de seguridad realizadas para ese cliente. $ mysql -u root –p . Para instalar este servicio usamos el siguiente comando (instalaremos tanto el servidor como el cliente). Como servidor de bases de datos vamos a usar MySQL.Proyecto Integrado – Francisco José Cruz Jiménez . necesitamos registrar la información relativa a los clientes. Una vez acabada la instalación comprobamos que el puerto esta a la escucha. Para dar solución a estas necesidades se va a llevar a cabo la implantación de un servidor de Bases de Datos en la máquina aplica. vamos a instalar phpMyAdmin. que es una herramienta escrita en PHP que nos permite realizar la administración de MySQL a través de páginas web. utilizando un navegador.2º ASIR 50 Para administrar la base de datos con un entorno amigable. # apt-get install phpmyadmin Mientras la instalación nos pedirá que elijamos servidor web. sino lo crea debemso hacerlo nosotros. El programa de instalación crea un enlace simbólico en el DocumentRoot del servidor web para que la aplicación pueda ser accesible desde la url.Proyecto Integrado – Francisco José Cruz Jiménez . # nano /etc/apache2/sites-enabled/000-default . según se nos define en el enunciado del proyecto. Una vez que ya tenemos la herramienta para administrar MySQL vamos a comenzar a crear las bases de datos necesarias y las tablas. correos electrónicos. notas sobre la máquina. a las diferentes máquinas que dispone cada cliente. su ubicación física.proyectint.2º ASIR 51 # service apache2 restart http://datos. persona o personas de contacto.org/phpmyadmin/index. dirección. notas sobre el cliente. e información relativa a las copias de seguridad realizadas para ese cliente. Clientes Guardaremos nombre del cliente.Proyecto Integrado – Francisco José Cruz Jiménez . Máquinas Almacenaremos información relativa a las máquinas y los servicios que les proveemos a los clientes. datos técnicos sobre la máquina como su capacidad de disco total. etc… Copias de seguridad . Primero tenemos que tener claro que necesitamos. necesitamos registrar la información relativa a los clientes. teléfonos. Lo que necesitamos almacenar de cada uno es lo siguiente.php. `email` varchar(20). `notas` varchar(50). la fecha y hora en la que finalizó el proceso de copia. CONSTRAINT `clientes_pk` PRIMARY KEY (`cod_cliente`) ). si la copia se efectuó correctamente o no. CREATE USER 'user_proyectint'@'localhost' IDENTIFIED BY '12Proyectint34*'. CREATE TABLE IF NOT EXISTS `maquinas` ( `cod_maquina` varchar(3) NOT NULL. Este es el código que se usó para crear la base de datos y el usuario que accederá a ella y sus privilegios. GRANT ALL PRIVILEGES ON `db_proyectint` . Aparte necesitamos una tabla para almacenar los usuarios y contraseñas para acceder a la aplicación web. CREATE DATABASE `db_proyectint`. etc… Este es el modelo relacional. `persona_contacto` varchar(30). que a su vez relacione el código de cliente con el usuario para futuras consultas con la aplicación web. `direccion` varchar(30). `nombre_cliente` varchar(50). A continuación procedemos con la creación mediante phpMyAdmin. el nombre del archivo o archivos que componen la copia si es una copia automática o lanzada de manera manual. * TO 'user_proyectint'@'%'. `telefono` int(9).2º ASIR 52 Respecto a las copias de seguridad realizadas mantendremos la información sobre la fecha y hora en la que se inició dicha copia. Para la creación de las tablas usaremos el siguiente código. para ello crearemos una tabla en la base de datos. CREATE TABLE IF NOT EXISTS `clientes` ( `cod_cliente` varchar(3) NOT NULL.Proyecto Integrado – Francisco José Cruz Jiménez . . `tipo_copia` ENUM('auto'. Además insertamos un usuario admininistrador para que pueda loguearse en la aplicación web e introducir a través de ésta los diferentes clientes. `cod_maquina` varchar(3) NOT NULL.'cliente') NOT NULL. Por último haremos una modificación en el servidor MySQL para que podamos conectar desde la aplicación web. INSERT INTO usuarios VALUES ('admin'. `notas` varchar(50).Proyecto Integrado – Francisco José Cruz Jiménez . máquinas y usuarios que existan.`fecha_ini`). CONSTRAINT `usuario_pk` PRIMARY KEY (`nombre`).2º ASIR 53 `servicios` varchar(30). CONSTRAINT `cod_cliente_fk` FOREIGN KEY (`cod_cliente`) REFERENCES `clientes` (`cod_cliente`). CONSTRAINT `usu_cod_cliente_fk` FOREIGN KEY (`cod_cliente`) REFERENCES `clientes` (`cod_cliente`) ). `cod_cliente` varchar(3). `rol` enum('admin'. `pass` varchar(50) NOT NULL. Con todo esto ya tendemos configurado y funcionando el servicio de BBDD.'no') NOT NULL. `correcta` ENUM('si'.null). Para ello nos dirigimos a la configuración del servidor MySQL y cambiamos la opción resaltada en la imagen. `fecha_fin` datetime DEFAULT NULL. `nombre_fichero` varchar(50) NOT NULL.`cod_maquina`. . `ubicacion` varchar(20). CONSTRAINT `cod_maquina_fk` FOREIGN KEY (`cod_maquina`) REFERENCES `maquinas` (`cod_maquina`) ).'manual') NOT NULL. `capa_disco` varchar(10).md5('admin'). CONSTRAINT `copias_pk` PRIMARY KEY (`cod_cliente`. CREATE TABLE IF NOT EXISTS `usuarios` ( `nombre` varchar(10) NOT NULL. CREATE TABLE IF NOT EXISTS `copias` ( `cod_cliente` varchar(3) NOT NULL.'admin'. `fecha_ini` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP. CONSTRAINT `maquinas_pk` PRIMARY KEY (`cod_maquina`) ). webmin. # ps aux | egrep ftp # netstat –natup | egrep ftp También podemos probar si está funcionando el servidor FTP utilizando cualquier cliente. Para instalar este servidor FTP en la máquina datos. comparado con otros servidores FTP. ya que es la mejor opción que existe.proyectint. sino simplemente esto indica que dicho módulo no viene instalado por defecto en Webmin. Para instalar el módulo VSFTPD nos dirigimos a la web de Webmin: http://www.2º ASIR 54 Instalación y configuración de servidor FTP Como servidor FTP usaremos VSFTPD (Very Secure FTP Daemon). por ejemplo un navegador. este es más eficiente y seguro. . esto no quiere decir que no se pueda administrar desde aquí.com y nos dirigimos a la opción Third-Party Modules.Proyecto Integrado – Francisco José Cruz Jiménez . solo tenemos que poner en la barra de direcciones la IP del servidor y nos mostrará lo siguiente: ftp://datos. Pero si buscamos VSFTPD entre los módulos de Webmin puede ser que no se encuentre por ningún lado. usamos: # apt-get install vsftpd Ahora comprobamos que la instalación ha sido satisfactoria observando que se ha creado un proceso de éste y que el puerto 21 está a la escucha.org Para configurar este servicio podemos usar la herramienta que instalamos antes. indicamos el nombre del módulo que necesitamos instalar. en nuestro caso es VSFTP y buscamos. .2º ASIR 55 Y en el apartado Find modules or themes matching. Lo descargamos y Una vez acabado procedemos a su instalación.Proyecto Integrado – Francisco José Cruz Jiménez . Para ello vamos a Webmin > Configuración de Webmin > Módulos de Webmin y seleccionamos Instalar. Para solucionar este problema haremos una configuración segura de FTP usando TLS. En el apartado Generally podemos cambiar la frase de bienvenida. En Webmin sería así.2º ASIR 56 Una vez acabado el proceso de instalación ya podemos ir a Servidores y configurar VSFTPD. Para ello podemos hacerlo desde Webmin o bien desde la misma máquina Debian usando openssl. Un problema que acarrea el uso de FTP es que se trata de un protocolo que no es seguro. .Proyecto Integrado – Francisco José Cruz Jiménez . como las transferencias). sin ningún tipo de cifrado (tanto los datos para loguearse. la comunicación se hace en texto plano. para ello necesitamos generar un seguro. que debemos de configurar así.Proyecto Integrado – Francisco José Cruz Jiménez . . nos llevará a la siguiente pantalla.2º ASIR 57 Si pinchamos en el enlace anterior. .Proyecto Integrado – Francisco José Cruz Jiménez . Ahora tenemos que crear el fichero con los nombres de los usuarios que no queremos enjaular. se pretende tener tanto usuarios como cliente tengamos.2º ASIR 58 En cuanto a la configuración de los usuarios. además también tendremos un usuario administrador que pueda acceder a todo y con control total (podemos usar a root). que solo puedan acceder a su directorio y con permisos de lectura solamente. Para que root pueda conectarse por FTP debemos editar el siguiente archivo y eliminar el nombre de este. # nano /etc/ftpusers Además debemos de descomentar las siguientes opciones en el archivo de configuración de VSFTPD para desenjaular a root. # nano /etc/vsftpd.list A continuación vamos a quitar la posibilidad de acceder mediante anónimo. 2º ASIR 59 Para la configuración de los usuarios indicamos la siguiente configuración.Proyecto Integrado – Francisco José Cruz Jiménez . Reiniciamos el servidor mediante el siguiente botón y probamos a conectarnos en modo seguro y nos saldrá la pantalla del certificado. . Para agregar a los usuarios clientes basta con añadir usuarios a la máquina Debían (podemos agregarlo mediante Webmin). 2º ASIR 60 Aceptamos y estaremos conectados. .Proyecto Integrado – Francisco José Cruz Jiménez . y en cada directorio crear tantas carpetas como máquinas vayamos a ofrecer el servicio de backups.2º ASIR 61 Ya solo falta crear tantos usuarios como cliente tengamos.Proyecto Integrado – Francisco José Cruz Jiménez . Si probamos a conectar con el usuario root: . así que instalaremos éste.Proyecto Integrado – Francisco José Cruz Jiménez . LDAP (Protocolo Ligero de Acceso a Directorios) es un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para acceder a información guardada centralmente a través de la red. Concretamente usaremos la implementación OpenLDAP. # dpkg-reconfigure slapd . Una vez acabada la instalación debemos configurar nuestro servidor LPAD y para ello introduciremos el comando siguiente y vamos introduciendo lo que nos pide. El servidor OpenLDAP está disponible en el paquete slapd. Usamos el siguiente comando. # apt-get install slap ldap-utils Durante la instalación nos pedirá la contraseña para el administrador del directorio LDAP. también vamos instalar el paquete ldap-utils que contiene utilidades adicionales. Se trata de una implementación libre del protocolo que soporta múltiples esquemas por lo que puede utilizarse para conectarse a cualquier otro LDAP.2º ASIR 62 Instalación y configuración de LDAP A continuación realizaremos la instalación de un servidor con LDAP donde puedan guardarse las credenciales de nuestros clientes. en él se puede guardar información referente a personas o entidades. 2º ASIR 63 .Proyecto Integrado – Francisco José Cruz Jiménez . Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 64 . Proyecto Integrado – Francisco José Cruz Jiménez . Para ello.2º ASIR 65 Como vemos en la pantalla anterior todo ha ido bien.conf . editamos el fichero /etc/ldap/ldap.conf. # nano /etc/ldap/ldap. Ahora es importante editar el fichero de configuracion de slapd y establecer como dominio el que acabamos de crear. Como tenemos instalado Webmin en la maquina. configurado y funcionando el servidor LDAP vamos a comprobar que herramientas graficas podemos usar para la gestión del servidor y de clientes. me decantaría phplpadadmin como aplicación web para la gestion de LDAP.2º ASIR 66 # service slapd restart Una vez que ya tenemos instalado. Para poder administrar LDAP por Webmin hay que hacer algunos cambios en la configuración. son los siguientes.Proyecto Integrado – Francisco José Cruz Jiménez . . Si no tuviese instalado Webmin. Veamos como es el menú que nos ofrece Webmin para la configuración del servidor y cliente. no tenemos porque instalar otra aplicación web para configurar LDAP y gestionar usuarios y grupos. Proyecto Integrado – Francisco José Cruz Jiménez . . Vamos a crear un usuario para probar el funcionamiento. podemos acceder al apartado donde es posible crear los usuarios y los grupos. Pues una vez acabado este proceso. listo para ser usado. ya tenemos correctamente instalado y configurado el servidor LDAP.2º ASIR 67 Una vez aplicada la configuración. org Instalación y configuración cliente VPN Lo primero es instalar openvpn en esta máquina. # apt-get install ssh Una vez que ya hemos pasado a esta máquina el paquete generado anteriormente por el servidor VPN podemos seguir con la configuración. # nano vigila-udp-1194-cliente1.ovpn vigila-udp-1194-cliente1.conf ..Proyecto Integrado – Francisco José Cruz Jiménez ..zip # mv vigila-ud-1194-cliente1/* /etc/openvpn # mv vigila-udp-1194-cliente1. Para ello ejecutamos lo siguiente.2º ASIR 68 Configuración máquina clientex.proyectint. Descomprimimos el paquete y lo pasamos al directorio de openvpn (necesitamos una herramienta para descomprimir paquetes ZIP). # apt-get install openvpn Además necesitamos tener SSH para conectarnos y transferir el paquete de configuración de cliente. # apt-get install zip # unzip vigila.conf En el siguiente archivo comentamos las siguientes líneas. Proyecto Integrado – Francisco José Cruz Jiménez .1 .10.0.0.1 # ping 10.2º ASIR 69 # service openvpn restart # ifconfig # ping 10.1. 0/24.10. Para que las copias se realicen de manera automática. Una vez hecho ya podremos conectarnos sin tener que introducir contraseña.168.168. # ssh-keygen -t dsa Ahora vamos a transferirla a las diferentes máquinas de la red a la que vayamos a prestar el servicio. Para ello debemos realizar estos pasos para cada una de las máquinas a la que se le prestará el servicio de copias. en la máquina clienteX que instalaremos en la red de estos. tendremos un Shell Script que será el encargado de realizar la sincronización de directorios usando el rsync.2. tenemos que establecer la conexión con las máquinas de la empresa cliente. # ssh-copy-id root@192. debemos crear una relación de confianza entre las máquinas para que al ejecutar el script no nos pida la contraseña del usuario. Los directorios se almacenarán de la siguiente forma. Para empezar.Proyecto Integrado – Francisco José Cruz Jiménez . Cuando se contrate un servicio de copias de seguridad con un cliente se acordará el número de máquinas a las que se le prestará el servicio.168.2 A continuación nos conectamos a la máquina del cliente vemos que no nos pide contraseña.2º ASIR 70 Copias de seguridad Para realizar las copias de seguridad automáticas a los diferentes equipos de los clientes. Para la copias de las máquinas de clientes desarrollaremos un script que realice la sincronización de la carpeta de la máquina cliente1 con el contenido de la respectiva máquina con el comando rsync. además de crear un tarea programada en el cron. A continuación vamos a crear la clave en la máquina cliente1 (como anteriormente hicimos con aplica). en este caso la ip de nuestra máquina cliente1 es la 192.2.2.2 Esto lo tenemos que hacer para cada máquina del cliente. # apt-get install rsync #! /bin/bash . el cual hay que instalar en ambas máquinas. nuestra máquina cliente1 tendrá una nueva interfaz donde le asignaremos una ip de la subred que haya en dicha empresa.2.168. # ssh root@192. vamos a suponer q en la empresa tienen la red 192. Sincronización realizada" >> /root/copias/log else echo "$DATE .sh ip_maquina codigo_maquina DATE=$(date "+%d%h%Y%H%M") TO="/root/copias/$2" FROM="root@$1:/" if rsync --delete -avb $FROM $TO then echo "$DATE . # crontab -e .Sincronización erronea" >> /root/copias/log fi Con este script tendremos los directorios actualizados.2º ASIR 71 # Ejecutar bk.Proyecto Integrado – Francisco José Cruz Jiménez . Para que el proceso de sincronización sea automático crearemos una serie de tareas (una por cada máquina) al cron. las copias de seguridad se realizarán de estas carpetas desde los equipos de nuestra empresa. En el ejemplo siguiente valdrá para tener sincronizadas tres máquinas. desarrolloweb.org/ http://search.com http://web.mit.edu .com.wikipedia.webmin.com/ http://www.es/formacion/materiales/ http://es.educacion.com.cpan.es/ http://www.org/ http://perldoc.Proyecto Integrado – Francisco José Cruz Jiménez .blogspot.ite.net//manual/es/ http://www.php.2º ASIR 72 Anexos Bibliografía http://lahackcueva.perl.blogspot.es/ http://www.com http://stackoverflow.org/ http://usuariodebian. css"/> <title>Login-proyectint.org</title> </head> <body> <div id="envoltura"> <div id="contenedor" class="curva"> <div id="cabecera" class="tac"> proyectint.org </div> <div id="cuerpo"> <form id="form-login" action="login.2º ASIR 73 Código de la aplicación web La aplicación web tiene la siguiente estructura.php" method="post"> <p><label for="usuario">Usuario:</label></p> <p class="mb10"><input name="usuario" type="text" id="usuario"></p> <p><label for="pass">Contraseña:</label></p> <p class="mb10"><input name="pass" type="password" id="pass"></p> <p><input name="submit" type="submit" id="submit" value="Entrar" class="boton"></p> </form> </div> <div id="pie">Aplicación Web de Gestión</div> </div> </body> </html> .html <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="style. Index.Proyecto Integrado – Francisco José Cruz Jiménez . php").2.2º ASIR 74 Config_bd.ngase en contacto con el Administrador. ?> Login. $con = mysql_connect($servidor_bd.php").php <?php // Configuración de la BDD que utilizará la aplicación web $servidor_bd="10.2".$usuario_bd.php').n rol.org</p></div> </body> </html> .$pass_bd) or die (mysql_error()). $con) or die(mysql_error()). if($row["rol"] == "admin"){ header("Location: admin/admin.php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="style. $usuario_bd="user_proyectint". }else{?> <h1> Usuario incorrecto </h1><br> <form method="POST" action="index.Proyecto Integrado – Francisco José Cruz Jiménez .html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form> <?php }else{ $_SESSION["login_proy"]=$row["rol"]. if(!empty($_POST['usuario'])) { $con=require('config_bd. <h1> <?php } } mysql_close($con). No tiene definido ningú. $usu=$_POST["usuario"].css"/> <title> Login-proyectint. return $con.10.$usu). if($row["ok"] == 0) {?> <h1> Usuario incorrecto </h1><br> <form method="POST" action="index. $res = mysql_query("select count(*) as ok.html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form> <?php } ?> <div class="bottom"><p>Aplicación Web de Gestión . $pass=$_POST["pass"]. mysql_select_db($nombre_bd. $row = mysql_fetch_array($res). }elseif($row["rol"] == "cliente"){ header("Location: cliente/cliente. setcookie("usuario".rol from usuarios where nombre='$usu' and pass=md5('$pass')". }else{ ?> <h1> Error.$con) or die (mysql_error()). $nombre_bd="db_proyectint". Pó. $pass_bd="12Proyectint34*".org </title> </head> <body> <?php session_start().Proyectint. /style.?> <p id="introd">Insertado correctamente..'{$_POST['notas']}')". El campo Código del Cliente es único. if($row["ok"] == 0) { $sql="INSERT INTO clientes VALUES('{$_POST['cod_cli']}'. Prueba de nuevo.proyectint.$con) or die(mysql_error()).</p> <form method="POST" action="admin..'{$_POST['pe rso']}'. $row = mysql_fetch_array($res).</p><?php }?> <form method="POST" action="add_cliente. if (isset($_POST['cod_cli'])){?> <body> <h1>Añadir Cliente</h1><?php $con=require('. } if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {?> <body> <h1>Añadir Cliente</h1> <p id="introd">Introduce los datos del nuevo cliente para añadir a la Base de Datos de Clientes. $con) or die(mysql_error()). $res = mysql_query("select count(*) as ok from clientes where cod_cliente='{$_POST['cod_cli']}'".php').</p><?php }else{?> <p id="introd">El Código del Cliente introducido está ya en uso.css"/> <title> Añadir Cliente .org </title> </head> <?php session_start(). exit.php" align="center"> <input type="submit" value="Volver a Introducir" class="boton"/> </form><br/> <form method="POST" action="admin.Proyecto Integrado – Francisco José Cruz Jiménez .2º ASIR 75 Add_cliente.php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/> <div id="cuerpo"> <form id="form-login" method="post"> <p><label>Código del Cliente</label></p> <p><input class="mb10" name="cod_cli" type="text"></p> <p><label>Nombre del Cliente</label></p> <p><input class="mb10" name="nom_cli" type="text"></p> <p><label>Dirección</label></p> <p><input class="mb10" name="dir" type="text"></p> <p><label>Persona de Contacto</label></p> <p><input class="mb10" name="perso" type="text"></p> <p><label>Teléfono</label></p> <p><input class="mb10" name="tel" type="tel"></p> <p><label>Email</label></p> .php" align="center"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/><?php mysql_close($con). mysql_query($sql.'{$_POST['dir']}'.'{$_POST['nom_cli']}'.'{$_POST['tel']}'.'{$_POST['email']}'./config_bd.php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href=". /config_bd.</p><?php }else{?> <p id="introd">El Código de la Máquina introducido está ya en uso.php" align="center"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/><?php mysql_close($con).php'). if($row["ok"] == 0) { $sql="INSERT INTO maquinas VALUES('{$_POST['cod_maq']}'.</p><?php }?> <form method="POST" action="add_maquina.Proyectint. exit.Proyecto Integrado – Francisco José Cruz Jiménez .org </title> </head> <?php session_start().'{$_POST['capa ']}'.?> <p id="introd">Insertado correctamente. mysql_query($sql.org</div--> </body> </html> Add_maquina.'{$_POST['serv']}'.proyectint.css"/> <title> Añadir Máquina . .php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="../index.'{$_POST['notas']}')". } if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) {?> <body> <h1>Añadir Máquina</h1> <p id="introd">Introduce los datos de la nueva máquina para añadir a la Base de Datos de Máquinas. $con) or die(mysql_error()). Prueba de nuevo.$con) or die(mysql_error())./style.'{$_POST['ubic']}'.php" align="center"> <input type="submit" value="Volver a Introducir" class="boton"/> </form><br/> <form method="POST" action="admin. $row = mysql_fetch_array($res).2º ASIR 76 <p><input class="mb10" name="email" type="email"></p> <p><label>Notas</label></p> <p><textarea class="mb10" name="notas" rows="4" cols="40"></textarea></p> <p><input name="submit" type="submit" id="submit" value="Añadir" class="boton"></p> </form> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=".html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><!--div class="bottom">Aplicación Web de Gestión . $res = mysql_query("select count(*) as ok from maquinas where cod_maquina='{$_POST['cod_maq']}'". El campo Código de la Máquina es obligatorio y único... if (isset($_POST['cod_maq'])){?> <body> <h1>Añadir Máquina</h1><?php $con=require('. html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión .php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form> </p><br/> <div id="cuerpo"> <form id="form-login" method="post"> <p><label>Código de la Máquina</label></p> <p><input class="mb10" name="cod_maq" type="text"></p> <p><label>Servicios</label></p> <p><input class="mb10" name="serv" type="text"></p> <p><label>Ubicación</label></p> <p><input class="mb10" name="ubic" type="text"></p> <p><label>Capacidad de Disco</label></p> <p><input class="mb10" name="capa" type="text"></p> <p><label>Notas</label></p> <p><textarea class="mb10" name="notas" rows="4" cols="40"></textarea></p> <p><input name="submit" type="submit" id="submit" value="Añadir" class="boton"></p> </form> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=". $con) or die(mysql_error())..proyectint. $res = mysql_query("select count(*) as ok from usuarios where nombre='{$_POST['usu']}'".Proyecto Integrado – Francisco José Cruz Jiménez . $row = mysql_fetch_array($res)./config_bd.2º ASIR 77 <form method="POST" action="admin..php" align="center"> <input type="submit" value="Volver a Introducir" class="boton"/> .?> <p id="introd">Insertado correctamente.org</div> </body> </html> Add_usuario.$con) or die(mysql_error()). if($row["ok"] == 0) { $sql="INSERT INTO usuarios VALUES ('{$_POST['usu']}'.'{$_POST['cod_cli']} ')"..php')./style.php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href=".</p><?php }?> <form method="POST" action="add_usuario.md5('{$_POST['pass']}').'{$_POST['rol']}'.</p><?php }else{?> <p id="introd">El nombre de usuario introducido está ya en uso.css"/> <title> Añadir Usuario . if (isset($_POST['usu'])){?> <body> <h1>Añadir Usuario </h1><?php $con=require('.Proyectint. mysql_query($sql./index. Prueba de nuevo.org </title> </head> <?php session_start(). <?php }?> </select></p> <p><label for="usuario">Rol</label></p> <p><select class="mb10" name="rol"> <option value="admin">Administrador</option> <option value="cliente" selected="selected">Cliente</option> </select></p> <p><input name="submit" type="submit" id="submit" value="Añadir" class="boton"></p> </form> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=". El campo Nombre es único y el campo Código del Cliente debe de corresponder a uno existente si se está añadiendo a un usuario de cliente. exit.php').html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión .php" align="center"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/><?php mysql_close($con).Proyecto Integrado – Francisco José Cruz Jiménez . si es administrador selecciona 'Ninguno'. $res = mysql_query("select cod_cliente from clientes". <form method="POST" action="admin..php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form> </p><br/> <div id="cuerpo"> <form id="form-login" method="post"> <p><label for="usuario">Usuario</label></p> <p><input class="mb10" name="usu" type="text"></p> <p><label for="usuario">Contraseña</label></p> <p><input class="mb10" name="pass" type="password"></p> <p><label for="usuario">Código del Cliente</label></p> <p><select class="mb10" name="cod_cli"> <option>Ninguno</option><?php while($row = mysql_fetch_array($res)){?> <option><?php echo $row['cod_cliente']?></option>. } if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { $con=require('.org</div> </body> </html> Admin.Proyectint. $con) or die(mysql_error()).php <!doctype html> <html> <head> . mysql_close($con)./config_bd../index.2º ASIR 78 </form><br/> <form method="POST" action="admin.?> <body> <h1>Añadir Usuario</h1> <p id="introd">Introduce los datos del nuevo usuario para dar credenciales de acceso a la aplicación web. /index.proyectint./style.php"> <input type="submit" value="Añadir Cliente en Base de Datos" class="boton"/> </form></td> <td><form method="POST" action="add_maquina.Proyecto Integrado – Francisco José Cruz Jiménez .php"> <input type="submit" value="Consultar Máquinas en Base de Datos" class="boton"/> </form></td> <td><form method="POST" action="con_usuario.php"> <input type="submit" value="Añadir Máquina en Base de Datos" class="boton"/> </form></td> <td><form method="POST" action="add_usuario.org </title> </head> <body> <?php session_start()..2º ASIR 79 <link rel="stylesheet" type="text/css" href=".php"> <input type="submit" value="Consultar Copias de Seguridad" class="boton"/> </form></td> <td><form method="POST" action="admin.css"/> <title> Admin .org Administrador</h1>'. if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { echo '<h1> Bienvenido a proyectint.. ?> <div id="botones"> <table align="center"> <tr> <td><form method="POST" action="add_cliente.php"> <input type="submit" value="Consultar Usuarios Existentes para Aplicación" class="boton"/> </form></td> <td><form method="POST" action="con_copias.php"> <input type="submit" value="Hacer Copia de Seguridad Manual" class="boton"/> </form></td> </tr> <tr></tr> <tr> <td><form method="POST" action="con_cliente.php"> <input type="submit" value="Añadir Usuario para Aplicación" class="boton"/> </form></td> <td><form method="POST" action="cp_seg.html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form> <?php } .php"> <input type="submit" value="Consultar Clientes en Base de Datos" class="boton"/> </form></td> <td><form method="POST" action="con_maquina.php"> <input type="submit" value="Cerrar Sesión" name="exit" class="boton"/> </form></td> </tr> </table> </div> <?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=". org</div> </body> </html> Con_cliente. header("Location: ./index./config_bd.2º ASIR 80 if(isset($_POST["exit"])) { unset($_SESSION["login_proy"])..Proyecto Integrado – Francisco José Cruz Jiménez ...Proyectint. if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { $con=require('. } ?> <br> <div class="bottom">Aplicación Web de Gestión .html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php .proyectint./index.?> <body> <h1>Consultar Clientes</h1> <p id="introd">Estos son todos los clientes que hay almacenados en la Base de Datos.php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="../style. $res = mysql_query("select * from clientes". $con) or die(mysql_error()).css"/> <title> Consultar Clientes .org </title> </head> <?php session_start().php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/> <div id="cuerpo"> <table border="2" bordercolor="black" align="center"> <tr bgcolor="#FA5050" align="center"> <td>Código del Cliente</td> <td>Nombre del Cliente</td> <td>Dirección</td> <td>Persona de Contacto</td> <td>Teléfono</td> <td>Email</td> <td>Notas</td> </tr><?php while($row = mysql_fetch_array($res)){?> <tr bgcolor="#A0F894"> <td><?php echo $row['cod_cliente']?></td> <td><?php echo $row['nombre_cliente']?></td> <td><?php echo $row['direccion']?></td> <td><?php echo $row['persona_contacto']?></td> <td><?php echo $row['telefono']?></td> <td><?php echo $row['email']?></td> <td><?php echo $row['notas']?></td> </tr><?php } ?> </table> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=".</p> <form method="POST" action="admin.html").php'). org</div> </body> </html> Con_maquina. $con) or die(mysql_error()).php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/> <div id="cuerpo"> <table border="2" bordercolor="black" align="center"> <tr bgcolor="#FA5050" align="center"> <td>Código de la Máquina</td> <td>Servicios</td> <td>Ubicación</td> <td>Capacidad de Disco</td> <td>Notas</td> </tr><?php while($row = mysql_fetch_array($res)){?> <tr bgcolor="#A0F894"> <td><?php echo $row['cod_maquina']?></td> <td><?php echo $row['servicios']?></td> <td><?php echo $row['ubicacion']?></td> <td><?php echo $row['capa_disco']?></td> <td><?php echo $row['notas']?></td> </tr><?php } ?> </table> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=".?> <body> <h1>Consultar Máquinas</h1> <p id="introd">Estos son todas las máquinas que hay almacenadas en la Base de Datos./style.org</div> </body> </html> Con_copia.org </title> </head> <?php session_start().html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión ..css"/> <title> Consultar Máquinas . if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { $con=require('../config_bd./index.php <!doctype html> ..Proyectint. $res = mysql_query("select * from maquinas".php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href=".2º ASIR 81 }?> <br/><div class="bottom">Aplicación Web de Gestión .</p> <form method="POST" action="admin.Proyecto Integrado – Francisco José Cruz Jiménez .Proyectint.proyectint.php'). css"/> <title> Copia Manual .html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión . $con) or die(mysql_error()).php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="...php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/> <div id="cuerpo" width="75%"> <table border="2" bordercolor="black" align="center"> <tr bgcolor="#FA5050" align="center"> <td>Código del Cliente</td> <td>Código de la Máquina</td> <td>Fecha de inicio</td> <td>Fecha de Finalización</td> <td>Tipo de Copia</td> <td>Correcta</td> <td>Nombre del Fichero</td> </tr><?php while($row = mysql_fetch_array($res)){?> <tr bgcolor="#A0F894"> <td><?php echo $row['cod_cliente']?></td> <td><?php echo $row['cod_maquina']?></td> <td><?php echo $row['fecha_ini']?></td> <td><?php echo $row['fecha_fin']?></td> <td><?php echo $row['tipo_copia']?></td> <td><?php echo $row['correcta']?></td> <td><?php echo $row['nombre_fichero']?></td> </tr><?php } ?> </table> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action="./style.org </title> </head> .?> <body> <h1>Consultar Copias de Seguridad Realizadas</h1> <p id="introd">Estas son todas las Copias de Seguridad realizadas y almacenadas en la Base de Datos.proyectint.org </title> </head> <?php session_start().Proyectint. if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { $con=require('..2º ASIR 82 <html> <head> <link rel="stylesheet" type="text/css" href=".</p> <form method="POST" action="admin./index. $res = mysql_query("select * from copias"./config_bd.css"/> <title> Consultar Copias .Proyecto Integrado – Francisco José Cruz Jiménez .php').proyectint.org</div> </body> </html> Cop_seg./style.. La ip del cliente debe de ser la perteneciente a la red de OpenVPN.php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href=". mysql_close($con). <form method="POST" action="admin.<?php }?> </select></p> <p><label>Usuario FTP</label></p> <p><input class="mb10" name="usu_ftp" type="text"></p> <p><label>Contraseña FTP</label></p> <p><input class="mb10" name="pass_ftp" type="password"></p> <p><input name="submit" type="submit" id="submit" value="Confirmar" class="boton"></p> </form> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=".php').php"> <p><label>IP Máquina de Cliente</label></p> <p><input class="mb10" name="ip" type="text"></p> <p><label>Código de Cliente</label></p> <p><select class="mb10" name="cliente"><?php while($row = mysql_fetch_array($res)){?> <option><?php echo $row['cod_cliente']?></option>./index.proyectint.html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión ./style.css"/> <title> Copia Manual . $con) or die(mysql_error()).org </title> </head> <?php . $res2 = mysql_query("select cod_maquina from maquinas".Proyecto Integrado – Francisco José Cruz Jiménez . $con) or die(mysql_error()). if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { $con=require('. $res = mysql_query("select cod_cliente from clientes".Proyectint..org</div> </body> </html> Socket...2º ASIR 83 <?php session_start().<?php }?> </select></p> <p><label>Código de la Máquina</label></p> <p><select class="mb10" name="maquina"><?php while($row = mysql_fetch_array($res2)){?> <option><?php echo $row['cod_maquina']?></option>.php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form> </p><br/> <div id="cuerpo"> <form id="form-login" method="post" action="socket.?> <body> <h1>Copia de Seguridad Manual</h1> <p id="introd">Introduce los datos de la nueva copia de seguridad a realizar./config_bd. ' '.' '.org</div> </body> </html> Con_usuario. ?> <form method="POST" action="admin.</h1>".$_POST['cliente']. $tam=strlen($buffer)+1024.. }else{ echo "<h2> Error. } socket_close($socket)./config_bd.0.. if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { $con=require('.. }else{ echo "\n la conexion TCP no se a podido realizar.SOCK_STREAM. No hay datos <h2>".css"/> <title> Consultar Usuarios .proyectint.' manual '.$host.$_POST['pass_ftp']. } echo "<h2>Consulta Copias Realizadas para comprobar resultado<h2>".php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form> </p><br/><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=".?> <body> <h1>Consultar Usuarios</h1> <p id="introd">Estos son todos las usuarios con acceso a la aplicación web.html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión .org </title> </head> <?php session_start().$_POST['usu_ftp']. socket_write($socket. $puerto=6666./index.$puerto).SOL_TCP).$buffer).Proyecto Integrado – Francisco José Cruz Jiménez .php').php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href=".1"./style.Proyectint. $buffer=$_POST['ip']. if($conexion){ echo "<h1>Empezando la copia.</p> <form method="POST" action="admin.$puerto. if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="admin")) { if (isset($_POST['ip'])){ $host="127. $salida=''. $con) or die(mysql_error()).0. $conexion=socket_connect($socket.' '.php" align="right"> <input type="submit" value="Volver a Panel de Control de Administrador" class="boton"/> </form><br/> .2º ASIR 84 session_start().$_POST['maquina']. puerto: ". $res = mysql_query("select * from usuarios"... $socket=socket_create(AF_INET. nombre_fichero from copias c. ?> <br><form method="POST" action="cliente. correcta.?> <body> <h2>Copias de Seguridad Realizadas</h2> <div id="cuerpo"> <table border="2" bordercolor="black" align="center"> <tr bgcolor="#FA5050" align="center"> <td>Código del Cliente</td> <td>Código de la Máquina</td> <td>Fecha de inicio</td> <td>Fecha de Finalización</td> <td>Tipo de Copia</td> .css"/> <title> Cliente . $con) or die(mysql_error()).usuarios u where c. if ((isset($_SESSION["login_proy"])) && ($_SESSION["login_proy"]=="cliente")) { echo '<h1> Bienvenido a proyectint.n" name="exit" class="boton"/> </form> <?php $usu=$_COOKIE["usuario"].cod_cliente and nombre='$usu'"..cod_cliente =u. fecha_fin./index.Proyecto Integrado – Francisco José Cruz Jiménez .Proyectint.proyectint./style.html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form><?php }?> <br/><div class="bottom">Aplicación Web de Gestión .org</div> </body> </html> Cliente.org </title> </head> <body> <?php session_start()./config_bd. tipo_copia..php"> <input type="submit" value="Cerrar Sesió.org Cliente</h1>'.cod_cliente. fecha_ini. $res = mysql_query("select c.2º ASIR 85 <div id="cuerpo"> <table border="2" bordercolor="black" align="center"> <tr bgcolor="#FA5050" align="center"> <td>Usuario</td> <td>Rol</td> <td>Código de Cliente</td> </tr><?php while($row = mysql_fetch_array($res)){?> <tr bgcolor="#A0F894"> <td><?php echo $row['nombre']?></td> <td><?php echo $row['rol']?></td> <td><?php echo $row['cod_cliente']?></td> </tr><?php } ?> </table> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=". $con=require('.php <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href=". cod_maquina.php').. margin-top:-150px.. font-size:12px. width:330px } #contenedor{ background-color:green.org</div> </body> </html> Style. font-family:Arial. -webkit-border-radius:4px.255./index. top:50%. margin: 0 } #envoltura{ position:absolute.Proyectint.3).255.. sans-serif.Proyecto Integrado – Francisco José Cruz Jiménez .html" align="center"> <input type="submit" value="Volver a intentarlo" class="boton"/> </form> <?php } if(isset($_POST["exit"])) { unset($_SESSION["login_proy"]). left:50%. header("Location: .html").css body{ background:#02071D. Helvetica. } ?> <br/> <div class="bottom">Aplicación Web de Gestión ./index.2º ASIR 86 <td>Correcta</td> <td>Nombre del Fichero</td> </tr><?php while($row = mysql_fetch_array($res)){?> <tr bgcolor="#A0F894"> <td><?php echo $row['cod_cliente']?></td> <td><?php echo $row['cod_maquina']?></td> <td><?php echo $row['fecha_ini']?></td> <td><?php echo $row['fecha_fin']?></td> <td><?php echo $row['tipo_copia']?></td> <td><?php echo $row['correcta']?></td> <td><?php echo $row['nombre_fichero']?></td> </tr><?php } ?> </table> </div><?php }else{?> <h1> No estás identificado </h1> <form method="POST" action=". box-shadow: 0 0 0 5px rgba(255. margin-left:-165px.. border-radius:4px } #cabecera{ border-bottom: 1px solid #666. -moz-border-radius:4px. . height:50px. padding:10px 30px } form. background: linear-gradient(top. font-family:'Trebuchet MS'. padding-left: 20px. sans-serif.box-shadow: 0 0 0 2px rgba(0. text-shadow: 1px 1px 2px #000000. background: -webkit-linear-gradient(top. line-height:50px. width: 244px } input#pass{ background:#fff no-repeat 0 -53px. width: 244px } .#eee.0.0. padding:0 2px } input#usuario{ background:#fff no-repeat 0 -23px. font-size:28px.p{ margin:0 } p{ padding-bottom: 5px } .mb10{ margin-bottom: 10px } label{ color: black.Proyecto Integrado – Francisco José Cruz Jiménez . sans-serif.2º ASIR 87 color:#FFF.1).#ccc). height: 24px. Helvetica. border-width: 1px 0.. .#ccc).#ccc). text-align:center } #cuerpo{ background:#ececec.boton{ background: #ccc. border:solid #ccc. background: -moz-linear-gradient(top. line-height: 24px. color: black.#eee. padding-left: 20px.#eee. Helvetica. font-weight: bold } input{ border: 1px solid #999. font:bold 12px Arial. border-radius:2px. Proyecto Integrado – Francisco José Cruz Jiménez . line-height: 24px. font-size: 11px. font: Georgia } h2{ color: white. border-top: 1px solid #666. text-align: center. top: 1px } #pie{ border-top: 1px solid #666. font: Georgia } #introd{ color: white.2º ASIR 88 padding:0 10px } . width: 100%. height: 24px. font-size: 11px.bottom { position: absolute.boton:active{ position: relative. font: Georgia. color: #fff. bottom: 10px. font-size: 14px. text-align: center } h1{ color: white. text-align: center. } . text-align: center. color: #fff. margin: 30px } . height: 24px. line-height: 24px.