Questo è un mio articolo, originariamente pubblicato su Wazi
Apache è il server web più diffuso al mondo e il suo uso normale è di fornire siti web sulla rete, ma a volte è possibile utilizzarlo anche per fornire altri servizi.
In questo tutorial vedremo come configurare un Apache con DAV e LDAP per creare un file server, che in base al profilo dell’utente su Ldap darà loro il permesso di leggere, scrivere,o nessuno.
Come si può utilizzare?
Un file server realizzato in questo modo può essere utilizzato facilmente da Windows, Mac o Linux, il file si può accedere sia dal web con qualsiasi browser o con programmi che supportano il protocollo DAV. A titolo di esempio si potrebbe mantenere il vostro calendario di gruppo c’è e aggiornarlo con Lighting (l’estensione per Thunderbird che gestisce il calendario), e così con questo metodo ogni membro del gruppo avrà il suo calendario in sincrono, oppure si può utilizzare come un sistema di documentazione di base dove mettere i vostri doc, pdf, o qualsiasi documento e condividerlo nella vostra azienda (o all’esterno se volete).
Un altro utilizzo comune è impiegare questo repository come un sistema di controllo di versione con SVN, Git o Mercurial.
Questa guida è basata su Debian 6, quindi tutti i pacchetti utilizzati e testati sono quelli presenti ad oggi in quella distribuzione. Se si utilizzano altre distribuzioni probabilmente troverete piccole differenze nelle versioni o la posizione dei file di configurazione, ma la configurazione stessa e tutti i principi possono essere utilizzati su qualsiasi distribuzione GNU/Linux.
Io utilizzo OpenLDAP come server Ldap, ma qualsiasi server LDAP che supporta il protocollo standard (anche Microsoft Active Directory) dovrebbe funzionare, l’installazione di un server LDAP non è lo scopo di questa guida quindi si presuppone che il server con gli utenti sia pronto. Vi faccio vedere come ho classificato i miei utenti in gruppi, per dare loro autorizzazioni diverse.
convenzioni :
Le linee di testo pre-formattato che iniziano con # sono comandi dati come root sul server Debian.
Le linee di testo pre-formattato senza il # sono l’output dei comandi o configurazioni.
Impostazione del file system per i nostri documenti
Metteremo i nostri documenti in una particolare directory sul server e daremo il permesso ad Apache di scrivere in esso:
# mkdir /documents # chown www-data. /documents |
Struttura di OpenLDAP
Il server openldap utilizzato in questa guida ha una struttura come questa:
# mkdir /documents # chown www-data. /documents |
OpenLDAP Structure
The openLdap used in this guide has a structure like this one:
c=it | o=mycompany | ou=Users | cn=User1 cn=User2 ... ou=Groups | cn=doc-admins cn=doc-users
Tutti gli utenti sono mappati nel sottoalbero: ou=users,o=mycompany,c=it,Io utilizzo l’Objectclass InetOrgPerson per mappare i loro attributi.
I gruppi sono mappati nel sottoalbero:ou=groups,o=mycompany,c=it, gli utenti che appartengono al gruppo doc-admins saranno in grado di leggere e scrivere documenti, mentre gli utenti che sono nel gruppo doc-users potranno solo leggere i documenti. Per i gruppi io uso l’ObjectClass: groupOfNames
Inoltre nel LDAP è necessario un utente speciale con i permessi di sola lettura su tutto l’albero, per me questo è identificato da:
dn:cn=doc-reader,o=mycompany,c=it password: SECUREPASS
Configurazione di Apache
Se non è presente sul server, installare Apache 2 con il comando:
# apt-get install apache2
Questo installerà apache 2.2.16-6 e tutti i moduli di cui abbiamo bisogno per questo progetto.
Ora abbiamo bisogno di attivare i moduli dav di apache:
# a2enmod dav_fs Considering dependency dav for dav_fs: Enabling module dav. Enabling module dav_fs.
Ed abilitiamo anche i moduli LDAP di apache:
# a2enmod authnz_ldap Considering dependency ldap for authnz_ldap: Enabling module ldap. Enabling module authnz_ldap.
Authentication provider
Configuriamo il provider di autenticazione per LDAP, creiamo un nuovo file chiamato /etc/apache2/conf.d/ldapprov.conf e mettiamo una configurazione come questa:
<AuthnProviderAlias ldap ldap-people-alias> AuthLDAPURL ldaps://myldapurl.com:636/ou=users,o=mycompany,c=it?uid?sub?(objectClass=*) TLS AuthLDAPBindDN cn=doc-reader,o=mycompany,c=it AuthLDAPBindPassword SECUREPASS </AuthnProviderAlias>
Questa configurazione verrà utilizzata in seguito nel VirtualHost, per dire ad Apache dove cercare gli utenti.
Se si dispone di più rami nel vostro LDAP o più LDAP che si desidera utilizzare è possibile avere più blocchi, per esempio, si potrebbe avere anche un secondo LDAP con queste coordinate:
<AuthnProviderAlias ldap ldap2-people-alias> AuthLDAPURL ldaps://myldap2url.com:636/ou=administration,ou=departments,o=mycompany,c=it?uid?sub?(objectClass=*) TLS AuthLDAPBindDN cn=doc-reader,o=mycompany,c=it AuthLDAPBindPassword SECUREPASS </AuthnProviderAlias>
Potete mettere tutti i vostro provider di autenticazione nello stesso file.
Verificate http://httpd.apache.org/docs/2.2/mod/mod_authn_alias.htmlper maggiori informazioni su come utilizzare AuthnProviderAlias
Virtual Host
Ora creiamo il file per il nuovo sito, creare il file in /etc/apache2/sites-available/mydoc.com, questo sarà il file di configurazione principale.
<VirtualHost mydoc.com:80> ServerName mydoc.com ServerAdmin [email protected] HostnameLookups Off UseCanonicalName Off ServerSignature Off DocumentRoot /var/www/mydoc ErrorLog "/var/log/apache2/mydoc-error.log" CustomLog "/var/log/apache2/mydoc-access.log" common TransferLog "/var/log/apache2/mydoc-transfer.log"
Direttive per supportare Dav con Windows.
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "Microsoft-WebDAV-MiniRedir/5.1.2600" redirect-carefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS" redirect-carefully <IfModule mod_headers.c> Header add MS-Author-Via "DAV" </IfModule> <IfModule mod_encoding.c> EncodingEngine on NormalizeUsername on </IfModule>
Fine delle direttive per supportare Dav con Windows.
DavMinTimeout 600 Alias /mydoc /documents <Location /mydoc> Options +Indexes IndexIgnore .. IndexOptions -IconsAreLinks NameWidth=* FancyIndexing SuppressLastModified FoldersFirst IndexOrderDefault Ascending Name Dav On AuthName "WEBDAV: insert your username and password" AuthType Basic AuthBasicAuthoritative off AuthBasicProvider ldap-people-alias AuthzLDAPAuthoritative on AuthLDAPGroupAttributeIsDN on AuthLDAPGroupAttribute member AuthLDAPURL ldaps://myldapurl.com:636/ou=groups,o=mycompany,c=it TLS AuthLDAPBindDN cn=doc-reader,o=mycompany,c=it AuthLDAPBindPassword SECUREPASS #Accesso in lettura/Scrittura <limitexcept GET HEAD OPTIONS PROPFIND> Require ldap-group cn=doc-admins, ou=groups,o=mycompany,c=it </limitexcept> #Accesso in sola lettura <limit GET PROPFIND OPTIONS HEAD> Require ldap-group cn=doc-users, ou=groups,o=mycompany,c=it </limit> </Location> </VirtualHost>
Spiegazioni delle configurazioni:
Con questa configurazione Apache utilizza il provider di autenticazione definito per controllare l’autenticazione degli utenti. Per fare questo, utilizziamo l’utente con DN:cn=doc-reader,o=mycompany,c=it che ha accesso in lettura a tutti i nostri LDAP, dopo che vi è una parte interessante, le direttive limitexcept e limit, queste sono utilizzate per differenziare il tipo di autorizzazione che gli utenti hanno a seconda del loro gruppo.
La direttiva AuthLDAPGroupAttributeIsDN dice di usare il distinguished name dell’utente quando si efefttua il controllo di appartenenza al gruppo. In caso contrario, lo username verrà utilizzato.
Ad esempio, supponiamo che il cliente ha inviato il nome utente bjenson
, che corrisponde su LDAP al DN:cn=Babs Jenson, o=Airius
. Se questa direttiva è configurata, mod_authnz_ldap
verificherà se il gruppo ha cn=Babs Jenson, o=Airius
come un membro. Se questa direttiva non è configurata allora mod_authnz_ldap
verificherà se il gruppo ha bjenson
come un membro.
la direttiva AuthLDAPGroupAttribute specifica quali attributi LDAP vengono utilizzati per verificare la appartenenza al gruppo.
Verifica della configurazione
Abbiamo configurato tutto così ora possiamo far partire l’apache e testare il nostro repository Dav
pre># /etc/init.d/apache2 start (o restart se è già attivo)
Ora è possibile utilizzare un client Dav e andare al http://mydoc.com/mydoc , e iniziare a testare la lettura/scrittura e gli utenti in sola lettura.
Su Linux uno strumento a riga di comando per testare WebDAV è cadaver. Se si preferisce la GUI, konqueror è in grado di aprire gli URL WebDAV come “webdav://…” o “webdavs://…” o sotto Gnome nautilus può fare lo stesso.
Se utilizzate Windows, da XPin avanti Internet Explorer supporta WebDAV. Per farlo andate in Internet Explorer → Open Location → http://mydoc.com/mydoc [x] Open as webfolder → login .
Debug
in caso di problemi la prima cosa da controllare è il log degli errori di apache: /var/log/apache2/mydoc-error.log, qui dovreste trovare indicazioni su ciò che è andato male.
Se avete problemi con la fase di autenticazione o autorizzazione, è possibile attivare questa location nel vostro virtualhost, andando lì avrete maggiori informazioni su quello che sta succedendo tra Apache ed il vostro LDAP:
<Location /cache-info> sethandler ldap-status Order deny,allow Allow from localhost </Location>
Si noti che questa location ha un accesso limitato a localhost quindi è necessario avere un browser locale (se si tratta di un server utilizzare il browser testuale w3m ), o se non potete farlo mettete il vostro IP invece di localhost.
Conclusioni
Con WebDav e un metodo di autenticazione si può facilmente impostare una buona soluzione web flessibile ed elastica per tenere e condividere i file con Apache. In questa guida ho usato LDAP per l’autenticazione, ma questo potrebbe essere anche stato fatto con MySQL o Oracle, o se non avete alcuna base dati utente adatta si può anche utilizzare 2 flat file, uno per gli utenti e uno per i gruppi .
Al momento mi sto godendo questa soluzione per la condivisione del calendario e la condivisione dei documenti e questo rende felici sia gli utenti Linux che Windows.
Riferimenti:
Apache Auth_ldap http://httpd.apache.org/docs/2.2/mod/mod_auth_ldap.html#authldapgroupattributeisdn
Apache Mod_Dav http://httpd.apache.org/docs/2.2/mod/mod_dav.html
Popular Posts:
- None Found