Diferencia entre revisiones de «Autenticación en Apache 2.4»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 5: Línea 5:
 
= Autenticación =
 
= Autenticación =
  
−
O servidor HTTP Apache permite controlar os dereitos de acceso dos usuarios identificándoos. Diferentes módulos permiten configurar múltiples métodos de autenticación para os usuarios que solicitan acceso a un ficheiro our ruta xestionada polo servidor HTTP Apache.
+
O servidor HTTP Apache permite '''controlar os dereitos de acceso dos usuarios identificándoos'''. Diferentes módulos permiten configurar múltiples métodos de autenticación para os usuarios que solicitan acceso a un ficheiro ou ruta xestionada polo servidor HTTP Apache.
  
 
== Sección da declaración dun directorio: Directory ==
 
== Sección da declaración dun directorio: Directory ==
  
−
O control de accesos aos directorios aplícase a toda a árbore dentro do directorio, agás se hai outros dereitos posicionados nun subdirectorio.
+
O '''control de accesos aos directorios''' aplícase a toda a árbore dentro do directorio, agás se hai outros dereitos posicionados nun subdirectorio.
  
 
Se o directorio está protexido no acceso, só os usuarios autorizados poderán acceder a el.
 
Se o directorio está protexido no acceso, só os usuarios autorizados poderán acceder a el.
  
−
A declaración dun directorio faise usando a sección Directory, segundo a seguinte sintaxe:
+
A '''declaración dun directorio''' faise usando a sección '''Directory''', segundo a seguinte sintaxe:
  
 
<pre>
 
<pre>
Línea 29: Línea 29:
 
O control de acceso fai referencia a todos os medios que proporcionan unha forma de controlar o acceso os recursos.  
 
O control de acceso fai referencia a todos os medios que proporcionan unha forma de controlar o acceso os recursos.  
  
−
Dentro dunha sección de directorio, esta directiva ''require'' permite especificar qué usuarios terán acceso autorizado ao contido do directorio.
+
Dentro dunha sección de directorio, esta '''directiva ''require''''' permite '''especificar qué usuarios terán acceso autorizado''' ao contido do directorio.
  
 
Pode haber distintas directivas ''Require'' na mesma sección do directorio.
 
Pode haber distintas directivas ''Require'' na mesma sección do directorio.
Línea 223: Línea 223:
 
<pre>
 
<pre>
 
$ htdigest -c /etc/claves/digest.txt dominio xose
 
$ htdigest -c /etc/claves/digest.txt dominio xose
−
Adding password for josemaria in realm dominio.
+
Adding password for xose in realm dominio.
 
New password:
 
New password:
 
Re-type new password:
 
Re-type new password:
Línea 289: Línea 289:
 
* [https://www.howtoforge.com/tutorial/password-protect-directories-with-mod_authn_dbd-mysql-on-apache-debian-jessie/ Autenticación con integración con mariaDB]
 
* [https://www.howtoforge.com/tutorial/password-protect-directories-with-mod_authn_dbd-mysql-on-apache-debian-jessie/ Autenticación con integración con mariaDB]
 
</div>
 
</div>
 +
 +
 +
== Alternativa. Control de acceso por ficheiro .htaccess ==
 +
Os parámetros de control de acceso pódense definir nun ficheiro situado no directorio que se desexa protexer, chamado por defecto .htaccess.
 +
 +
As directivas necesarias para o control estarán especificadas neste ficheiro no canto de estar na sección Directory asociada ao directorio no ficheiro de configuración do servidor HTTP Apache.
 +
 +
Esta técnica permite definir o control de acceso ao directorio sen ter que modificar a configuración do servidor HTTP Apache; pero '''NON está aconsellada desde o punto de vista da seguridade'''.
 +
 +
A directiva AllowOverride permite configurar o uso dos ficheiros .htaccess, globalmente ou nun directorio:
 +
AllowOverride Parám
 +
 +
Os valores posibles de Parám:
 +
; All
 +
: Archivo .htaccess autorizado, para todas as directivas no directorio (valor por defecto).
 +
; None
 +
: Archivo .htaccess ignorado.
 +
; AuthConfig
 +
: Solo se autorizan as directivas de autenticación nun ficheiro .htaccess.
 +
 +
'''NOTA'''. Aconséllase especificar a directiva global AllowOverride None no ficheiro de configuración do servidor HTTP Apache. De esta manera, Apache no tendrá que comprobar la presencia de un archivo .htaccess en el directorio de cada página solicitada.
 +
Poderase se é preciso activar o uso do ficheiro nun directorio específico empregando a directiva AllowOverride AuthConfig nunha sección Directory asociada ao directorio.
  
 
= Referencias =
 
= Referencias =

Revisión actual del 10:46 26 sep 2024

Consideracións previas

Temos xa instalado un servidor Apache, e configurado un virtual host.

Autenticación

O servidor HTTP Apache permite controlar os dereitos de acceso dos usuarios identificándoos. Diferentes módulos permiten configurar múltiples métodos de autenticación para os usuarios que solicitan acceso a un ficheiro ou ruta xestionada polo servidor HTTP Apache.

Sección da declaración dun directorio: Directory

O control de accesos aos directorios aplícase a toda a árbore dentro do directorio, agás se hai outros dereitos posicionados nun subdirectorio.

Se o directorio está protexido no acceso, só os usuarios autorizados poderán acceder a el.

A declaración dun directorio faise usando a sección Directory, segundo a seguinte sintaxe:

 <Directory CaminoDir>
 [Directivas]
 </Directory>

O camiño de acceso do directorio pode estar especificado en camiño absoluto ou relativo á raíz dos documentos configurada para o servidor ou o host virtual que administra este directorio.

Pode haber diferentes directivas especificadas na sección, pero só se aplicarán a ese directorio (e aos seus subdirectorios, agás que estes estean asociados a unha sección Directory específica).

Control de acceso. Directiva require

O control de acceso fai referencia a todos os medios que proporcionan unha forma de controlar o acceso os recursos.

Dentro dunha sección de directorio, esta directiva require permite especificar qué usuarios terán acceso autorizado ao contido do directorio.

Pode haber distintas directivas Require na mesma sección do directorio.

Sintaxe
Require [not] valid-user|user|group|ip|host [ Ident1 ... identN] 
not
Prohibe o acceso.
valid-user
Calquer usuario autenticado.
user Ident ...
Lista dos usuarios autorizados.
group Ident ...
Lista dos grupos de usuarios autorizados.
ip Dir ...
Lista dos enderezos IP autorizados.
host NomeDNS
Lista dos nomes de hosts ou de dominios DNS autorizados.
Exemplo.
Permite nun directorio recursos que sexa accesible para os usuarios do grupo rrhh mais non para o usuario becario, aínda que pertenza o grupo rrhh
<Directory /var/www/html/recursos
Require group rrhh  
Require not user becario  
</Directory> 


A directiva Require proporciona unha variedade de diferentes xeitos de permitir ou denegar o acceso. Pode tamen ser usada xunto as directivas:

  • RequireAll
  • RequireAny
  • RequireNone

E todos estos requerimientos poden ser combinados elaborar complexas políticas de acceso.

Máis exemplos.
Podemos controlar o acceso a calquera recurso, (por exemplo usando a directiva Directory), con estas opciones:
 Require all granted: O acceso é permitido incondicionalmente.
 Require all denied: O acceso é denegado incondicionalmente.
 Require user userid [userid] ...: O acceso é permitido sólo se os usuarios indicados autenticaronse.
 Require group group-name [group-name] ...: O acceso é permitido sólo os grupos de usuarios especificados.
 Require valid-user: O acceso é permitido os usuarios válidos.
 Require ip 10 172.40 192.168.5: O acceso é permitido se se fai desde o conxunto de direccións especificadas.
 Require host dominio: El acceso es permitido si se hace desde el dominio especificado.
 Require local: O acceso é permitido desde localhost (127.0.0.1).
Pódese facer uso do operador not para indicar a denegación, por exemplo:
 Require not ip 192.168.1

Exemplos

Exemplo 1

Para permitir a todos no directorio:

<Directory "/var/www">
    Require all granted
</Directory>

Exemplo 2

Para non permitir o acceso o fichiero .htaccess, podíamos encontrar:

<FilesMatch "^\.ht">
       Require all denied
</FilesMatch>

Exemplo 3

Para denegar todos excepto host example.org:

Require host example.org

Directivas de autenticación

Poden utilizarse diferentes módulos para proporcionar diferentes modelos de autenticación.

As siguientes directivas de autenticación definen a autentificación desexada:

  • AuthName Título: título da ventana de diálogo de autenticación que será amosada no navegador
  • AuthType TipoAutenticación: método de autentificación que se utilizará (relacionado cun módulo que ten que estar cargado).

Despois é precisousar directivas específicas para o método de autentificación desexado.

A continuación descríbense algúns dos métodos máis usados.

Autenticación básica

O máis simple é con autenticación básica que xa ven instalada: mod_auth_basic.

NOTA. Para ver os módulos activos:
apache2ctl -t -D DUMP_MODULES
Para comprobar se o módulo mod_auth_basic está activo:
apache2ctl -t -D DUMP_MODULES | grep auth_basic_module

Configuración no Virtual Host

Hai que engadir esta configuración no ficheiro de definición do Virtual Host que se quere configurar:

<Directory "/var/www/html/paxina1/privado">
    AuthUserFile "/etc/apache2/chaves/passwd.txt"
    AuthName "Palabra de paso"
    AuthType Basic
    Require valid-user
</Directory>
  • O método de autentificación básica indicase na directiva AuthType con Basic.
  • En Directory escribimos o directorio a protexer, que pode ser a raíz do noso Virtual Host ou un subdirectorio.
  • En AuthUserFile poñemos o ficheiro que gardará a información de usuarios e contrasinais que debería de estar nun directorio que non sexa visitable desde o noso Apache.

Usuarios. Xeración de ficheiro de contrasinais. Utilidade htpasswd

Xeéerase o ficheiro de contrasinais mediante a utilidade htpasswd:

$ htpasswd -c /etc/apache2/chaves/passwd.txt xose
New password:
Re-type new password:
Adding password for user xose

Para crear o ficherio coa introdución do primeiro usuario temos que engadir a opción -c (create). Se por erro seguimos usando -c ó incorporar novos usuarios borraremos todos os anteriores! Os contrasinais non se gardan en claro; o que se garda é o resultado de aplicar unha función hash:

leire:h3UetcAKWaliZ
xose:rmO3V7cM8KLda

En AuthName personalizamos a mensaxe que aparecerá no navegador cando nos pida o contrasinal.

Para xestionar o control de acceso (qué usuarios ou grupos teñen permiso para obter o recurso utilizamos as seguintes directivas:

  • AuthGroupFile
  • Require user
  • Require group

Con borrar a liña correspondente a un usuario denegaremos o seu acceso; non e necesario reinicia apache cos cambios no ficheiro de contrasinais.

Grupos. Utilidade AuthGroupFile

Para permitir a un grupo de usuarios necesitarás crear un ficheiro de grupo que asocie os nombres de grupos cos de usuario para permitirlles acceso. O formato deste fichero é:

  • NombreGrupo: usuario1 usuario2 usuario3

A directiva que utilizaremos para inidicar o ficheiro de grupo é AuthGroupFile; e para permitir o acceso os grupos utilizaríamos:

  • Require group NomeGrupo

Ventaxas e inconvintes

Ventaxa deste método:

  • A súa sinxeleza.

Inconvintes:

  1. ter que delegar a xeneración de novos usuarios en alguen que non sexa un administrador de sistemas ou ter que facer un front-end para que o propio usuario cambie o seu contrasinal.
  2. os contrasinais viaxan en claro a través da rede (ainda que podemos esto configurando Apache2 con SSL).

Autenticación digest

Procedemento similar o tipo básico cambiando algunhas das directivas e usando a utilidade htdigest no canto de htpassword para crear o ficheiro de contrasinais.

Habilitar módulo auth_digest

Habilítase coa utilidade a2enmod, sendo necesario posterior reinicio do servidor Apache:

a2enmod auth_digest
systemctl restart apache2 

Configuración no Virtual Host

E despois incluimos unha sección no ficheiro de configuración do noso Virtual Host:

<Directory "/var/www/html/paxina1/privado">
    AuthType Digest
    AuthName "dominio"
    AuthUserFile "/etc/claves/digest.txt"
    Require valid-user
</Directory>

A directiva AuthName utilízase ahora para identificar un nome de dominio (realm) que debe coincidir co que apareza no fichero de contrasenais.

Usuarios. Xeración de ficheiro de contrasinais. Utilidade htdigest

Primeiro creamos a ruta onde almacenar o ficherio:

 mkdir /etc/claves/

Coa utilidade htdigest:

$ htdigest -c /etc/claves/digest.txt dominio xose
Adding password for xose in realm dominio.
New password:
Re-type new password:

A opción -c (create) sólo debe ser usada para crear o ficheiro co primeiro usuario; os seguintes prescindirán da mesma.

O ficheiro xenerado despois de engadir un segundo usuario:

xose:dominio:4c7af2e11e38ee1a51cd775895e11e0a
leire:dominio:bcd34f4294e2a39f62a486ec070b9b9b

Ventaxas e inconvintes

Ventaxa:

  • Solucionase o problema da transferencia de contrasinais en claro sen ser necesario usar SSL; aplicase unha función hash o contrasinal antes de ser enviada pola rede

Invonvinte:

  • Un chisco máis de complexidade na configuración

Autenticación con usuarios do sistema

Utilizaremos o módulo mod_auth_external que permite autenticar os usuarios contra servizos externos; no noso caso ímos usar pwauth para verificar usuarios e contrasinais do sistema.

Hablitación do módulo

apt-get install libapache2-mod-auth-external pwauth

Configuración no Virtual Host

Exemplo de ficheiro de configuración do Virtual
DefineExternalAuth pwauth_auth pipe /usr/sbin/pwauth
<Directory /var/www/privadoUsuarioSistema>
    AuthType Basic
    AuthBasicProvider external
    AuthExternal pwauth_auth
    AuthName "texto que se amosará na ventana para pedir autorización"
    Require valid-user
</Directory>

Autenticación mediante integración con OpenLDAP

O inconveniente da autenticación local é que as contas dos usuarios son específicas do servidor HTTPD Apache e os usuarios non poden cambiar o contrasinal que se lles asignou.

Unha solución máis flexible é usar o directorio LDAP da organización. Nese caso, o acceso aos directorios protexidos farase solicitando ao servidor de directorio LDAP a autenticación da información introducida polo usuario na xanela de autenticación.

Habilitación do módulo

Para iso, haberá que cargar, ademais dos módulos anteriores, o módulo LDAP: mod_authnz_ldap.

Configurar no Virtual Host

Tamén hai que configurar o control de acceso na sección do directorio, cunha directiva que especifique o servidor LDAP que se terá que consultar:

AuthLDAPUrl IdAnuarioLDAP

A directiva `Require` permite opcionalmente definir os usuarios, os grupos LDAP ou os DN LDAP (Distinguished Name) autorizados ou non a acceder ao directorio:

Require ldap-user Nome1 ... NomeN
Require ldap-group Nome1 ... NomeN
Require ldap-dn DistName

Autenticación: Con authn_dbd y MySQL/MariaDB


Alternativa. Control de acceso por ficheiro .htaccess

Os parámetros de control de acceso pódense definir nun ficheiro situado no directorio que se desexa protexer, chamado por defecto .htaccess.

As directivas necesarias para o control estarán especificadas neste ficheiro no canto de estar na sección Directory asociada ao directorio no ficheiro de configuración do servidor HTTP Apache.

Esta técnica permite definir o control de acceso ao directorio sen ter que modificar a configuración do servidor HTTP Apache; pero NON está aconsellada desde o punto de vista da seguridade.

A directiva AllowOverride permite configurar o uso dos ficheiros .htaccess, globalmente ou nun directorio:

AllowOverride Parám 

Os valores posibles de Parám:

All
Archivo .htaccess autorizado, para todas as directivas no directorio (valor por defecto).
None
Archivo .htaccess ignorado.
AuthConfig
Solo se autorizan as directivas de autenticación nun ficheiro .htaccess.
NOTA. Aconséllase especificar a directiva global AllowOverride None no ficheiro de configuración do servidor HTTP Apache. De esta manera, Apache no tendrá que comprobar la presencia de un archivo .htaccess en el directorio de cada página solicitada. 
Poderase se é preciso activar o uso do ficheiro nun directorio específico empregando a directiva AllowOverride AuthConfig nunha sección Directory asociada ao directorio.

Referencias

Créditos