Aug 042011
 

apache
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:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*