Autenticación en Apache 2.4

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

Consideracións previas

Autenticación

Control de acceso

O control de acceso fai referencia a todos os medios que proporcionan unha forma de controlar o acceso os recursos. 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.

Directiva Require

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

Apache 2.2

Control de acceso en Apache 2.2 En versiones anteriores de Apache utilizabanse outras directivas para controlar o acceso:

  • Allow
  • Deny
  • Order

Están obsoletas e non serán validas en futuras versións.

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.

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

<Directory "/var/www/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

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

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 NombreGrupo

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/pagina1/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 contraseinaos.

Xeneración de ficheiro con htdigest

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

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