SVN ed il controllo degli accessi 2: la vendetta

E’ possibile rendere più fine il controllo degli accessi sui repository di SVN che utilizzano Apache 2 rispetto alle impostazioni standard che prevedono che un utente possa semplicemente accedere in lettura e scrittura ad uno specifico repository nella sua globalità.

Ad esempio, potrebbe essere possibile, in caso di necessità, voler consentire ad un dato utente l’accesso in lettura ad un repository e l’accesso in lettura e scrittura su di un altro repository. Ancora, potrebbe essere richiesto, relativamente ad uno stesso repository di abilitare la lettura o la scrittura su specifiche sottodirectory.

Per ottenere questa maggiore granularità di controllo con SVN è possibile modificare la configurazione del file di Apache rimuovendo, se presente, la riga: 

AuthGroupFile /etc/apache2/groups

che gestisce i gruppi “classici” ed aggiungere la direttiva:          

Require valid-user

che richiederà la validazione per tutti gli utenti che tenteranno di accedere al repository. Ovviamente /etc/apache2/groups è un file  specifico di un esempio specifico e potrebbe avere un nome differente in base a scelte personali.    

A questo punto è possibile aggiungere una riga come la seguente:

AuthzSVNAccessFile /etc/apache2/svnaccessfile

che indica il file sul quale verranno impostati i permessi di accesso.

In definitiva avremo qualcosa del tipo:

<Location /miorepo>
DAV svn
SVNListParentPath on
SVNPath /percorso/miorepo
AuthType Basic
AuthName “SVN repository”
AuthUserFile /etc/apache2/users
Require valid-user
AuthzSVNAccessFile /etc/apache2/svnaccessfile
</Location>


Il file in questione, /etc/apache2/svnaccessfile,  è un file di testo come il seguente:

[groups]
readers = michele
devs = carlo, marco, luigi, simone, daniele

[miorepo:/]
@readers = r
@devs = rw

#abilitazione-disabilitazione selettiva sottodirectory
[miorepo:/trunk/ProgettoX/cartellaY/cartellaZ]
carlo = rw

La direttiva [groups]  indica, così come ci aspetteremmo, i gruppi di utenti. Tali utenti sono ovviamente quelli inseriti con la normale procedura nel file  /etc/apache2/users

Le successive direttive, banalmente individuabili grazie al fatto di essere identificate da parentesi quadre specificano qualcosa del tipo:

[repository:percorso]

dove “repository” è ovviamente il nome del repository che si intende gestire e percorso è la cartella del repository stesso. Ad esempio:

[miorepo:/]

indica nella sua totalità il repository  “miorepo”.
I permessi specifici andranno inseriti nelle righe di seguito come ad esempio:

[miorepo:/]
@readers = r
@devs = rw

Si intuisce che ogni riga di abilitazione è formata da due sezioni separate dal simbolo “=”. Nel caso specifico ho inserito i nomi dei gruppi definiti nella sezione apposita. Si intuisce anche che per indicare i gruppi si antepone al nome del gruppo il simbolo della chiocciolina.
I simboli “r” e “rw” stanno ovviamente, rispettivamente, per sola lettura e lettura scrittura. Oltre ai nomi dei gruppi è possibile indicare i nomi dei singoli utenti, così come il carattere jolly * ad indicare tutti gli utenti.

Come detto è possibile settare i permessi di lettura/scrittura anche su di una specifica sottodirectory come segue:

[miorepo:/trunk/ProgettoX/cartellaY/cartellaZ]
carlo = rw

dove /trunk/ProgettoX/cartellaY/cartellaZ è il percorso nel repository che si vuole gestire in maniera differente rispetto alle restanti sezioni.

Per chiudere segnalo il seguente link di sicuro interesse:
http://svnbook.red-bean.com/en/1.1/ch06s04.html

Carlo A. Mazzone

Supportaci condividendo sui social il nostro articolo!

Lascia un commento