Progetto

Generale

Profilo

ApacheAuthAD » Cronologia » Versione 13

Simone Piccardi, 20-05-2024 18:08

1 8 Amministratore Truelite
h1. Autenticazione su Active Directory per Apache
2 1 Christopher R. Gabriel
3 11 Simone Piccardi
Il server web Apache fornisce diverse modalità che consentono di gestire l'autenticazione HTTP degli utenti; in genere questa viene fatta nella forma più semplice di un file @.htpasswd@, ma vedremo in questo articolo come la si può realizzare appoggiandosi ad un server Active Directory, in modo da poter utilizzare gli utenti già presenti in un dominio Windows.  In realtà in questo caso si tratta di usare il supporto generico per l'autenticazione su LDAP, usando questo protocollo per collegarsi ad Active Directory. Le istruzioni seguenti sono relative ad un sistema basato su Debian (o derivate), i concetti restano gli stessi per tutte le distribuzioni, così come i comandi e le direttive di configurazione, ma i file di configurazione coinvolti potranno essere diversi.
4 1 Christopher R. Gabriel
5 11 Simone Piccardi
Nel caso di Debian i moduli di Apache necessari all'autenticazione su LDAP sono installati insieme al server, ma non sono abilitati di default, pertanto per poterli utiilizzare andranno abilitati eseguendo i comandi:
6
7 1 Christopher R. Gabriel
<pre>
8
a2enmod ldap 
9
a2enmod authnz_ldap
10
</pre>
11 10 Simone Piccardi
12 11 Simone Piccardi
Rispetto all'autenticazione HTTP con un server LDAP ordinario, quella fatta su Active Directory comporta alcune difficoltà aggiuntive, con AD infatti non sono possibili interrogazioni anonime, ed occorrerà pertanto disporre un utente che consenta di ottenere la lista degli utenti necessaria al modulo di autenticazione di Apache. Inoltre per potersi autenticare sarà necessario usare una connessione cifrata con TLS/SSL, ma il certificato di un server AD non ha una firma valida, essendo generato internamente, per cui di default il client rifiuterà la connessione. 
13 1 Christopher R. Gabriel
14 11 Simone Piccardi
Il primo passo per la configurazione è verificare la raggiungibilità ed il corretto funzionamento della connessione ad Active Directory con LDAP. Assumendo che il dominio servito dal server AD sia @example.com@ e che l'utente per il collegamento sia @apacheauth@ (non è necessario che abbia nessun privilegio, per cui è opportuno usare un utente dedicato senza nessun permesso specifico) potremo usare per la verifica della connessione il comando @ldapsearch@ (installabile su Debian con il pacchetto @ldap-utils@), con qualcosa del tipo:
15
16 10 Simone Piccardi
<pre>
17 12 Simone Piccardi
root@server~: LDAPTLS_REQCERT=never ldapsearch -x -H ldaps://IND.IP.AD.SERV -D "CN=apacheauth,CN=Users,DC=example,DC=com" -b "DC=example,DC=com" -w apachepwd '(sAMAccountName=apacheauth)' | grep result:
18 11 Simone Piccardi
result: 0 Success
19 8 Amministratore Truelite
</pre>
20 9 Simone Piccardi
21 11 Simone Piccardi
dove il prefisso @LDAPTLS_REQCERT=never@ è necessario per disabilitare la verifica del certificato SSL del server AD che come detto non è valido.  
22 4 Amministratore Truelite
23 11 Simone Piccardi
Una volta verificato che l'accesso LDAP al server AD sta funzionando, si potrà passare alla configurazione di Apache, questa in genere andrà divisa in due parti, la prima per la configurazione generica delle interrogazioni  LDAP, che si può fare con il seguente frammento (da inserire ad esempio in @/etc/apache2/conf-available/ad-ldap.conf@ ed abilitare con @a2enconf ad-ldap@):
24 4 Amministratore Truelite
25
<pre>
26 13 Simone Piccardi
# do not verify server certificate, for AD is invalid
27 4 Amministratore Truelite
LDAPVerifyServerCert Off
28 1 Christopher R. Gabriel
# if you have installed in /etc/ssl/certs/ad-server-cert.pem the AD server certificate 
29 12 Simone Piccardi
# (you can get it with: openssl s_client -connect IND.IP.AD.SERV:636| openssl x509 > cert.pem)
30 11 Simone Piccardi
# you can comment the previous directive and uncomment the next one
31
# LDAPTrustedGlobalCert CA_BASE64 /etc/ssl/certs/ad-server-cert.pem
32 1 Christopher R. Gabriel
</pre>
33
34 12 Simone Piccardi
dove si indica ad Apache di non verificare il certificato del server AD con @LDAPVerifyServerCert@, o alternativamente, ottenuto il certificato dello stesso, lo si imposta forzatamente come come fidato con @LDAPTrustedGlobalCert@. 
35 11 Simone Piccardi
36 12 Simone Piccardi
A questo punto le direttive da includere in un virtual host, (o in un file @.htpasswd@) per richiedere l'autenticazione degli utenti sul server AD sono invece le seguenti:
37 1 Christopher R. Gabriel
<pre>
38 11 Simone Piccardi
    AuthType Basic
39
    AuthBasicProvider ldap		
40
    AuthName "AD domain user"
41 12 Simone Piccardi
    AuthLDAPURL "ldaps://IND.IP.AD.SERV/CN=Users,DC=example,DC=com?sAMAccountName?sub?(objectClass=*)"
42
    AuthLDAPBindDN "CN=apacheauth,CN=Users,DC=example,DC=com"
43
    AuthLDAPBindPassword apachepwd
44 11 Simone Piccardi
    AuthzLDAPAuthoritative on
45
    Require valid-user
46 9 Simone Piccardi
</pre>