Hasta ahora hemos visto cómo montar nuestro sitio web permitiendo, o bien acceso público al mismo o bien usando autenticación LDAP. En este artículo explicaré como restringir el acceso a determinadas carpetas de nuestro sitio –o al sitio entero- empleando las posibilidades de autenticación básicas incorporadas en Apache.
1.- Montando un sitio de Acceso público
Para hacerlo, en primer lugar debemos tener creado un sitio web, en mi caso www.mczones.es al que se puede acceder públicamente. A continuación os copio la configuración básica del sitio antes de realizar ninguna modificación:
Fichero /etc/apache2/sites-available:
He creado una entrada en el fichero /etc/hosts para la realización de pruebas de tal modo que www.mczones.es apunte a la 127.0.0.1
Recargamos/reiniciamos apache para comprobar que el sitio por defecto funciona:
/etc/init.d/apache2 reload
/etc/init.d/apache2 restart
Finalmente comprobamos que todo está funcionando normalmente
2.- Configurando una zona de acceso privado
Una vez que nuestro sitio web está funcionando vamos a crear una carpeta a la que sólo daremos acceso a usuarios autenticados empleando la autenticación básica proporcionada por apache.
Para ello, en primer lugar crearemos la carpeta en la que queramos restringir el acceso a determinados usuarios:
mkdir /var/www/mczones/privado
A continuación debemos crear el fichero dónde se almacenarán los usuarios y contraseñas de los usuarios que tendrán acceso a la zona restringida. Para ello, en primer lugar nos crearemos una carpeta (fuera de nuestro sitio web) en la que crearemos el fichero:
mkdir /etc/apache2/mczones
Dentro de ella creo el fichero de contraseñas y ya añado el usuario juan:
htpasswd -c /etc/apache2/mczones/passwords juan
Me pedirá la contraseña para el usuario:
Una vez hecho nos vamos al fichero de configuración de nuestro sitio web –en /etc/apache2/sites-available/mczones - y añadimos los parámetros necesarios para permitir la autenticación.
En primer lugar hemos de insertar la directiva que nos permita modificar/añadir los parámetros de configuración de acceso:
AllowOverride AuthConfig
Posteriormente añadimos el directorio que queremos hacer de uso restringido especificando los permisos que van a tener los usuarios, el lugar dónde guardamos el fichero con los passwords encriptados (fuera de nuestro sitio web, por favor) y a qué usuarios o grupos de usuarios vamos a permitir el acceso. Un ejemplo completo del fichero podría ser:
NameVirtualHost *:80Tras guardar las modificaciones reiniciamos/recargamos apache y comprobamos que todo ha ido bien:
<VirtualHost *:80>
ServerAdmin webmaster@mczones.es
ServerName www.mczones.es
ServerAlias mczones.es
DirectoryIndex index.html
DocumentRoot /var/www/mczones/
<directory />
Options FollowSymLinks
AllowOverride None
</directory>
<directory /var/www/mczones>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
<directory /var/www/mczones/privado>
AllowOverride AuthConfig
AuthType Basic
AuthName "Acceso restringido a alumnos A Carballeira"
# (La siguiente línea es opcional)
AuthBasicProvider file
AuthUserFile /etc/apache2/mczones/passwords
Require user juan
Order allow,deny
Allow from all
</directory>
UseCanonicalName off
</VirtualHost>
/etc/init.d/apache2 reload
/etc/init.d/apache2 restart
Si ahora intentamos acceder a nuestra carpeta “restringida” veremos que nos pide un usuario y contraseña (OJO QUE IRÁN EN TEXTO PLANO POR LA RED SI NO EMPLEAMOS CERTIFICADOS/HTTPS) y tras introducir los usuarios correctos nos dará acceso a la carpeta:
*Para añadir nuevos usuarios emplear htpasswd sin el parámetro –c o eliminaremos el fichero anterior y crearemos uno nuevo.
2.1 Creación de grupos de usuarios
Si lo que queremos es restringir el acceso basándonos en grupos de usuarios, el procedimiento es muy similar:- en primer lugar creamos los usuarios –añadiéndolos al fichero con htpasswd-
- Creamos un fichero en el mismo lugar que el anterior pero con el siguiente formato
GroupName: juan pepe ana - Empleamos también la directiva AuthGroupFile
AuthGroupFile /usr/local/apache/passwd/groups Requerimos el uso de un grupo determinado:
Require group GroupNameEn algunas versiones de apache no carga el módulo authgroup y lo deberemos habilitar "a mano":
a2enmod authz_groupfile
Creo el fichero grupo, al que añado un grupo llamado Alumnos y un par de usuarios “pepe y juan”
echo “Alumnos: juan pepe” > /etc/apache2/mczones/grupo
Permito el acceso sólo a los usuarios de ese grupo, en definitiva nos quedaría:
NameVirtualHost *:80Otra directiva que nos simplificaría el proceso para permitir el acceso a cualquier usuario válido sería:
<VirtualHost *:80>
ServerAdmin webmaster@mczones.es
ServerName www.mczones.es
ServerAlias mczones.es
DirectoryIndex index.html
DocumentRoot /var/www/mczones/
<directory />
Options FollowSymLinks
AllowOverride None
</directory>
<directory /var/www/mczones>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
<directory /var/www/mczones/privado>
AllowOverride AuthConfig
AuthType Basic
AuthName "Acceso restringido a alumnos A Carballeira"
# (Following line optional)
AuthBasicProvider file
AuthUserFile /etc/apache2/mczones/passwords
AuthGroupFile /etc/apache2/mczones/grupo
Require group Alumnos
Order allow,deny
Allow from all
</directory>
UseCanonicalName off
</VirtualHost>
Require valid-user
Enlace al resto de manuales de Linux con autenticación, LDAP,...
3. Bibliografía
http://httpd.apache.org/docs/2.2/howto/auth.htmlDigest: https://help.ubuntu.com/community/Apache2WebDavDigestAUTH
1 comentario:
Hola.
Excelente blog, me sirve de mucho pues me estoy iniciando y me considero torpe. Es complicado.
queria hacerte una pregunta y si me puedes ayudar estaria encantado, y si no pues nada,jej. seguire el blog pk me interesa.
Como puedo hacer para que un host virtual "pepito" tenga un directorio raiz y otro directorio que solo sea accesible desde la subred del usuario.
gracias de antemano.
salu2.
mikel.
Publicar un comentario