Progetto

Generale

Profilo

ApacheAuthAD » Cronologia » Versione 11

Versione 10 (Simone Piccardi, 20-05-2024 15:29) → Versione 11/19 (Simone Piccardi, 20-05-2024 17:56)

h1. Autenticazione su Active Directory per Apache 

 Il server web Per far eseguire ad Apache fornisce diverse modalità che consentono di gestire l'autenticazione una 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 utenti appoggiandosi ad un server Active Directory, in modo da poter Directory si può 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. 

 LDAP fornito dai relativi moduli. Nel caso di Debian i moduli di Apache necessari all'autenticazione su LDAP questi sono installati insieme al server, ma non sono abilitati di default, pertanto per poterli utiilizzare peranto andranno abilitati eseguendo i comandi: 

 <pre> 
 a2enmod ldap  
 a2enmod authnz_ldap 
 </pre> 

 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.  

 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 directory usando LDAP, Per questo possiamo 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: @ldap-utils@, che consente di eseguire una interrogazione con: 

 <pre> 
 root@server~: LDAPTLS_REQCERT=never ldapsearch -x -ZZ -H ldaps://IND.IP.AD.SERV ldap://192.168.0.184 -D "CN=apacheauth,CN=Users,DC=example,DC=com" "CN=user,CN=Users,DC=example,DC=com" -b "DC=example,DC=com" -w password '(sAMAccountName=apacheauth)' | grep result: 
 result: 0 Success 
 </pre> 

 dove @ 

 Poniamo il prefisso @LDAPTLS_REQCERT=never@ caso di aver configurato direttamente ed unicamente un sito di default, questa è necessario per disabilitare la verifica del certificato SSL del server AD che come detto non è valido.   

 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@): @/etc/apache2/sites-available/default@: 

 <pre> 
 NameVirtualHost * 
 LDAPVerifyServerCert Off 
 <VirtualHost *> 
	 ErrorLog /var/log/apache2/error.log 
         LogLevel warn 
	 CustomLog /var/log/apache2/access.log combined 
	 ServerSignature On 
	 ServerAdmin xxx@yyy.zz 
	 <Location /myrepo > 
		 # if you have installed Impostiamo il tipo di autenticazione su Basic (attenzione le password viaggiano in /etc/ssl/certs/ad-server-cert.pem the AD server certificate  
 chiaro) 
          	 AuthType Basic 
		 # you can comment the previous directive and uncomment the next one 
 # LDAPTrustedGlobalCert CA_BASE64 /etc/ssl/certs/ad-server-cert.pem 
 </pre> 

 dove si indica Con questa direttiva diciamo ad Apache di apache che se Ldap non verificare il certificato. 

 Le direttive da includere in un virtual host (o in un file @.htpasswd@) per richiedere l'autenticazione sono invece le seguenti: 
 <pre> 
     AuthType Basic 
     autentica l'utente non deve tentare altre autenticazioni 
		 AuthBasicProvider ldap 		
     		
		 AuthName "AD domain user" 
     "Qui mettiamo il titolo della finestra che appare per chiedere l'utente e la password" 
		 # Ora si definisce l'URL a cui indirizzare la richiesta LDAP 
  		 # ed il relativo formato del tipo: scheme://host:port/basedn?attribute?scope?filter 
    		 # L'URL di seguito riportato effettuera' una ricerca per tutti gli oggetti ricorsivamente a partire dal basedn 
      		 # Effettua inoltre la validazione sull'attributo sAMAccountName 
        	 AuthLDAPURL "ldaps://IND.IP.AD.SERV/CN=apacheauth,CN=Users,DC=example,DC=com?sAMAccountName?sub?(objectClass=*)" 
     "ldap://servera/DC=mydomain,DC=com?sAMAccountName?sub?(objectClass=*)" 
		 # Active Directory requires an authenticating DN to access records 
  		 # This is the DN used to bind to the directory service 
    		 # This is an Active Directory user account 
      		 AuthLDAPBindDN "mydomain\user" 
     
		 AuthLDAPBindPassword password 
     
		 AuthzLDAPAuthoritative on 
     
		 Require valid-user 
	 </Location> 
 </VirtualHost> 
 </pre>