Cómo restringir el acceso a un recurso usando Apache en Linux

Cómo restringir el acceso a un recurso usando Apache en Linux

Restringir el acceso a un recurso a menudo se requiere cuando se usa la web. En aplicaciones web complejas, esto a menudo se implementa utilizando un sistema de inicio de sesión que puede ser más o menos sofisticado. Sin embargo, si nuestros requisitos son bastante básicos, podemos usar el sistema de autenticación proporcionado por el servidor web Apache. En este tutorial veremos cómo podemos hacerlo.

En este tutorial aprenderás:

  • Cómo restringir el acceso a una página web utilizando el servidor web Apache
  • Cómo almacenar las contraseñas del usuario en archivos de texto sin formato
  • Cómo almacenar las contraseñas de usuario en una base de datos
  • Cómo permitir el acceso a varios usuarios
Cómo restringir el acceso a un recurso usando Apache en Linux

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución
Software El servidor web Apache
Otro Privilegios raíz para modificar archivos de configuración
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Configuracion basica



La configuración más básica implica los dos pasos: la creación de un archivo de contraseña Donde se almacenarán las contraseñas de los usuarios y el uso de directivas específicas en el archivo de configuración principal del servidor (la ubicación de este archivo depende de la distribución que estamos utilizando: en Fedora y la familia Red Hat de distribución, el archivo es /etc/httpd/http/conf, mientras que en la distribución basada en Debian, por ejemplo, es /etc/apache2/apache2.confusión), en un archivo de configuración virtualhost, o dentro de un .htaccess Archivo colocado dentro del directorio apropiado.

Si decidimos usar esta última opción, debemos estar seguros de que el Authconfig La directiva se puede anular. Suponiendo que el .htaccess El archivo está dentro del /var/www/html/restringido directorio, escribiríamos:

 DESLEDOVERRIDE AUTHCONFIG  

Creando el archivo de contraseña

Crear un archivo de contraseña es realmente fácil: todo lo que tenemos que hacer es usar el htpasswd utilidad, que generalmente viene con la instalación de Apache. Es muy importante que el archivo que contenga las contraseñas de los usuarios se coloque en un directorio donde el público no puede acceder a él. En este tutorial crearemos el archivo dentro del /etc/httpd directorio.

Supongamos que queremos permitir el acceso al EGDOC usuario. Para crear su contraseña, ejecutaríamos:

$ sudo htpasswd -c/etc/httpd/contraseñas egdoc 

El htpasswd La utilidad se utiliza para administrar las contraseñas de los usuarios y almacenarlas en archivos de texto sencillo. En este caso invocamos la utilidad y la usamos con el -C Opción: Esto es necesario para crear el archivo desde cero. Si el archivo ya existe, se trunca, por lo tanto, cuando necesitamos agregar nuevas entradas, se debe omitir la opción.

Proporcionamos los dos argumentos: la primera es la ruta del archivo de contraseña, el segundo es el nombre del usuario para el que queremos crear una contraseña para. El comando nos pedirá que ingresemos una contraseña para el usuario y que lo confirme:

Nueva contraseña: re-type nueva contraseña: 

No podremos ver la contraseña a medida que la ingresamos. Si ahora echamos un vistazo dentro del archivo generado, podemos ver que se ha almacenado después de haber sido hash con el formato de hashing Apache Abr1:

EGDOC: $ ABR1 $ GEVSWC3P $ ZHR/MQMMN6G7TJ8FH8RCY/ 

Configurar el servidor



Una vez que nuestro archivo de contraseña está listo, necesitamos crear la configuración correcta para el servidor web Apache. Como ejemplo, supongamos que queremos restringir el acceso al /var/www/restringido directorio que es el Raiz del documento de un virtualhost configurado de la siguiente manera:

 Prueba de nombre de servidor.LAN DocumentRoot/Var/www/RestringhtType Basic Authname "Restringido Área restringida!"AuthbasicProvider File AuthuserFile/etc/httpd/contraseñas requieren el usuario EGDOC   

Examinemos las directivas que utilizamos en esta configuración.

En primer lugar, usamos Tipo de autenticación. Esta directiva se utiliza para seleccionar qué tipo de autenticación queremos usar. En este caso, elegimos "básico" como valor: esta funcionalidad es proporcionada por el mod_auth_basic módulo. Otros valores posibles son Ninguno, Digerir (proporcionado por el módulo mod_auth_digest), y Forma, que es proporcionado por el módulo mod_auth_form.

El AuthbasicProvider La directiva se utiliza para declarar qué proveedor debe usarse para la autenticación. En este caso podríamos haberlo omitido, ya que archivo es el valor predeterminado, proporcionado por el mod_authn_file módulo.

Con el Autodame directiva, configuramos un reino. Esta configuración tiene básicamente dos propósitos: como lo primero, el mensaje que proporcionamos aquí aparecerá como un mensaje en el mensaje proporcionado por el servidor, por ejemplo:

El sitio dice: "Área restringida!"

El cliente también utiliza el "reino" para decidir qué contraseña debe enviar al servidor. Si el usuario ya está autenticado, podrá acceder a todos los recursos en el mismo ámbito, sin tener que iniciar sesión nuevamente.

El AutuserFile La directiva se utiliza para señalar el archivo de texto sin formato que aloja la contraseña de los usuarios que creamos antes con el htpasswd utilidad.

Finalmente, tenemos el Requerir directiva. Con esta directiva, podemos restringir el acceso a un recurso en la base de algunos parámetros como la dirección IP del cliente o, como en este caso, la autenticación como un usuario específico.

El /var/www/prueba El directorio contiene un archivo de índice, índice.html, donde acabamos de colocar el "acceso otorgado!" mensaje. Una vez que nuestra configuración esté lista, podemos reiniciar el servidor:

$ sudo systemctl reiniciar httpd 

Cuando intentamos acceder a la página, se nos pedirá que ingresemos un nombre de inicio de sesión y una contraseña:

La solicitud de inicio de sesión de Apache

Si proporcionamos las credenciales correctas, se otorgará el acceso a la página:

El acceso de Apache otorgado

Uso de grupos

En la gran mayoría de los casos, queremos permitir que varios usuarios accedan a un recurso. En esos casos queremos usar un archivo de grupo Donde asociamos el nombre de un grupo con una lista de sus miembros separados por espacios. Supongamos que la ruta de nuestro archivo es /etc/httpd/grupos; Su contenido sería:

Usuarios permitidos: EGDOC Tim Rob 


Declaramos que los usuarios de EGDOC, Tim y Rob son miembros del Usuarios permitidos Grupo: para cada uno de ellos se debe agregar una entrada en el archivo de contraseña. En este punto, necesitamos cambiar la configuración de nuestro servidor y adaptarlo a la nueva configuración:

 Prueba de nombre de servidor.LAN DocumentRoot/Var/www/RestringhtType Basic Authname "Restringido Área restringida!"AuthbasicProvider File AuthuserFile/etc/httpd/contraseñas Authgroupfile/etc/httpd/Grupos requieren grupo permitido usuarios   

Presentamos una nueva directiva, Authgroupfile, y le pasó la ruta del archivo donde los grupos se asignan a los usuarios. También cambiamos el valor del Requerir directiva; Ahora, para poder acceder al recurso, un usuario debe ser parte del Usuarios permitidos grupo. Para hacer que los cambios sean efectivos necesitamos reiniciar el servidor.

Almacenar contraseñas en una base de datos

En el ejemplo anterior, vimos cómo almacenar las contraseñas de los usuarios dentro de un archivo de texto simple y simple. Esta es una solución viable perfecta cuando no tenemos muchos usuarios. Cuando la lista de usuarios se vuelve bastante larga, en cambio, podría no ser práctico escanear todo el archivo de contraseña para cada solicitud. En casos como ese, es posible que deseemos almacenar las contraseñas en una base de datos en su lugar.

Una opción es crear un Dbm archivo. Podemos realizar la tarea utilizando el htdbm utilidad. Para generar un dbm Archivo en la misma posición que utilizamos en el ejemplo anterior, podemos ejecutar:

$ sudo htdbm -cb/etc/httpd/passwd/contraseñas egdoc nueva contraseña: rehype nueva contraseña: base de datos passwd/contraseña creada. 


Como puede ver, la sintaxis es muy similar a la utilizada para htpasswd. Al igual que antes, lanzamos el comando usando el -C opción, para crear el archivo o truncarlo si ya existe. En este caso también usamos el -B opción para usar el bcrypt Algoritmo para el cifrado de contraseña. Dado que cambiamos la forma en que se almacenan las contraseñas, también debemos cambiar la configuración del servidor:

 Prueba de nombre de servidor.LAN DocumentRoot/Var/www/RestringhtType Basic Authname "Restringido Área restringida!"AuthbasicProvider DBM AuthdbMuserFile/etc/httpd/passwd/contraseñas requiere usuario egdoc   

Lo que cambiamos anteriormente es el valor que pasamos al AuthbasicProvider directiva, que ahora es dbm. También sustituimos el AutuserFile directivo con Authdbmuserfile, proporcionar al igual que antes, la ruta del archivo donde se almacena la contraseña. Para que esta configuración funcione, debemos tener el mod_authn_dmb módulo habilitado.

Conclusión

En este tutorial, vimos cómo restringir el acceso a un recurso e implementar un sistema de autenticación de inicio de sesión simple utilizando el servidor web Apache. Vimos cómo almacenar contraseñas en archivos de texto sin formato o en un dbm formato de base de datos. También vimos cómo permitir el acceso a varios usuarios utilizando un Archivo de grupo y qué directivas deben usarse para lograr nuestro objetivo.

Tutoriales de Linux relacionados:

  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cosas para instalar en Ubuntu 20.04
  • Ubuntu 20.04 WordPress con instalación de Apache
  • Tutorial de Sqlite Linux para principiantes
  • Instalación de ampache Raspberry Pi
  • Cómo migrar apache a nginx convirtiendo virtualhosts en ..
  • Mastering Bash Script Loops
  • Instale MySQL en Ubuntu 20.04 LTS Linux
  • Cómo instalar MySQL en Almalinux
  • Tutorial LFTP sobre Linux con ejemplos