Single-Sign-On Con Apache Su Linux |
Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | 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:
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.
Fred Di Fred postato il 14/08/2008 12:29
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
send_ntlm_challenge Di diegus postato il 15/09/2009 13:15
@ diegus Di Davide Bianchi postato il 15/09/2009 13:52
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
Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di Hosting in Olanda.
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".