domingo, 10 de febrero de 2013

Activar servidor apache para todos los usuarios del sistema

Vamos a convertir una máquina con Ubuntu 12.04 Server en un servidor web donde todos los usuarios podrán insertar páginas web.

Instalar el software

Necesitamos instalar el servidor apache y un servidor ftp:

Instalar apache

Podremos instalar apache de tres maneras:
  1. Con tasksel instalamos Apache-MySQL-PHP: Usamos el comando 'sudo tasksel install lamp-server'.
  2. Instala individualmente la instalación de apache: Sudo apt-get install apache2
  3. Instalando manualmente apache a partir de una descarga de la web de apache: Si compilamos la aplicación podremos realizar una configuración personalizada que será imposible con los paquetes distribuidos con Ubuntu.

Instalar vsftp

Existen varios servidores ftp para Linux, pero el que documenta Ubuntu Server es vsftp. Para instalarlo solamente tenemos que ejecutar: sudo apt-get install vsftpd.

Pasos de la configuración

Activar el módulo userdir

Para que los usuarios puedan acceder a sus propias carpetas de usuario y tener su propio sitio web, debemos de habilitar el módulo usermod (para ver mas información http://httpd.apache.org/docs/2.2/mod/mod_userdir.html). Este módulo se encarga de crear un sitio web para cada usuario del sistema, sitio que estará accesible en el subdirectorio web ~<nombreusuario> (como en http://serve4.emc.home/~emc2).
Para activar el módulo usamos a2enmod userdir, quedando activado con sus valores por defecto, que podremos encontrar en el fichero /etc/apache2/mods-enabled/userdir.conf (además existe un fichero de carga del módulo en /etc/apache2/mods-enabled/userdir.load).
Si queremos configurar el módulo, debemos editar el fichero userdir.conf, aunque es una tarea que nosotros no realizaremos y que se describe en la documentación del módulo.
Ya solo nos queda recargar la configuración en el servidor con sudo service apache2 reload

Crear la estructura de directorios usada por userdir en /etc/skel

Userdir permite servir el directorio public_html de cada usuario como una página web personal. Para que esto funcione, debemos disponer de la carpeta y que esta tenga algún tipo de contenido, solo nos queda crear la carpeta en el directorio del usuario.
Pero si queremos que los usuarios nuevos tengan su propia web en blanco, deberemos crear estos ficheros y  carpetas en el directorio /etc/skel, de forma que cuando se cree un usuario nuevo este tenga activado el soporte para su página web personal:
$ cd /etc/skel
$ mkdir public_html
$ echo Este es mi sitio > public_html/index.html
Tras esto, los nuevos usuarios tendrán su sitio personal en public_html.
En el caso de los usuarios existentes, deberé acceder a su carpeta de usuario y crear el directorio public_html

Como accedo a la web del usuario

mediante la dirección 'http://servidor/~nombre-usuario', como por ejemplo en "http://server4.emc.home/~juan"

Configurar ftp para el acceso de los usuarios a la carpeta public_html

Por defecto, nuestro servidor FTP permite acceso anónimo, pero no permite el acceso a los usuarios del sistema. Vamos a modificar varias líneas del fichero /etc/vsftpd, para lo cual lo abrimos con un editor de textos, como podría ser gedit (con sudo gedit /etc/vsftpd):
  1. Deshabilito el acceso anónimo:
    1. Si queremos deshabilitar el acceso de usuarios anónimos al servidor modifico la línea 'anonymous_enable=Yes' por 'anonymous_enable=No'. 
    2. El servidor ftp usa el directorio /srv/ftp para los usuarios anónimos, podría ser una buena idea borrar el directorio en cuestión, aunque no lo veo demasiado necesario.
    3. En caso de que tenga habilitado el usuario anónimo y quiera permitir que este suba ficheros al servidor, habilito la orden 'anon_upload_enable=YES'
  2. Habilito la autenticación de los usuarios del sistema:
    1. Habilito la línea 'local_enable=YES' que me permitirá usar los usuarios locales con vsftp.
    2. Habilito la escritura para los usuarios locales con 'write_enable=YES'
  3. Asegurando ftp:
    1. Si quiero limitar a que los usuarios solo puedan escribir en su carpeta de usuario a través de ftp habilito 'chroot_local_user=YES'
    2. Si quiero que solo puedan acceder por ftp una lista de usuarios, habilito 'chroot_list_enable=YES'
    3. La lista de los usuarios que pueden iniciar sesión en el sistema la guardo en el fichero '/etc/vsftpd.chroot_list' (un usuario por línea) y tengo que añadir una línea indicando la ubicación del fichero en 'chroot_list_enable=YES'
  4. Usar FTPS:
    1. Si quiero habilitar FTPS (FTP sobre SSL) habilito la línea 'ssl_enable=YES'
    2. Tras habilitar FTPS debo indicar las ubicaciónes de las claves públicas y privadas que va a usar el sistema para encriptar las comunicaciones. Para ello modifico dos variables:
      1. 'rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem' para la clave pública
      2. 'rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key' para la clave privada
      3. Estas dos claves existen por defecto cuando se instala el paquete 'ssl-cert' (para instalarlo, si no existen los ficheros usamos 'sudo apt-get install ssl-cert')
Ni que decir tiene que para que los cambios que hayamos realizado se apliquen debemos de reiniciar el servidor ftp con 'sudo service vsftpd restart'

Enlaces