Hemos instalado apache2 como servidor HTTP en nuestro sistema informático.
En un futuro nos gustaría poder desarrollar una aplicación web simple que nos permita la gestión básica de nuestro servidor a través de conexiones HTTPS.
Ahora mismo lo que si queremos hacer es permitir que los usuarios del sistema que lo deseen puedan tener alojado un sitio web personal dentro de su propio directorio personal.
Enunciado
Queremos que cualquier usuario del sistema tenga en su directorio personal un directorio llamado web de forma que sea el directorio raíz de su sitio web personal. Es decir, todo lo que deje en este directorio estará disponible como su sitio web personal. Por ejemplo, para marinapg, tendría el directorio /home/marinapg/web si dentro de este directorio crea un fichero index.html con una página web, esta página web se cargará cuando alguien utilice la siguiente URL: http://192.168.23.100/~marinapg
Para que esto funcione, el primer paso será configurar apache2 para que utilice el módulo userdir y además vamos a instalar php y la librería de apache2 para php en nuestro sistema. Esto lo explicaremos en el apartado proceso.
Para facilitarnos la creación de directorios web para los usuarios del sistema, vamos a llevar a cabo un par de acciones, una de configuración del directorio esqueleto para crear directorios personales de usuario y otra de automatización.
Vamos a configurar el directorio esqueleto de cuenta de usuario para que automáticamente, cuando creemos un nuevo usuario, éste contenga en su directorio personal un directorio llamado web, cuyo contenido será una página de índice index.html sencilla.
También queremos crear un script que compruebe si los usuarios del sistema tienen disponible el directorio web en su directorio personal y si no lo tienen disponible lo creará. Además el script deberá cerciorarse de que tanto el directorio web como el contenido del directorio pertenece al usuario y al grupo www-data y que este último tiene permisos de lectura.
Por último, el script debe asegurarse de que el grupo www-data tendrá permiso de acceso para lectura tanto en el directorio personal del usuario como en el directorio web que está dentro de su directorio personal.
Para conseguir todo esto vamos a realizar un proceso paso a paso que se explica a continuación.
Proceso de configuración del sistema
Instalando el software
Vamos a instalar los siguientes paquetes de software en el sistema: php libapache2-mod-php.
El primer paquete instalará interprete de php en nuestro sistema de forma que podamos ejecutar programas escritos en php.
El segundo paquete instalará un módulo para apache2 que permitirá que apache2 pueda ejecutar código php tanto embebido dentro de las páginas web o independiente.
Instalamos el software en nuestro sistema con la opción install del comando apt.
Comprobar apache2
Podemos comprobar si apache2 está disponible y funcionando en el sistema GNU/Linux Debian accediendo desde windows a través de un navegador web a la dirección IP de la máquina.
Podemos comprobar si tenemos instalado php y soporte para php en apache creando un pequeño fichero php que almacenaremos en el directorio raíz de apache2 por defecto que es /var/www/html.
En nuestro caso crearemos un fichero info.php que mostrará la información de php en el servidor. Podemos hacerlo desde Windows con notepad++, guardarla en el directorio personal del usuario y después moverla.
También podríamos iniciar sesión con ssh y crear el fichero con nano. De cualquier forma, podemos ver que el fichero lo tenemos en nuestro directorio personal.
Ahora tan solo tenemos que copiar el fichero al directorio raíz por defecto de apache2: /var/www/html
Cuidado, porque según los permisos del fichero, tan solo podrá ser leido, escrito y ejecutado por su propietario. Nosotros queremos que sea leido por apache2, así que la forma más sencilla es replicar los permisos de index.html, es decir lectura para todos.
Si accedemos desde Windows 10 al fichero info.php debería mostrarnos información sobre php.
Configurando el módulo userdir
En este documento no nos vamos a centrar en la configuración de apache2 más allá de lo necesario para realizar un caso práctico un poco más interesante. No obstante, si que vamos a dar una explicación breve sobre los módulos en general y sobre como activarlos, así como configurar el módulo userdir de forma sencilla.
Los módulos de apache son pequeños complementos del servidor http que le agregan cierta funcionalidad extra sobre la funcionalidad que este tiene. Tenemos una serie de módulos disponibles en la instalación de apache2 que estén dentro del directorio de configuración de apache2 (/etc/apache2) con el nombre de mods-available.
Para que un módulo sea usado por apache2, tiene que estar habilitado. Los módulos habilitados están en el directorio mods-enabled dentro del directorio de configuración de apache2.
En nuestro caso vamos a configurar el módulo userdir y después habilitarlo. Para configurar el módulo userdir, lo primero que tenemos que hacer es editar su fichero de configuración /etc/apache2/mods-available/userdir.conf
Usamos nano para editarlo.
Si nos fijamos tenemos el nombre del directorio en el que este módulo buscará las páginas webs personales de los usuarios y la ruta de dicho directorio.
Tan solo tenemos que cambiar estas líneas, por un lado con el nombre, y por otro con la ruta del directorio web personal para que funcione.
Una vez editado y cambiado, lo único que tenemos que hacer es habilitar el módulo. Para ello utilizaremos el comando a2enmod seguido del nombre del módulo, en nuestro caso userdir.
Ahora reiniciamos el servicio para que se actualice apache2.
Para poder comprobar si funciona, vamos a crear un directorio llamado web dentro del directorio personal de alumno y dejaremos un fichero de índice index.html.
Movemos el fichero al directorio web
Sin embargo, esto tiene pinta de que va a fallar…
El acceso funciona, pero no tiene permisos para acceder al recurso solicitado.
Veamos los permisos de acceso, puesto que apache2 tiene que poder llegar hasta los ficheros del sitio web para poder leerlos y mandarlos por la red a través de HTTP o HTTPS.
El problema no está en web, sino en el directorio personal del usuario alumno, al que no puede acceder nadie más excepto alumno.
Para que apache2 pueda servir una web debería tener permiso de acceso al menos para lectura a los ficheros del sitio web. El problema está en que, por seguridad, tenemos configurado el directorio personal del usuario alumno para que solo él pueda acceder. Si damos permiso de acceso y lectura a todos los usuarios, apache2 podrá acceder, pero también podrá acceder cualquier usuario del sistema y eso no es lo que queremos. Queremos que tan solo pueda acceder apache2 para realizar operaciones de lectura.
Apache2 usa como cuenta de usuario www-data, que tiene como grupo primario el grupo www-data.
Podemos usar el grupo www-data para asignarlo a los directorios por los que apache2 tenga que pasar para que pueda llegar al sitio web. De esta forma, si asignamos como grupo del directorio personal del usuario a www-data y le damos permiso de acceso y lectura, apache2 debería poder acceder al directorio web que está dentro del directorio personal del usuario.
Si actualizamos el navegador desde Windows ahora si se mostrará algo diferente.
Dejar una respuesta