Questo tutorial spiega come configurare il PHP per testare la connettività con un server LDAP e illustra la configurazione da fare su Apache per permettere l’autenticazione integrata di utenti di Active Directory.
PRE-REQUISITI
Sistemi operativi supportati:
Windows 10/Windows Server 2012 R2/Windows Server 2016/ Windows Server 2019
Versione Server Apache installata: Apache/2.4.46 (Win64)
Versione di PHP installata: 7.4.11
Verificare la versione di Apache e di PHP installata su un PC o Server con Microsoft Windows
ABILITAZIONE DEL MODULO LDAP IN APACHE
Prima di tutto scaricare le tre DLL e copiarle all’interno della cartella PHP nella root.
libeay32.dll
libsasl.dll
ssleay32.dll
Aprire il file httpd.conf all’interno della cartella C:\Apache24\conf
Abilitare le seguenti righe
0 1 |
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule ldap_module modules/mod_ldap.so |
Salvare e chiudere il file.
Sotto riporto la configurazione del file httpd.conf relativo ai moduli
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# Example: # LoadModule foo_module modules/mod_foo.so # #LoadModule access_compat_module modules/mod_access_compat.so LoadModule actions_module modules/mod_actions.so LoadModule alias_module modules/mod_alias.so LoadModule allowmethods_module modules/mod_allowmethods.so LoadModule asis_module modules/mod_asis.so LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_digest_module modules/mod_auth_digest.so #LoadModule auth_form_module modules/mod_auth_form.so #LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_core_module modules/mod_authn_core.so #LoadModule authn_dbd_module modules/mod_authn_dbd.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_socache_module modules/mod_authn_socache.so #LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule authz_core_module modules/mod_authz_core.so #LoadModule authz_dbd_module modules/mod_authz_dbd.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_host_module modules/mod_authz_host.so #LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule autoindex_module modules/mod_autoindex.so #LoadModule brotli_module modules/mod_brotli.so #LoadModule buffer_module modules/mod_buffer.so #LoadModule cache_module modules/mod_cache.so #LoadModule cache_disk_module modules/mod_cache_disk.so #LoadModule cache_socache_module modules/mod_cache_socache.so #LoadModule cern_meta_module modules/mod_cern_meta.so LoadModule cgi_module modules/mod_cgi.so #LoadModule charset_lite_module modules/mod_charset_lite.so #LoadModule data_module modules/mod_data.so #LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_lock_module modules/mod_dav_lock.so #LoadModule dbd_module modules/mod_dbd.so #LoadModule deflate_module modules/mod_deflate.so LoadModule dir_module modules/mod_dir.so #LoadModule dumpio_module modules/mod_dumpio.so LoadModule env_module modules/mod_env.so #LoadModule expires_module modules/mod_expires.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule filter_module modules/mod_filter.so #LoadModule http2_module modules/mod_http2.so #LoadModule headers_module modules/mod_headers.so #LoadModule heartbeat_module modules/mod_heartbeat.so #LoadModule heartmonitor_module modules/mod_heartmonitor.so #LoadModule ident_module modules/mod_ident.so #LoadModule imagemap_module modules/mod_imagemap.so LoadModule include_module modules/mod_include.so #LoadModule info_module modules/mod_info.so LoadModule isapi_module modules/mod_isapi.so #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so #LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so LoadModule ldap_module modules/mod_ldap.so #LoadModule logio_module modules/mod_logio.so LoadModule log_config_module modules/mod_log_config.so #LoadModule log_debug_module modules/mod_log_debug.so #LoadModule log_forensic_module modules/mod_log_forensic.so #LoadModule lua_module modules/mod_lua.so #LoadModule macro_module modules/mod_macro.so #LoadModule md_module modules/mod_md.so LoadModule mime_module modules/mod_mime.so #LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule negotiation_module modules/mod_negotiation.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_express_module modules/mod_proxy_express.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so #LoadModule proxy_html_module modules/mod_proxy_html.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_http2_module modules/mod_proxy_http2.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so #LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so #LoadModule ratelimit_module modules/mod_ratelimit.so #LoadModule reflector_module modules/mod_reflector.so #LoadModule remoteip_module modules/mod_remoteip.so #LoadModule request_module modules/mod_request.so #LoadModule reqtimeout_module modules/mod_reqtimeout.so LoadModule rewrite_module modules/mod_rewrite.so #LoadModule sed_module modules/mod_sed.so #LoadModule session_module modules/mod_session.so #LoadModule session_cookie_module modules/mod_session_cookie.so #LoadModule session_crypto_module modules/mod_session_crypto.so #LoadModule session_dbd_module modules/mod_session_dbd.so LoadModule setenvif_module modules/mod_setenvif.so #LoadModule slotmem_plain_module modules/mod_slotmem_plain.so #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #LoadModule socache_dbm_module modules/mod_socache_dbm.so #LoadModule socache_memcache_module modules/mod_socache_memcache.so #LoadModule socache_redis_module modules/mod_socache_redis.so #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so #LoadModule speling_module modules/mod_speling.so #LoadModule ssl_module modules/mod_ssl.so #LoadModule status_module modules/mod_status.so #LoadModule substitute_module modules/mod_substitute.so #LoadModule unique_id_module modules/mod_unique_id.so #LoadModule userdir_module modules/mod_userdir.so #LoadModule usertrack_module modules/mod_usertrack.so #LoadModule version_module modules/mod_version.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so #LoadModule watchdog_module modules/mod_watchdog.so #LoadModule xml2enc_module modules/mod_xml2enc.so |
ABILITAZIONE DELL’ESTENSIONE LDAP IN PHP
Abilitare l’estensione ldap anche nel PHP editando il file C:\php\php.ini
Andare nella sezione delle estensioni ed abilitare extension=php_ldap come mostrato nell’immagine sovrastante.
NOTA BENE: è possibile abilitare l’estensione semplicemente togliendo il simbolo # dall’inizio della riga oppure è possibile mettere il path della DLL per esteso come mostrato sotto
0 |
extension=C:/php/ext/php_ldap.dll |
CONFIGURAZIONE E TEST DEL BIND LDAP IN PHP – METODO 1
Dopo aver verificato la presenza delle DLL editare il file C:\Apache24\htdocs\index.php
Aggiungere nella sezione PHP le seguenti righe di codice
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ldap_dn = "cn=utente-per-lettura-ldap,dc=dominio,dc=com"; $ldap_password = "password"; $ldap_con = ldap_connect("ldap.dominio.com"); ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3); if(ldap_bind($ldap_con, $ldap_dn, $ldap_password)) { echo "Bind successful!"; } else { echo "Invalid user/pass or other errors!"; } |
Salvare e chiudere il file di configurazione.
PARAMETRI DA SOSTITUIRE
cn=utente-per-lettura-ldap,dc=dominio,dc=com: inserire il CN dell’utente con il quale leggeremo l’LDAP
password: inserire la password dell’utente con il quale leggeremo l’LDAP
ldap.dominio.com: inserire il nome FQDN oppure l’IP del domain controller
A questo punto per verificare che il Bind su Active Directory funzioni richiamare da un browser il link del nostro server Apache http://IP_SERVER/index.php
Se il Bind funziona dovremmo vedere una schermata come quella sovrastante con il messaggio Bind successful!
CONFIGURAZIONE E TEST DEL BIND LDAP IN PHP – METODO 2
Creare un File nella root di Apache chiamato testldap.php e inserire le seguenti righe di codice
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $AD_search_bind_DN = 'CN=ServiceUserLDAP,OU=User,OU=Service,DC=dominio,DC=com'; $AD_search_bind_PW = 'password'; ini_set('display_errors', 1); error_reporting(E_ALL); ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); $conn = ldap_connect('ldap://server-active-directory/') or die("Failed to connect to ldap server."); ldap_set_option(NULL, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_bind($conn, $AD_search_bind_DN, $AD_search_bind_PW) or die("Failed to bind to ldap server: " + ldap_error($conn)); echo "Successful LDAP bind."; ?> ?> <!DOCTYPE html> <html lang="en"> <head> </head> <body> </body> </html> |
Salvare e chiudere il file di configurazione.
PARAMETRI DA SOSTITUIRE
CN=ServiceUserLDAP,OU=User,OU=Service,DC=dominio,DC=com: inserire il CN dell’utente con il quale leggeremo l’LDAP
password: inserire la password dell’utente con il quale leggeremo l’LDAP
ldap://server-active-directory: inserire il nome FQDN oppure l’IP del domain controller
A questo punto per verificare che il Bind su Active Directory funzioni richiamare da un browser il link del nostro server Apache http://IP_SERVER/testldap.php
Se il Bind funziona dovremmo vedere una schermata come quella sovrastante con il messaggio Successful LDAP bind.
CONFIGURAZIONE E TEST PER LA RICERCA DEGLI UTENTI LDAP IN PHP
A questo punto editare il file C:\Apache24\htdocs\index.php
Sostituire il contenuto editato in precedenza con il seguente:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ldap_dn = "cn=read-only-admin,dc=example,dc=com"; $ldap_password = "password"; $ldap_con = ldap_connect("ldap.dominio.com"); ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3); if(ldap_bind($ldap_con, $ldap_dn, $ldap_password)) { $filter = "(cn=raffaele.chiatto)"; $result = ldap_search($ldap_con,"dc=example,dc=com",$filter) or exit("Unable to search"); $entries = ldap_get_entries($ldap_con, $result); print "<pre>"; print_r ($entries); print "</pre>"; } else { echo "Invalid user/pass or other errors!"; } |
Per verificare che la ricerca utenti su Active Directory funzioni richiamare da un browser il link del nostro server Apache http://IP_SERVER/index.php
Se è tutto corretto dovremmo vedere una schermata con il path Active Directory dell’utente cercato.
CONFIGURAZIONE GENERALE APACHE
Prima di procedere con le configurazioni specifiche di Apache bisogna apportare le seguenti modifiche.
Cercare nel file httpd.conf la sezione Directory che contiene le seguenti righe di codice
0 1 2 3 4 |
<Directory /> Options FollowSymLinks AllowOverride All Require all granted </Directory> |
Commentare come mostrato di seguito
0 1 2 3 4 |
<Directory /> Options FollowSymLinks #AllowOverride All #Require all granted </Directory> |
Salvare e chiudere il file di configurazione.
CONFIGURAZIONE DI APACHE CON LDAP – AUTENTICAZIONE TRAMITE APPARTENENZA AD UN GRUPPO DI ACTIVE DIRECTORY
A questo punto, dopo aver verificato il corretto funzionamento del Bind su Active Directory, possiamo procedere con la configurazuione di Apache in modo da permettere l’autenticazione solo agli utenti facenti parte di un determinato gruppo di Active Directory.
Le direttive Require di Apache vengono utilizzate durante la fase di autorizzazione per garantire che un utente sia autorizzato ad accedere a una risorsa.
In questo caso si utilizza il modulo mod_authnz_ldap con l’autorizzazione ldap-group
Aprire il file httpd.conf ed incollare al fondo le seguenti righe di codice:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<Location /> AuthLDAPBindAuthoritative off AuthLDAPBindDN "CN=ServiceUserLDAP,OU=User,OU=Service,DC=dominio,DC=com" AuthLDAPBindPassword "password" AuthLDAPURL "ldap://server-active-directory:389/OU=User,OU=Service,DC=dominio,DC=com?sAMAccountName?sub?(objectClass=*)" AuthType Basic AuthLDAPRemoteUserAttribute on AuthName "Inserire il nome dell'applicazione" AuthBasicProvider ldap AuthLDAPGroupAttributeIsDN on AuthLDAPGroupAttribute member LDAPReferrals Off Require ldap-group CN=Gruppo_Users,OU=Groups,DC=dominio,DC=com </Location> |
PARAMETRI DA SOSTITUIRE
CN=ServiceUserLDAP,OU=User,OU=Service,DC=dominio,DC=com: inserire il CN dell’utente con il quale leggeremo l’LDAP
password: inserire la password dell’utente con il quale leggeremo l’LDAP
ldap://server-active-directory:389/OU=User,OU=Service,DC=dominio,DC=com: inserire il nome FQDN oppure l’IP del domain controller con la OU dove andremo a ricercare il gruppo di Active Directory
Inserire il nome dell’applicazione: Inserire il nome o la descrizione dell’applciazione da visualizzare sulla schermata di login
CN=Gruppo_Users,OU=Groups,DC=dominio,DC=com: Inserire il CN del gruppo Active Directory
Salvare e chiudere il file di configurazione quindi riavviare il servizio Apache.
Se adesso si prova a richiamare la pagina web ci verrà richiesta l’autenticazione.
Non dovremo far nient’altro che inserire le nostre credenziali di dominio per accedere alla pagina web.
ATTENZIONE: Ogni volta che si aggiunge un utente al gruppo in Active Directory bisogna riavviare il servzio Apache.
CONFIGURAZIONE DI APACHE CON LDAP – AUTENTICAZIONE TRAMITE USER ACCOUNT SPECIFICO
In questo caso possiamo procedere con la configurazuione di Apache in modo da permettere l’autenticazione solo ad una lista di utenti.
Le direttive Require di Apache vengono utilizzate durante la fase di autorizzazione per garantire che un utente sia autorizzato ad accedere a una risorsa.
In questo caso si utilizza il modulo mod_authnz_ldap con l’autorizzazione ldap-user.
Aprire il file httpd.conf ed incollare al fondo le seguenti righe di codice:
0 1 2 3 4 5 6 7 8 9 10 11 |
<Location /> AuthBasicProvider ldap AuthzLDAPAuthoritative Off (This configuration parameter is not applicable for Apache version 2.4) AuthLDAPURL ldap://server-active-directory:389/OU=User,OU=Service,DC=dominio,DC=com?sAMAccountName?sub?(objectClass=user) AuthLDAPBindDN "CN=ServiceUserLDAP,OU=User,OU=Service,DC=dominio,DC=com" AuthLDAPBindPassword "password" AuthType Basic AuthName "Inserire il nome dell'applicazione" Require ldap-user "Mario.Bianchi" Require ldap-user "Mario.Rossi" Require ldap-user "Claudio.Gialli" </Location> |
Salvare e chiudere il file di configurazione quindi riavviare il servizio Apache.
Se adesso si prova a richiamare la pagina web ci verrà richiesta l’autenticazione.
Non dovremo far nient’altro che inserire le nostre credenziali di dominio per accedere alla pagina web.
SPIEGAZIONE DEI PARAMETRI DI CONFIGURAZIONE
AuthzLDAPAuthoritative
specifica ad Apache che l’autenticazione LDAP / Active Directory deve sostituire qualsiasi altra forma di autenticazione.
AuthLDAPBindDN è il DN utente a cui Apache si collegherà quando si connetterà al server LDAP / Active Directory.
AuthLDAPURL è l’URL LDAP / Active Directory che specifica il server LDAP / Active Directory, la posizione in cui gli utenti sono archiviati all’interno della directory e gli attributi che verranno utilizzati come nome utente durante l’autenticazione.
AuthType è il tipo di autenticazione che verrà utilizzato. Basic ci offre la finestra di dialogo per inserire le nostre credenziali.
AuthName è il testo che apparirà nella finestra di dialogo di accesso. Questo può variare a seconda del browser web.
AuthBasicProvider specifica che useremo LDAP come meccanismo di autenticazione.
AuthLDAPGroupAttributeIsDN quando impostata su ON questa opzione specifica di utilizzare il DN dell’utente durante il controllo delle autorizzazioni di gruppo nel server LDAP / Active Directory. Altrimenti verrà utilizzato il nome utente, in questo esempio sAMAccountName.
AuthLDAPGroupAttribute è l’attributo nel server LDAP / Active Directory che viene utilizzato per verificare l’appartenenza al gruppo.
Require: se impostato su ldap-group indica ad Apache che l’utente deve essere nel gruppo specificato per consentire l’accesso.
Require: Le direttive Require di Apache vengono utilizzate durante la fase di autorizzazione per garantire che un utente sia autorizzato ad accedere a una risorsa. mod_authnz_ldap estende i tipi di autorizzazione con ldap-user, ldap-dn, ldap-group, ldap-attribute e ldap-filter. È possibile utilizzare anche altri tipi di autorizzazione, ma potrebbe essere necessario caricare moduli di autorizzazione aggiuntivi.
Per maggiorni informazioni sull’utilizzo del Modulo mod_authnz_ldap su Apache visitare il sito ufficiale di Apache al seguente link
http://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html
Download “Librerie DLL per PHP” Librerie-PHP-per-LDAP.zip – Scaricato 1540 volte – 363,95 KB
Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi.
Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare.
Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.
0 Comments