Estado echando un vistazo a paneles libres el otro día… y decidido montar un servidor web para despues probar distintos paneles de Hosting.
Para empezar tenemos que tener instalado Debian, sin interfaz gráfica.
Configurar dirección IP:
rokitoh@redorbita:~# nano /etc/network/interfaces
añadimos al final:
auto eth0
iface eth0 inet static
address 192.168.1.120
netmask 255.255.255.0
gateway 192.168.1..233
Para guardar Ctrl + O
Para salir Ctrl + X
El gateway es el servidor DNS, que ya en manuales anteriores instalamos. Ver manual servidor DNS
Editamos resolv.conf
Es necesario configurar el archivo para poder resolver los nombres de los servidores en Internet.
rokitoh@redorbita:~# nano /etc/resolv.conf
y añadimos:
domain red-orbita.com
nameserver 192.168.1.233 #Servidor DNS
Para guardar Ctrl + O
Para salir Ctrl + X
Editamos /etc/hosts
El archivo hosts de un ordenador es usado por el sistema operativo para guardar la correspondencia entre dominios de Internet y direcciones IP
rokitoh@redorbita:~# nano /etc/hosts
añadimos:
192.168.1.120 red-orbita.com www
Para guardar Ctrl + O
Para salir Ctrl + X
Nos vamos a nuestro servidor DNS para configurarlo.
rokitoh@redorbita:~# cd /etc/bind
Configuramos las zonas
rokitoh@redorbita:~# nano redorbita.com
y añadimos:
www IN A 192.168.1.120
Para guardar Ctrl + O
Para salir Ctrl + X
iniciamos el servidor DNS
rokitoh@redorbita:~# /etc/init.d/bind9 restart
Empezamos a instalar los paquetes necesarios:
rokitoh@redorbita:~# apt-get install apache2 apache2-mpm-prefork php5 libapache2-mod-php5 php5-gd php5-ps php5-cli php-pear php5-gd libapache2-mod-chroot debootstrap
Enjaulamos Apache
Creamos los directorios:
rokitoh@redorbita:~# mkdir -p /home/rokitoh/var/chroot/etc
rokitoh@redorbita:~# mkdir -p /home/rokitoh/var/chroot/var/www
rokitoh@redorbita:~# mkdir -p /home/rokitoh/var/chroot/var/run
mkdir -p /home/rokitoh/var/chroot/usr/share/zoneinfo/Europe/
Creamos la jaula chroot:
rokitoh@redorbita:~# debootstrap lenny /home/rokitoh/var/chroot http://ftp.fr.debian.org/debian
(Paciencia, se tira un rato)
Copiamos los ficheros importantes dentro de la jaula:
rokitoh@redorbita:~# cp -a /etc/resolv.conf /home/rokitoh/var/chroot/etc/
rokitoh@redorbita:~# cp -a /etc/hosts /home/rokitoh/var/chroot/etc/
rokitoh@redorbita:~# cp -a /etc/mime.types /home/rokitoh/var/chroot/etc/
rokitoh@redorbita:~# cp -a /usr/share/zoneinfo/Europe/Madrid /home/rokitoh/var/chroot/usr/share/zoneinfo/Europe/
rokitoh@redorbita:~# cp -a /etc/adjtime /home/rokitoh/var/chroot/etc/
Instalamos apache2 dentro de la jaula
rokitoh@redorbita:~# chroot /home/rokitoh/var/chroot apt-get update
rokitoh@redorbita:~# chroot /home/rokitoh/var/chroot apt-get install apache2.2-common apache2-utils
Necesitamos copiar el «pidfile» de apache. Una vez copiado ese «pidfile» habrá que enlazarlo fuera de la jaula. De esta manera nos aseguraremos que esté accesible desde ambos sitios.
rokitoh@redorbita:~# mv /var/run/apache2.pid /home/rokitoh/var/chroot/var/run/apache2.pid
lrokitoh@redorbita:~# n -s /home/rokitoh/var/chroot/var/run/apache2.pid /var/run/apache2.pid
Nota:
A partir de la versión 2.2.10 de apache, ya no es necesario utilizar libapache2-mod-chroot (ni mod-chroot-common) para enjaular este servicio. De hecho, ese antiguo módulo provoca un conflicto que podreis ver en los logs de apache con forma de [alert] (2)No such file or directory: Can’t chdir to . La solución es muy sencilla, borramos/purgamos los dos paquetes mencionados, quitamos el fichero /etc/apache2/mods-enabled/mod_chroot.load y reiniciamos apache (/etc/init.d/apache2 restart)
Configurar Apache
rokitoh@redorbita:~# nano /etc/apache2/sites-available/default
DocumentRoot /home/rokitoh/var/chroot/var/
RedirectMatch ^/$ /www/
Abrimos un navegador y accedemos al servidor web, en mi caso: http://192.168.1.120
y podemos ver que nos redirige a la carpeta /www dentro de la carpeta personal de nuestro usuario /home/rokitoh
rokitoh@redorbita:~# chroot /home/rokitoh/var/chroot/ apt-get install php5-common
A continuación vamos añadirle una linea al directorio apache2.conf para poder tener servicio PHP en el servidor web. para ello ejecutamos el siguiente comando en un terminal:
rokitoh@redorbita:~# echo “DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.shtml” >> /home/rokitoh/var/chroot/etc/apache2/apache2.conf
Para verificar que se a añadido esa linea al archivo podemos ejecutar:
rokitoh@redorbita:~# cat /home/rokitoh/var/chroot/etc/apache2/apache2.conf
y al final de la linea podemos observar la linea.
Comprobamos si realmente tenemos servicio php, para ello vamos a crear un archivo llamado: compatible.php
rokitoh@redorbita:~# nano /home/rokitoh/var/chroot/var/www/compatible.php
En el archivo ponemos el siguiente codigo:
<?php phpinfo(); ?>
Para guardar Ctrl + O
Para salir Ctrl + X
Abrimos un navegador y accedemos al archivo guardado: http://192.168.1.120/www/compatible.php
Si todo a ido bueno nos tendrá que mostrar una pantalla como esta:
Instalar MySQL
rokitoh@redorbita:~# apt-get install mysql-server-5.0 mysql-client-5.0 php5-mysql
Debian nos abrira una ventana con la configuración de mysql-server para establecer una contraseña.
Paramos el servicio:
rokitoh@redorbita:~# /etc/init.d/mysql stop
Movemos la carpeta del pidfile y el socket de mysql y enlazamos
rokitoh@redorbita:~# mv /var/run/mysqld /home/rokitoh/var/chroot/var/run/mysqld
rokitoh@redorbita:~# ln -s /home/rokitoh/var/chroot/var/run/mysqld /var/run/mysqld
Arrancamos el servicio de mysql:
rokitoh@redorbita:~# /etc/init.d/mysql start
Instalar phpmyadmin
phpMyAdmin es una herramienta escrita en PHP con la intención de manejar la administración de MySQL a través de páginas web, utilizando Internet. Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves en campos, administrar privilegios, exportar datos en varios formatos y está disponible en 50 idiomas. Se encuentra disponible bajo la licencia GPL
para installarlo:
rokitoh@redorbita:~# apt-get install phpmyadmin
Copiamos el bichero a nuestro servidor web:
rokitoh@redorbita:~# cp -a /usr/share/phpmyadmin /home/rokitoh/var/chroot/var/www
Abrimos un navegador y ponemos la URL, en mi caso: http://192.168.1.120/www/phpmyadmin/
y si todo a salido bien, nos tendrá que salir una pantalla como este para logearnos
Instalar phpsysinfo
phpSysInfo es un script PHP open source que se instala el servidor y ofrece un detallado informe sobre el software y el hardware del mismo. En este informe se encuentran datos sobre:
- Información básica del sistema.
- Información sobre el hardware.
- Información de la red.
- Información sobre el uso de la red y la memoria.
Para instalarlo:
rokitoh@redorbita:~# apt-get install phpsysinfo
Copiamos el archivo:
rokitoh@redorbita:~# cp -a /var/ww/phpsysinfo /home/rokitoh/var/chroot/var/www
Abrimos de nuevo el navegador y accedemos para ver si esta instalado perfectamente: http://192.168.1.120/www/phpsysinfo/index.php?disp=dynamic
si os fijáis en el en la esquina superior derecha tenéis 2 opciones, para modificar el idioma y el aspecto. cambiarlo a vuestro gusto.
Instalar SFTP
SSH File Transfer Protocol (también conocido como SFTP o Secure File Transfer Protocol) es un protocolo de red que proporciona la funcionalidad necesaria para la transferencia y manipulación de archivos sobre un flujo de datos fiable. Se utiliza comúnmente con SSHpara proporcionar la seguridad a los datos, aunque permite ser usado con otros protocolos de seguridad. Por lo tanto, la seguridad no la provee directamente el protocolo SFTP, sino SSH o el protocolo que sea utilizado en su caso para este cometido.
instalamos openssh
rokitoh@redorbita:~# apt-get install openssh-server openssh-client
Vamos a crear un grupo el cual añadiremos todos los usuarios que queramos enjaular
rokitoh@redorbita:~# groupadd chroot
Creamos el usuario:
rokitoh@redorbita:~# useradd -g chroot s /bin/false -d /home/rokitoh/var/chroot/var/www rokitoh
Definimos una contraseña al usuario creado:
passwd rokitoh
Introduzca la nueva contraseña de UNIX:
Vuelva a introducir la nueva contraseña de UNIX:
Para configurar un servidor SFTP restringido uno debería usar las directivas ForceCommand y ChrootDirectory en el archivo de configuración sshd_config, que se encuentra en /etc/ssh/sshd_config.
rokitoh@redorbita:~# nano /etc/ssh/sshd_config
Nos vamos a la linea:
#Subsystem sftp /usr/local/openssh/libexec/sftp-server
y la modificamos por:
Subsystem sftp internal-sftp
También buscamos y modificamos estas lineas:
LoginGraceTime 30
PermitRootLogin no
Puede restringirse el servicio a usuarios o a grupos de usuarios, de modo que si se requiere aplicar enjaulado al usuario1 usamos la directiva Match como sigue:
UsePAM yes
Match user rokitoh
ChrootDirectory /home/rokitoh/var/chroot/var/www
ForceCommand internal-sftp
Para el enjaulado del grupo chroot se hace de manera similar (de esta forma aparecerán en el directorio raíz todos los usuarios que hayamos creado):
Match group chroot
ChrootDirectory /home/rokitoh/var/chroot/var/www
ForceCommand internal-sftp
En el próximo capitulo veremos como integrar el panel de control GNUPanel…y daremos un poco mas de seguridad a apache.
Fuentes:
http://www.esdebian.org/wiki/enjaulado-sftp
http://www.esdebian.org/wiki/apache2-modchroot-soporte-php5-mysql
http://www.forat.info/2008/03/05/como-montar-un-servidor-web-con-linux-debian/
Leí la parte de guía para SFTP enjaulado, y he aprendido mucho de tutoriales como este. Aquí enlazo mi compendio para una óptima configuración tanto del cliente como del servidor:
http://wiki.lapipaplena.org/index.php/Como_montar_accesos_SFTP
(con especial cuidado sobre usuarios y permisos)