Diferencia entre revisiones de «Autenticación en Apache 2.4»
| (No se muestran 13 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 | + | 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 25: | Línea 25: | ||
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). | 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. | + | == 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. | 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 104: | Línea 104: | ||
</pre> | </pre> | ||
| − | == | + | == Directivas de autenticación == |
Poden utilizarse diferentes módulos para proporcionar diferentes modelos 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'''. | 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'' === | === Configuración no ''Virtual Host'' === | ||
| Línea 155: | Línea 170: | ||
Con borrar a liña correspondente a un usuario denegaremos o seu acceso; non e necesario reinicia apache cos cambios no ficheiro de contrasinais. | 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 === | + | === 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. | 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. | ||
| Línea 164: | Línea 179: | ||
A directiva que utilizaremos para inidicar o ficheiro de grupo é AuthGroupFile; e para permitir o acceso os grupos utilizaríamos: | A directiva que utilizaremos para inidicar o ficheiro de grupo é AuthGroupFile; e para permitir o acceso os grupos utilizaríamos: | ||
| − | * Require group | + | * Require group NomeGrupo |
=== Ventaxas e inconvintes === | === Ventaxas e inconvintes === | ||
| Línea 184: | Línea 199: | ||
</pre> | </pre> | ||
| − | === Configuración no Virtual Host === | + | === Configuración no ''Virtual Host'' === |
E despois incluimos unha sección no ficheiro de configuración do noso Virtual Host: | E despois incluimos unha sección no ficheiro de configuración do noso Virtual Host: | ||
| Línea 198: | Línea 213: | ||
A directiva AuthName utilízase ahora para identificar un nome de dominio (realm) que debe coincidir co que apareza no fichero de contrasenais. | 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: | Primeiro creamos a ruta onde almacenar o ficherio: | ||
| Línea 208: | Línea 223: | ||
<pre> | <pre> | ||
$ htdigest -c /etc/claves/digest.txt dominio xose | $ htdigest -c /etc/claves/digest.txt dominio xose | ||
| − | Adding password for | + | Adding password for xose in realm dominio. |
New password: | New password: | ||
Re-type new password: | Re-type new password: | ||
| Línea 234: | Línea 249: | ||
apt-get install libapache2-mod-auth-external pwauth | apt-get install libapache2-mod-auth-external pwauth | ||
| − | === Configuración === | + | === Configuración no ''Virtual Host'' === |
<pre> | <pre> | ||
Exemplo de ficheiro de configuración do Virtual | Exemplo de ficheiro de configuración do Virtual | ||
| Línea 242: | Línea 257: | ||
AuthBasicProvider external | AuthBasicProvider external | ||
AuthExternal pwauth_auth | AuthExternal pwauth_auth | ||
| − | AuthName "texto que se | + | AuthName "texto que se amosará na ventana para pedir autorización" |
Require valid-user | Require valid-user | ||
</Directory> | </Directory> | ||
</pre> | </pre> | ||
| − | == Autenticación | + | == 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 | ||
| + | |||
* [http://www.adminso.es/index.php/OpenLDAP_Integraci%C3%B3n_OpenLDAP_y_Apache Integración con OpenLDAP] | * [http://www.adminso.es/index.php/OpenLDAP_Integraci%C3%B3n_OpenLDAP_y_Apache Integración con OpenLDAP] | ||
| Línea 256: | 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
Sumario
- 1 Consideracións previas
- 2 Autenticación
- 2.1 Sección da declaración dun directorio: Directory
- 2.2 Control de acceso. Directiva require
- 2.3 Exemplos
- 2.4 Directivas de autenticación
- 2.5 Autenticación básica
- 2.6 Autenticación digest
- 2.7 Autenticación con usuarios do sistema
- 2.8 Autenticación mediante integración con OpenLDAP
- 2.9 Autenticación: Con authn_dbd y MySQL/MariaDB
- 2.10 Alternativa. Control de acceso por ficheiro .htaccess
- 3 Referencias
- 4 Créditos
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:
- 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/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.