GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo proteger con contraseña los sitios web a través de .htaccess

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
Salida
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:

/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

    <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:

/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

    <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":

/etc/apache2/apache2.conf
. . .

<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!


Linux
  1. Redirección simple del sitio web a través de .htaccess

  2. ¿Cómo habilito ExecCGI a través del archivo .htaccess?

  3. Cómo proteger con contraseña un directorio a través de cPanel

  4. ¿Cómo editar el archivo .htaccess a través del administrador de archivos de cPanel?

  5. ¿Cómo protejo con contraseña una carpeta de un sitio web?

Cómo proteger con contraseña un archivo en Vim Editor

Cómo proteger con contraseña una carpeta en Linux

Cómo agregar una contraseña para proteger un archivo Vim en Linux

¿Cómo configurar la página de índice desde cPanel a través de .htaccess?

¿Cómo proteger GRUB con contraseña en Linux?

Cómo proteger archivos con contraseña usando el editor Vim en Ubuntu