Autenticación en Apache 2.4

De MediaWiki
Ir a la navegación Ir a la búsqueda

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 our 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. Directive 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

Autenticación básica

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

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

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 josemaria 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 mostrará na ventana para pedir autorización"
    Require valid-user
</Directory>

Autenticación: Integración con OpenLDAP

Autenticación: Con authn_dbd y MySQL/MariaDB

Referencias

Créditos