Finora abbiamo visto come autenticare un utente, cioè fare in modo che debba in qualche modo identificarsi quando tenta di accedere al nostro repository, ad esempio tramite username e password, oppure tramite un certificato. È possibile tuttavia che si voglia differenziare l'accesso tra diversi utenti, ad esempio aprendo il repository in sola lettura per alcuni, e in modifica per altri.
Il modo più semplice per impostare un diverso tipo di accesso è quello di inserire la direttiva Require valid-user nel tag <Limit [operazioni]>
o <LimitExcept [operazioni]>
.
Quando Apache trova questa opzione, richiede l'autenticazione solo per le operazioni specificate (Limit
), o per tutte le operazioni tranne quelle specificate (LimitExcept
).
Questa opzione però si rivela scomoda e poco flessibile rispetto a all'uso del modulo authz_mod_svn, per cui continueremo ad usare il modulo nel resto della guida. Per ulteriori dettagli su Limit
e LimitExcept
si rimanda guida ufficiale.
Il pacchetto dovrebbe essere già stato installato insieme alle librerie svn per Apache (libapache2-svn
). Su Debian, è possibile verificare la presenza del file mod_authz_svn
nella cartella /usr/lib/apache2/modules
, mentre il caricamento vero e proprio del modulo è effettuato dalla direttiva:
LoadModule authz_svn_module modules/mod_authz_svn.so
che è inclusa nel file /etc/apache2/mods-available/dav_svn.load
.
L'ultimo passaggio è quello di specificare nel file del VirtualHost
il percorso del file di controllo degli accessi.
1 <VirtualHost *> 2 LoadModule dav_svn_module modules/mod_dav_svn.so 3 ServerName svn.vd-devel 4 DocumentRoot /var/svn/guidasvn/ 5 <Location /repos> 6 DAV svn 7 SVNPath /var/svn/guidasvn 8 Require valid-user 9 AuthType Basic 10 AuthName "Inserisci i dati per l'accesso al repository" 11 AuthUserFile /etc/svn-htpasswd 12 AuthzSVNAccessFile /etc/svn-access 13 </Location> 14 </VirtualHost>
Ora compiliamo questo file di controllo degli accessi. Tale file è diviso in sezioni, ciascuna delle quali usa questo formato:
[repository:path] username = rw
Nota: le parentesi quadre fanno parte del formato del file.
Quindi, se per il repository guidasvn voglio dare accesso in lettura/scrittura all'utente francesco
, il file conterrà:
[guidasvn:/] francesco = rw
Per specificare una autorizzazione diversa per un percorso specifico, ad esempio dare accesso all'utente sergio per la specifica cartella immagini del repository guidasvn
, la direttiva diventa:
[guidasvn:/immagini] sergio = rw
È possibile specificare una regola generale per tutti i repository – ad esempio per dare accesso a chiunque in sola lettura – usando queste direttive all'inizio del file:
[/] * = r
E così via.
Dopo aver compilato il file, possiamo riavviare Apache e provare che tutto funzioni a dovere (sempre navigando il repository via browser). In caso contrario, verifichiamo di avere scritto tutto giusto, consultiamo il log di Apache, fino a risolvere l'inghippo. Possiamo fare con calma: la configurazione del server è completa.