Crear un servidor hosting seguro con Debian, LAMP y SFTP
Creo que el nombre del artículo ya es bastante descriptivo, vamos a ver como instalar y configurar un servidor para servicios de hosting, utilizando como sistema operativo GNU Linux, en este caso Debian, en su versión 8, con un servidor LAMP y daremos acceso a nuestros clientes a sus páginas webs vía SFTP
Hosting seguro con Debian, LAMP y SFTP
He utilizado un nuevo entorno de virtualización con el que llevo poco tiempo trabajando. Se trata de Proxmox, que utiliza la tecnología QEMU/KVM
Creamos una máquina virtual en Proxmox
Todavía no he tratado en la web el producto Proxmox, vamos a utilizar éste artículo para echarle un vistazo, creando la máquina virtual que utilizaremos para el servidor de hosting.
Yo ya tengo instalado Proxmox en un servidor físico, al cual me conecto vía interfaz web.
Podéis obtener información sobre dicho producto y su instalación , que es bien sencilla, en su página web. [proxmox.com]
Accedo al panel web:
En la «Vista Carpetas«, crearemos una máquina virtual, en la parte superior derecha, marcando «Crear VM«
En el primer paso indicaremos el nombre de la máquina.
El tipo de sistema operativo.
La imagen ISO o CD/DVD, yo ya tengo varias imagenes ISO guardadas, incluida la de Debian 8 «Jessie»
Asignamos el espacio que creamos conveniente. Yo he asignado un espacio de 64 GB, en formato ‘qcow2‘, propio de QEMU, también podemos escoger otros como VMDK, propio de VMWARE
En la pestaña siguiente asignamos números de CPU y cores.
Desde el panel de Proxmox, en la creación la máquina virtual, podemos asignarle memoria fija o memoria de automática, es decir, siempre tendrá una memoria mínima asignada, pero si se da el caso que la supera, podrá utilizar hasta un máximo asignado.
Por último asignaremos la red. Yo de momento tengo una única red en uso.
Con todos estos pasos ya tenemos la máquina configurada. El proceso de creación puede tardar un poco, depende de las características de nuestro hardware.
Ya podemos ver la nueva máquina, llamada ‘DebianHosting‘ creada.
Si hacemos ‘click’ con el botón derecho sobre la máquina, veremos un desplegable con varias opciones, elegiremos «Iniciar«
En el mismo desplegable escogemos «Consola», para poder acceder vía VNC de manera cifrada.
Entiendo que la mayoría de usuarios que están leyendo el artículo ya han instalado Debian alguna vez, o algún sistema similar. Por lo que en ésta parte no profundizaré.
Instalar servicios LAMP (Apache2, MySQL, PHP5)
En la web ya he hablado alguna vez de la instalación, pero como quiereo hacer una configuración un poco diferente, éste paso no me lo saltaré.
Actualizamos el sistema:
1 | apt-get -y update |
Instalamos el servicio Apache2
1 | apt-get -y install apache2 |
Realizamos la instalación de los paquetes necesarios del servidor MySQL
1 | apt-get -y install mysql-server mysql-common mysql-client |
Le toca el turno a PHP5 y al módulo de apache2
1 | apt-get -y install php5 libapache2-mod-php5 |
Podemos también añadir los módulos gd y curl, que se suelen utilizar en los proyectos web.
1 | apt-get -y install php5-curl php5-gd |
Y por último el módulo mysql para PHP
1 | apt-get -y install php5-mysql |
Ya podemos reiniciar el servicio web:
1 | service apache2 restart |
Si todo ha ido bien, ya podremos ver la siguiente imagen en nuestro navegador:
Configurar los diferentes Virtual Host en Apache
Para poder funcionar los diferentes proyectos web, debemos crear los diversos vhost en la configuración de Apache2.
Imaginemos que tenemos tres proyectos web, los tres utilizan WordPress, se tratan varios desarrollo personales, de Juan, María y Carmen. Que llamaremos:
- juanfotografias.com
- mariadesarrollos.es
- carmeningieneria.net
Creamos sendas carpetas en /var/www/
1 | mkdir /var/www/juanfotografias.com |
1 | mkdir /var/www/juanfotografias.com/htdocs |
1 | mkdir /var/www/mariadesarrollos.es |
1 | mkdir /var/www/mariadesarrollos.es/htdocs |
1 | mkdir /var/www/carmeningieneria.net |
1 | mkdir /var/www/carmeningieneria.net/htdocs |
Es importante crear la subcarpeta htdocs, que será donde el usuario vía SFTP podrá modificar los ficheros y carpetas.
Utilizaremos el fichero /etc/apache2/sites-available/000-default.conf como plantilla para modificar con los datos de cada web.
Ahora lo copiaremos para cada uno de nuestros proyectos:
1 | cp /etc/apache2/sites-availabe/000-default.conf /etc/apache2/sites-available/juanfotografias.com.conf |
1 | cp /etc/apache2/sites-availabe/000-default.conf /etc/apache2/sites-available/mariadesarrollos.es.conf |
1 | cp /etc/apache2/sites-availabe/000-default.conf /etc/apache2/sites-available/carmeningieneria.net.conf |
Modificamos el primero:
1 | nano /etc/apache2/sites-available/juanfotografias.com |
Lo modificamos de la siguiente manera:
1 2 3 4 5 6 7 | # Ensure that Apache listens on port 80 Listen 80 # Listen for virtual host requests on all IP addresses NameVirtualHost *:80 ServerName www.juanfotografias.com ServerAlias juanfotografias.com |
1 | DocumentRoot /var/www/juanfotografias.com/htdocs |
Esto lo debemos hacer con los tres ficheros, en cada uno debemos indicar la ubicación del proyecto.
Ahora añadiremos los Virtual Host:
1 | a2ensite juanfotografias.com |
1 | a2ensite mariadesarrollos.es |
1 | a2ensite carmeningieneria.net |
De ésta manera se ubicará un enlace en la carpeta /etc/apache2/sites-enabled
Y podemos reiniciar otra vez el servidor:
1 | service apache2 restart |
Hasta ahora hemos hecho una configuración básica, evidentemente quedarían muchas cosas por hacer, para que no sea muy extenso el artículo, ésta parte la dejaremos como finalizada.
Acceder al hosting vía SFTP
Ahora toca una parte muy interesante, ya que crearemos usuarios «enjaulados» dentro de las carpetas de sus proyectos.
Instalaremos el servicio openssh:
1 | apt-get -y install openssh-server |
1 | apt-get -y install openssh-client |
Crearemos usuarios y el grupo de usuarios:
1 | groupadd usuariossftp |
1 | useradd -g usuariossftp -s /bin/false -d /var/www/juanfotografias/ Juan |
1 | useradd -g usuariossftp -s /bin/false -d /var/www/mariadesarrollos/ Maria |
1 | useradd -g usuariossftp -s /bin/false -d /var/www/carmeningieneria/ Carmen |
Y asignamos contraseña a cada usuario:
1 | passwd Juan |
1 | passwd Maria |
1 | passwd Carmen |
Ahora asignaremos permisos de propietario sobre la carpeta htdocs correspondiente al usuario:
1 | chown Juan:usuariossftp /var/www/juanfotografias.com/htdocs |
1 | chown Maria:usuariossftp /var/www/mariadesarrollos.es/htdocs |
1 | chown Carmen:usuariossftp /var/www/carmeningieneria.net/htdocs |
Modificamos el fichero de configuración /etc/ssh/sshd_config
1 | nano /etc/ssh/sshd_config |
Modificamos la línea:
1 | Subsystem sftp /usr/lib/openssh/sftp-server |
Por:
1 | Subsystem sftp internal-sftp |
Y añadimos al final del fichero:
1 2 3 4 5 6 7 8 9 10 | UsePAM yes Match user Juan ChrootDirectory /var/www/juanfotografias.com ForceCommand internal-sftp Match user Maria ChrootDirectory /var/www/mariadesarrollos.es ForceCommand internal-sftp Match user Carmen ChrootDirectory /var/www/carmeningienerias.net ForceCommand internal-sftp |
De ésta manera podremos acceder por usuario a cada carpeta.
Recordad reiniciar el servicio ssh.
Para que todo funcione bien debemos de asignar a la carpeta /var/www/ y a las de cada usuario como propietario a root, utilizando el comando chown, con los permisos 755, realizando lo propio con chmod. Para que pueda escribir el usuario usaremos la carpeta htdocs, que tendrá como propietario correspondiente el usuario.
Para el artículo me he servido de bastante información de Internet utilizando licencias libres:
esdebian.org | askubuntu.com | nireleku.com