Introducción

Al configurar un servidor web, a menudo hay secciones del sitio que desea restringir el acceso a. Las aplicaciones web a menudo proporcionan sus propios métodos de autenticación y autorización, pero el propio servidor web se puede utilizar para restringir el acceso si éstos son insuficientes o no disponibles.

En esta guía, vamos a demostrar cómo proteger con contraseña los activos en un servidor web Apache corriendo en Ubuntu 14.04.

Requisitos previos

Para empezar, tendrá acceso a un entorno de servidor de Ubuntu 14.04. Usted necesitará un usuario no root con sudo privilegios con el fin de realizar tareas administrativas. Para aprender cómo crear un usuario tal, siga nuestra guía de configuración inicial del servidor de Ubuntu 14.04.

Instale el paquete Utilidades Apache

Con el fin de crear el archivo que almacenará las contraseñas necesarias para acceder a nuestro contenido restringido, vamos a utilizar una utilidad llamada htpasswd. Esto se encuentra en el apache2-utils paquete dentro de los repositorios de Ubuntu.

Actualizar el caché local de paquetes e instale el paquete escribiendo este comando. Vamos a aprovechar esta oportunidad para también tomar el servidor Apache 2 en caso de que todavía no está instalado en el servidor:

  • sudo update apt-get
  • sudo apt-get install apache2 apache2-utils

Cree el archivo de contraseñas

Ahora tenemos acceso al htpasswd comandos. Podemos usar esto para crear un archivo de contraseñas que Apache puede utilizar para autenticar a los usuarios. Vamos a crear un archivo oculto para este propósito llamado .htpasswd dentro de nuestro / etc / apache2 directorio de configuración.

La primera vez que usamos esta utilidad, tenemos que añadir el -c opción de crear el archivo especificado. Especificamos un nombre de usuario (sammy en este ejemplo) al final del comando para crear una nueva entrada en el archivo:

  • sudo htpasswd -c /etc/apache2/.htpasswd sammy

Se le pedirá que proporcione y confirme una contraseña para el usuario.

Dejar de lado la -c argumento a favor de los usuarios adicionales que desea añadir:

  • sudo htpasswd /etc/apache2/.htpasswd another_user

Si vemos el contenido del archivo, podemos ver el nombre de usuario y la contraseña cifrada para cada registro:

  • /etc/apache2/.htpasswd gato

Producción

sammy: $ APR1 $ lzxsIfXG $ tmCvCfb49vpPFwKGVsuYz. another_user: $ APR1 $ p1E9MeAf $ kiAhneUwr.MhAE2kKGYHK.

Configure Apache autenticación de contraseña

Ahora que tenemos un archivo con nuestros usuarios y contraseñas en un formato que Apache puede leer, tenemos que configurar Apache para comprobar este archivo antes de servir nuestro contenido protegido. Podemos hacerlo de dos maneras diferentes.

La primera opción es editar la configuración de Apache y añadir nuestra protección de contraseña en el archivo de host virtual. En general, esto dará un mejor rendimiento, ya que evita el gasto de la lectura de archivos de configuración distribuidos. Si usted tiene esta opción, se recomienda este método.

Si usted no tiene la capacidad de modificar el archivo host virtual (o si ya está utilizando .htaccess archivos para otros fines), puede restringir el acceso mediante un .htaccess archivo.Apache usa .htaccess` archivos con el fin de permitir que ciertos elementos de configuración que 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 petición que implica el directorio, lo que puede afectar al rendimiento.

Elija la opción que mejor se adapte a sus necesidades a continuación.

Configuración de control de acceso dentro de la Hostia Definición virtual

Comience abriendo el archivo de host virtual que desea agregar una restricción a. Para nuestro ejemplo, vamos a estar usando 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

En el interior, con los comentarios despojados, el archivo debe ser similar a esto:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *: 80> ServerAdmin webmaster @ localhost DocumentRoot / var / www / html ErrorLog $ {} /error.log APACHE_LOG_DIR CustomLog $ {} APACHE_LOG_DIR /access.log combinado </ VirtualHost>

La autenticación se realiza en función de cada directorio. Para configurar la autenticación, tendrá que apuntar al directorio que desea restringir con un <Directorio ___> bloque. En nuestro ejemplo, vamos a restringir toda la raíz del documento, pero se puede modificar esta lista sólo apuntar a un directorio específico en el espacio web:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *: 80> ServerAdmin webmaster @ localhost DocumentRoot / var / www / html ErrorLog $ {} /error.log APACHE_LOG_DIR CustomLog $ {} APACHE_LOG_DIR /access.log combinado <Directory "/ var / www / html"> </ Directory> </ VirtualHost>

Dentro de este bloque de directorio, especificamos que queremos configurar básico de autenticación.Para el AuthName, elegir un nombre de dominio que se mostrará al usuario cuando pidan credenciales. Utilice la AuthUserFile Directiva señalar Apache para el archivo de contraseñas que hemos creado. Por último, vamos a requerir un usuario válido para acceder a este recurso, lo que significa que cualquier persona que pueda verificar su identidad con una contraseña será permitido en:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *: 80> ServerAdmin webmaster @ localhost DocumentRoot / var / www / html ErrorLog $ {} /error.log APACHE_LOG_DIR CustomLog $ {} APACHE_LOG_DIR /access.log combinado <Directory "/ var / www / html"> AuthType Basic AuthName "Contenido restringido" 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 restart apache2 servicio

El directorio que ha especificado ahora debería ser protegido por contraseña.

Configuración de control de acceso con archivos .htaccess

Si desea configurar la protección por contraseña utilizando .htaccess archivos en lugar, usted debe comenzar mediante la edición del archivo principal de configuración para permitir Apache .htaccessarchivos:

  • sudo nano /etc/apache2/apache2.conf

Encuentra el <Directory> bloque para el directorio / var / www directorio que contiene la raíz del documento. Encienda .htaccess procesamiento cambiando el AllowOverride Directiva dentro de ese bloque de «Ninguno» para «todos»:

/etc/apache2/apache2.conf

. . . <Directory / var / www /> Options Indexes FollowSymLinks AllowOverride All Requerir toda concedida </ Directory> . . .

Guarde y cierre el archivo cuando haya terminado.

A continuación, tenemos que añadir un .htaccess archivo en el directorio que queremos restringir. En nuestra demostración, nos restringimos a toda la raíz del documento (todo el sitio web) que se basa en / var / www / html, pero puedes colocar este archivo en cualquier directorio que desea restringir el acceso a:

  • sudo nano /var/www/html/.htaccess

Dentro de este archivo, especificamos que queremos configurar básico de autenticación. Para elAuthName, elegir un nombre de dominio que se mostrará al usuario cuando pidan credenciales. Utilice la AuthUserFile Directiva señalar Apache para el archivo de contraseñas que hemos creado. Por último, vamos a requerir un usuario válido para acceder a este recurso, lo que significa que cualquier persona que pueda verificar su identidad con una contraseña será permitido en:

/var/www/html/.htaccess

AuthType básico AuthName "Contenido restringido" AuthUserFile /etc/apache2/.htpasswd Requerir valid-user

Guarde y cierre el archivo. Reinicie el servidor Web para proteger con contraseña todo el contenido en o por debajo del directorio con el .htaccess archivo:

  • sudo restart apache2 servicio

Confirme la autenticación de contraseña

Para confirmar que el contenido está protegido, trate de acceder a su contenido restringido en un navegador web. Usted debe ser presentado con el símbolo del nombre de usuario y contraseña que se ve así: