Autenticación en Apache 2.4
Sumario
- 1 Consideracións previas
- 2 Autenticación
- 3 Referencias
- 4 Créditos
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:
- 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.
- 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
- https://httpd.apache.org/docs/2.4/es/howto/auth.html
- https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-apache-on-ubuntu-18-04-quickstart-es
- https://manuais.iessanclemente.net/index.php/O_Servidor_Web_Apache#Autenticaci.C3.B3n_e_autorizaci.C3.B3n