SKILL LEVEL: SYSADMIN/ADVANCED - TIME: 5-10 MINS
Introducción
En este tutorial, le mostraremos cómo proteger un sitio web, o simplemente una carpeta dentro de un sitio, protegiéndolo con contraseña. Usaremos el servidor web más popular, Apache2 para este ejemplo, sin embargo, se pueden realizar métodos similares con otros servidores web.
El método que usaremos es un sistema de autenticación básico, sin embargo, es fácil de configurar y le permite proteger rápidamente su sitio web de otras personas en Internet. Este método se basa en la creación de una combinación de nombre de usuario y contraseña para su(s) sitio(s). Puede agregar tantos nombres de usuario como desee, pero recuerde que deberá mantener cada contraseña.
Requisitos
Para este ejemplo, estamos usando la edición del servidor Ubuntu 16.04. Esto también funcionará en Ubuntu 14.04 y en casi todas las demás distribuciones de Linux, dado que está utilizando el servidor web Apache 2.
En Ubuntu, inicia sesión como usuario estándar y usa sudo para ejecutar comandos raíz (privilegiados/superusuario). Si tiene un inicio de sesión raíz en su servidor, puede usar esto en su lugar. No necesitará usar sudo, sin embargo, se recomienda para toda la administración segura del servidor, que realice acciones con sudo y trabaje como un usuario normal (no root) para ejecutar tareas administrativas.
Instalar el paquete de utilidades de Apache
Para crear el archivo que almacenará las contraseñas necesarias para acceder a nuestro contenido restringido, utilizaremos una utilidad llamada htpasswd
, que forma parte del paquete apache2-utils. Para instalar apache2-utils, ejecute los siguientes comandos:
sudo apt-get update
sudo apt-get install apache2-utils
Lo anterior asume que ya tiene Apache2 instalado (sudo apt-get install apache2, si no).
Crear el archivo de contraseña
Ahora tenemos acceso a htpasswd
dominio. Podemos usar esto para crear un archivo de contraseña que Apache puede usar para autenticar a los usuarios. Crearemos un archivo oculto para este propósito llamado .htpasswd
dentro de nuestro /etc/apache2
directorio de configuración. Tenga en cuenta que los archivos con el prefijo punto (.) se ocultan automáticamente de una lista de directorios estándar (por ejemplo, no se muestran con el comando ls). Si desea mostrarlos, use ls -la (lista larga, todos los archivos).
La primera vez que usamos esta utilidad, debemos agregar el -c
opción para crear el archivo especificado. Especificamos un nombre de usuario (sammy
en este ejemplo) al final del comando para crear una nueva entrada dentro del archivo:
sudo htpasswd -c /etc/apache2/.htpasswd sammy
Se le pedirá que proporcione y confirme una contraseña para el usuario.
Omite el -c
argumento para cualquier usuario adicional que desee agregar:
sudo htpasswd /etc/apache2/.htpasswd another_user
Si visualizamos el contenido del archivo, podemos ver el nombre de usuario y la contraseña cifrada para cada registro:
cat /etc/apache2/.htpasswd
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Configurar autenticación de contraseña de Apache
Ahora que tenemos un archivo con nuestros usuarios y contraseñas en un formato que Apache puede leer, debemos configurar Apache para verificar este archivo antes de entregar nuestro contenido protegido. Podemos hacer esto de dos maneras diferentes.
La primera opción es editar la configuración de Apache y agregar nuestra protección de contraseña al archivo de host virtual. Por lo general, esto brindará un mejor rendimiento porque evita el gasto de leer archivos de configuración distribuidos. Si tiene esta opción, se recomienda este método.
Si no tiene la capacidad de modificar el archivo de host virtual (o si ya está utilizando archivos .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess` para permitir que ciertos elementos de configuración se establezcan dentro de un archivo en un directorio de contenido. La desventaja es que Apache tiene que volver a leer estos archivos en cada solicitud que involucre el directorio, lo que puede afectar el rendimiento.
Elija la opción que mejor se adapte a sus necesidades a continuación.
Configuración del control de acceso dentro de la definición de host virtual
Comience abriendo el archivo de host virtual al que desea agregar una restricción. Para nuestro ejemplo, usaremos el 000-default.conf
archivo que contiene el host virtual predeterminado instalado a través del paquete Apache de Ubuntu:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Dentro, con los comentarios eliminados, el archivo debería verse similar a esto:
/etc/apache2/sites-enabled/000-default.conf<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
La autenticación se realiza por directorio. Para configurar la autenticación, deberá apuntar al directorio que desea restringir con un <Directory ___>
cuadra. En nuestro ejemplo, restringiremos toda la raíz del documento, pero puede modificar esta lista para que solo se dirija a un directorio específico dentro del espacio web:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
</Directory>
</VirtualHost>
Dentro de este bloque de directorio, especifique que deseamos configurar Basic
autenticación. Para el AuthName
, elija un nombre de dominio que se mostrará al usuario cuando solicite las credenciales. Usa el AuthUserFile
directiva para apuntar a Apache al archivo de contraseñas que creamos. Finalmente, necesitaremos un valid-user
para acceder a este recurso, lo que significa que cualquier persona que pueda verificar su identidad con una contraseña podrá acceder a:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
Guarde y cierre el archivo cuando haya terminado. Reinicie Apache para implementar su política de contraseñas:
sudo service apache2 restart
El directorio que especificó ahora debería estar protegido con contraseña.
Configurar el control de acceso con archivos .htaccess
Si desea configurar la protección con contraseña usando .htaccess
en su lugar, debe comenzar editando el archivo de configuración principal de Apache para permitir .htaccess
archivos:
sudo nano /etc/apache2/apache2.conf
Encuentra el <Directory>
bloque para el /var/www
directorio que contiene la raíz del documento. Activa .htaccess
procesamiento cambiando el AllowOverride
directiva dentro de ese bloque de "Ninguno" a "Todos":
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Guarde y cierre el archivo cuando haya terminado.
A continuación, debemos agregar un .htaccess
file al directorio que deseamos restringir. En nuestra demostración, restringiremos la raíz del documento completo (el sitio web completo) que se encuentra en /var/www/html
, pero puede colocar este archivo en cualquier directorio al que desee restringir el acceso:
sudo nano /var/www/html/.htaccess>
Dentro de este archivo, especifique que deseamos configurar Basic
autenticación. Para el AuthName
, elija un nombre de dominio que se mostrará al usuario cuando solicite las credenciales. Usa el AuthUserFile
directiva para apuntar a Apache al archivo de contraseñas que creamos. Finalmente, necesitaremos un valid-user
para acceder a este recurso, lo que significa que cualquier persona que pueda verificar su identidad con una contraseña podrá acceder a:
/var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Guarde y cierre el archivo. Reinicie el servidor web para proteger con contraseña todo el contenido dentro o debajo del directorio con .htaccess
archivo:
- reinicio del servicio sudo apache2
Confirmar la autenticación de contraseña
Para confirmar que su contenido está protegido, intente acceder a su contenido restringido en un navegador web. Debería aparecer un aviso de nombre de usuario y contraseña similar a este:
Si ingresa las credenciales correctas, se le permitirá acceder al contenido. Si ingresa las credenciales incorrectas o presiona "Cancelar", verá la página de error "No autorizado":
Conclusión
Ahora debería tener todo lo que necesita para configurar la autenticación básica para su sitio. Toda la protección de contraseña debe combinarse con el cifrado SSL para que sus credenciales no se envíen al servidor como texto sin formato.
Gracias a la gente de digitalocean.com por parte del contenido de esta página. ¡Asegúrese de echarles un vistazo, tienen increíbles servicios de alojamiento web que se adaptan a todos los presupuestos!