Single-Sign-On Con Apache Su Linux


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Login/Register

Questo sistema e' un modo un po' arrangiato per agganciare una applicazione funzionante su Linux (Apache) in un dominio AD Microsoft. Il sistema funziona MA solo usando IE, solo in una Intranet e solo se e' possibile cambiare le impostazioni di sicurezza di default di IE. Non funzionera' con altri browser, non ho idea se funzioni tramite VPN (mai provato) e se il web server non e' riconosciuto come parte della intranet.

Un altro problema e' che non e' possibile fare logout. Yep, una volta che vi siete collegati avete fatto login e non c'e' modo di fare logout.

Se questo non e' quello che volete, smettete di leggere.

Il trucco consiste nel richiedere sempre l'autenticazione tramite Apache usando il modulo NTLM al server AD. E quindi 'catturare' le informazioni passate dal browser in automatico. Quindi vi servira' Apache con il modulo mod_ntlm (oltre al server AD naturalmente).

Mod_ntlm lo si puo' scaricare da Sourceforge come codice sorgente, oppure potreste vedere se la vostra distribuzione lo ha precompilato. Se non e' disponibile, dovrete ricompilarlo, il che potrebbe essere complesso.

Se vi trovate nella necessita' di ricompilare mod_ntlm, vi servira' anche apr ed apr_util compilati con il supporto ldap. Se la vostra versione di Apache non ha tale opzione, dovrete prendervi i sorgenti di apr/apr_util e ricompilare anche quelli, e ricompilare apache usando tali versioni e non le versioni built-in.

Per verificare se il vostro apr_util e' compilato con ldap, verificate in /dove/stanno/i/sorgenti/di/apache/srclib/apr-util/config.status e verificate se c'e'

s,@apu_has_ldap@,|#_!!_#|1,g

Se quell'ultimo '1' e' uno '0', apr non ha supporto ldap.

A questo punto la cosa piu' rapida e' prendere i sorgenti di apr ed apr_util dal sito di Apache e ricompilarli con il supporto ldap. Usando le apposite opzioni di configure e poi make e make install. Quindi dovrete ricompilare Apache usando le nuove versioni di apr/apr-util.

WARNING: non scaricate una versione qualunque di apr/apri-util perche' le possibilita' che Apache non vi si ricompili sono elevate. A voi serve la stessa versione fornita con i sorgenti di Apache o la piu' vicina possibile!

Una volta che avete fatto tutto questo, potete compilare mod_ntlm e quindi aggiungerlo ad Apache.

Una volta ricompilato mod_ntlm, copiatelo nella directory dove ci sono gli altri moduli di Apache ed aggiungete una linea al file di configurazione per caricarlo:

LoadModule ntlm_module        modules/mod_ntlm.so

Verificate con apachectl configtest se non ci sono errori, se si lamenta che non riesce a caricare il modulo probabilmente qualche cosa non e' giusto nella compliazione.

Se apachectl non si lamenta, siete a meta' dell'opera.

A questo punto si tratta di configurare il vostro sito web per richiedere sempre l'autenticazione da parte del client. Questo si puo' fare usando un file .htaccess oppure usando le stesse opzioni direttamente nel file httpd.conf.

Il nocciolo della questione e' che il sito web deve sempre richiedere l'autenticazione al client, ed il client deve essere configurato per autenticarsi automaticamente, inviando sempre le credenziali al sito. Dopo di che si tratta di acchiappare le credenziali dall'header della richiesta.

Per richiedere l'autenticazione si puo' usare un file .htaccess nella docroot della vostra applicazione o le stesse opzioni direttamente nel file httpd.conf:

AuthType NTLM
NTLMAuth on
NTLMAuthoritative on
NTLMBasicAuth off
NTLMBasicRealm nomedominio
NTLMDomain fqdndel.dominio
NTLMServer fqdn.del.dc
Require valid-user

Tutti i parametri devono essere in maiuscolo ed ovviamente devono essere quelli corretti. In particolar modo il fqdn.del.dc deve essre il "nome" completo del DC. No, un indirizzo IP non funzionera' e no, una riga nel /etc/hosts non funzionera'. Vi serve un DNS!.

Una volta fatto questo, e riavviato apache se avete modificato il file di configurazione, dovreste essere in grado di connettervi al vostro sito e vedere la richiesta di autenticazione, e riuscire ad autenticarvi usando lo username/password del dominio AD.

Se questo funziona, il passo successivo e' configurare il client per farlo in automatico.

Per impostare il client vi servono due cose:

  1. Aggiungere l'indirizzo del sito web alla lista dei siti "intranet"
  2. Impostare le opzioni di sicurezza perche' IE si autentichi automaticamente.

Entrambe sono fatte tramite le "Opzioni Internet" ed il pannello 'Sicurezza'.

Fatto questo, dovreste essere in grado di ricaricare il sito ed accedere direttamente senza alcuna richiesta di password.

Attenzione: non c'e' nessun modo di forzere il browser ad inviare le credenziali senza modificare le impostazioni di sicurezza sul client.

Quindi, se tutto ha funzionato, ogni volta che un client accede al vostro sito intranet, inviera' in automatico le credenziali di sicurezza che verranno controllate dal server AD e quindi sara' autenticato. Adesso si tratta solo di catturare l'informazione di chi accidenti e' l'utente ed usare tale informazione per... fare quello che vi pare.

Il nome utente e' contenuto a questo punto nella variabile di ambiente REMOTE_USER

Il modo piu' semplice di verificare questo e' usando il programmino di esempio 'printenv' distribuito con Apache nella directory cgi_bin. Rendetelo eseguibile e richiamatelo via browser, dovreste vedere qualche cosa del tipo:

AUTH_TYPE="NTLM"
...blah blah...
REMOTE_USER="vostronomeutente"
...blah blah...

Notare che la password non e' mai disponibile.

Come usare l'informazione dipende da voi e da come e' fatta l'applicazione che state cercando di agganciare al dominio, in molti casi si tratta solo di modificare la parte che esegue l'autenticazione in modo da acchiappare il nome utente dalla variabile di ambiente e semplicemente considerare l'utente 'valido' senza altri controlli (la password e' gia' controllata da NTLM).

Questo puo' essere semplice o no... non c'e' modo di dirlo senza guardare l'applicazione.

Questo non e' un sistema esattamente 'semplice', specie se dovete ricompilare apache e parti del sistema per farlo funzionare, quindi ci sono parecchie cose che possono non andare nel verso giusto... se le cose vanno male si puo' cominciare a guardare nel error_log di apache e vedere cosa c'e' che non va.

mod_ntlm non si compila
Questo di solito capita se vi manca qualche pezzo di apr o apr_util, o sono compilati senza il supporto ldap.

make mod_ntlm non ritorna nessun errore, ma non c'e' nessun mod_ntlm.so da nessuna parte!
Questo e' successo a me all'inizio, ed ho scoperto che, per qualche motivo, il modulo era creato in una directory .lib. Non so perche' ma stava li'. Quindi l'ho semplicemente copiato al posto giusto e fine.

Internal Server Error quando si cerca di connettersi al sito
Verificare nell'error_log di apache.

send_ntlm_challenge: no conn. handle...trouble communicating with PDC/BDC? returning internal server error
Questo puo' essere per due cause: il DNS e' socrretto o il firewall impedisce il collegamento. Provate a spegnere il firewall e se il problema persiste il problema e' il DNS. Lo dico di nuovo: vi serve un DNS configurato correttamente!, con le zone forward e reverse corrette, che sia in grado di risolvere sia il dc che il sito web che tutto il resto, no, un paio di righe nel /etc/hosts non vanno bene. Il DNS deve funzionare sia dal DC che dal sito web che dal resto della rete.

RFCNB_Call: RFCNB_Session_Req failed with errno -1 - Called_Name 192 Calling_Name website.name.here
Stessa cosa di prima: il dns non funzica.

Niente 'REMOTE_USER' tra le variabili
Questo significa che il browser non riconosce il sito come 'intranet' e non invia i dati di autenticazione. Il che potrebbe dipendere dal nome del vostro sito web e dal nome del vostro dominio.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

4 messaggi this document does not accept new posts
FredFred Di Fred - postato il 14/08/2008 12:29
In fact, it DOES work with Firefox. You need to go in about:config, and setup these three values : network.automatic-ntlm-auth.trusted-uris , network.negotiate-auth.delegation-uris, network.negotiate-auth.trusted-uris, to your intranet value : either "server.intranet.company.com", or even ".intranet.company.com" (begins with a dot !).


The ugly thing is that on my server, it does work with FF... and not with IE !!


HTH

Fred (fred.removethispart.ssocomments@cabinet-cilex.com)


thanks for the info


diegussend_ntlm_challenge Di diegus - postato il 15/09/2009 13:15

Ciao sono settimane che combatto con questo errore: tu come molti altri in internet suggerite che sia dovuto a un problema di DNS, ma nel mio caso è tutto a posto, in più la macchina di test della rete funziona perfettamente, ma su quella di produzione si pianta cosė...
Potrebbe essere qualcos'altro?
Entrambe le macchine girano su centos 5.3 e sono configurate pressoché in maniera uguale, in particolare le configurazioni di apache, php, mod_ntlm, apr, dns sono identiche.
Il PDC interrogando il dns vede entrambe (è lui il DNS...)

--
diegus


Davide Bianchi@ diegus Di Davide Bianchi - postato il 15/09/2009 13:52

> Ciao sono settimane che combatto con questo errore: tu come molti altri in internet suggerite che sia dovuto a un problema di DNS, ma nel mio caso è tutto a posto, in più la macchina di test della rete funziona perfettamente, ma su quella di produzione si pianta cosė...


Se su una macchina funziona e sull'altra no evidentemente le due macchine NON SONO UGUALI. La prima cosa che mi viene in mente e' di scambiarle, se il problema si ripresenta vuole dire che e' un problema di networking o di firewall, senno' e' qualche cosa relativo alla macchina stessa.

--
Davide Bianchi


Enrico Betti Di Enrico Betti - postato il 25/05/2012 11:46

Ciao, ho fatto un po' di prove e volevo aggiungere un paio di commenti al post.

Per prima cosa il modulo auth_ntml sbaglia spesso a compilare su linux, ma si puo' usare

Apache2-AutenNTML-0.02.tar.gz

(lo trovi in internet), che e' un moduletto in perl, che non richiede installazione tra i moduli di apache ma solo un make, e poi impostare KeepAlive=on su httpd.conf

Credo che la configurazione di .htaccess sia la stessa, cmq da me ha funzionato praticamente subito.

Come seconda cosa, sul pannello di controllo devi abilitare l' invio di credenziali ai siti attendibili, come:

Computer Configuration – Windows Settings – Security Settings – Local Policies – Security Options

e dopo aver individuato la chiave “Network security: LAN Manager authentication level” impostiamone il valore su

“Send LM & NTLM – use NTLMv2 session security if negotiated”

Detto questo:

- internet explorer: il sito deve essere tra quelli atendibili e l'invio di credenziali abilitato.

- firefox: bisogna usare about:config, e cambiare la chiave network.automatic-ntlm-auth.trusted-uris listando su questa i siti attendibili separati da virgola.

- chrome: funziona direttamente. Chrome, molto irresponsabilmente, invia le credenziali appena il pannello di controllo e' impostato per poterle inviare.. non molto sicuro

studioideasw@gmail.com

--
Enrico Betti


Precedente Successivo

Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di "sicurezza informatica" (aka: $networkgestapo) di Haarlem. Contatti: mail: davide AT onlyforfun.net , Jabber: davideyeahsure AT gmail.com,

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gort