Come posso limitare l'accesso al repository tramite WebSVN?


8

Ho più repository di sovversione che vengono offerti tramite Apache 2.2 e WebDAV. Sono tutti situati in una posizione centrale e ho usato questo articolo di debian-administration.org come base (ho abbandonato l'uso dell'autenticazione del database per un semplice file htpasswd).

Da allora, ho anche iniziato a utilizzare WebSVN . Il mio problema è che non tutti gli utenti del sistema dovrebbero essere in grado di accedere ai diversi repository e la configurazione predefinita di WebSVN è consentire a chiunque sia in grado di autenticarsi.

Secondo la documentazione WebSVN, il modo migliore per aggirare questo è usare il sistema di accesso al percorso di Subversion, quindi ho cercato di crearlo, usando la direttiva AuthzSVNAccessFile.

Quando lo faccio, continuo a ricevere messaggi "403 Proibiti".

I miei file sono simili ai seguenti:

Ho le impostazioni dei criteri predefinite in un file:

<Location /svn/>
  DAV svn
  SVNParentPath  /var/lib/svn/repository

  Order deny,allow
  Deny from all
</Location>

Ogni repository ottiene un file delle politiche come di seguito:

<Location /svn/sysadmin/>
    Include  /var/lib/svn/conf/default_auth.conf
    AuthName "Repository for sysadmin"
    require user joebloggs jimsmith mickmurphy
</Location>

Il file default_auth.conf contiene questo:

SVNParentPath      /var/lib/svn/repository
AuthType           basic
AuthUserFile       /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf

Non sono del tutto sicuro del motivo per cui ho bisogno del secondo SVNParentPath in default_auth.conf, ma l'ho appena aggiunto oggi mentre stavo ricevendo messaggi di errore a seguito dell'aggiunta della direttiva AuthzSVNAccessFile.

Con un file di accesso totalmente permissivo

[/]
joebloggs = rw

il sistema ha funzionato bene (ed era sostanzialmente invariato), ma non appena ho iniziato a provare ad aggiungere qualsiasi tipo di restrizione come

[sysadmin:/]
joebloggs = rw

invece, visualizzo nuovamente gli errori "Autorizzazione negata". Le voci del file di registro sono:

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin

Cosa devo fare per farlo funzionare? Apache configurato è sbagliato o la mia comprensione del file svnaccess.conf non è corretta?

Se sto andando in questo modo nel modo sbagliato, non ho un particolare attaccamento al mio approccio generale, quindi sentiti libero di offrire anche delle alternative.

AGGIORNAMENTO (20090528-1600):

Ho tentato di implementare questa risposta , ma non riesco ancora a farlo funzionare correttamente.

So che la maggior parte della configurazione è corretta, come ho aggiunto

[/]
joebloggs = rw

all'inizio e "joebloggs" ha quindi tutto l'accesso corretto.

Quando provo ad andare al repository specifico però, facendo qualcosa del genere

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

poi ho ricevuto un errore di autorizzazione negato per mickmurphy (joebloggs funziona ancora), con un errore simile a quello che avevo già precedentemente

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin

Inoltre, ho dimenticato di spiegare in precedenza che tutti i miei repository sono sottostanti

/var/lib/svn/repository

AGGIORNAMENTO (20090529-1245):

Ancora nessuna fortuna per farlo funzionare, ma tutti i segnali sembrano indicare che il problema è che il controllo dell'accesso al percorso in sovversione non funziona correttamente. La mia ipotesi è che non ho configurato apache o svn per riconoscere correttamente la mia struttura di repository.

Questo perché la voce '[/]' sembra funzionare perfettamente.

Mi viene anche in mente che questa è una domanda che potrebbe appartenere meglio a StackOverflow?

AGGIORNAMENTO (20090603-1740):

In risposta a uno dei commenti a questa domanda, al mio setup WebDAV per la sovversione viene data la posizione / svn / repos ma websvn è impostato su / websvn.


A quale URL del server relativo viene eseguito il tuo websvn? Nella mia configurazione attuale websvn è su / websvn, mentre il repository stesso è su / svn
Sander Rijken,

ciao kaybenleroll mi potete aiutare in questo? stackoverflow.com/questions/13541629/...
Juned

Risposte:


5

Il problema è probabilmente legato alla suddivisione della configurazione tra due direttive di localizzazione, ma non sono sicuro.

Invece di definire le autorizzazioni in due punti (apache config e il file authz), definiscile nel file authz. Così:

httpd.conf

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn/repository

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

Ovviamente avresti bisogno anche degli utenti appropriati nel file htpasswd.



4

Non ho idea se hai risolto o meno questo problema, ma questa è la procedura che funziona per me.

Dimentica di giocherellare con le direttive di Apache, invece modifica il file config.php di WebSVN e includi / decommenta la seguente direttiva:

$ Config-> useAuthenticationFile ( '/ path / to / la vostra / AuthZ / file');


No, non l'ho mai risolto completamente. Proverò la tua idea. :)
kaybenleroll,

+1 Ho avuto lo stesso problema e questo è stato risolto completamente! Grazie!
John Virgolino,

2

questo funziona per me.

user1 può vedere "/" e "/ project1" user3 può vedere solo "/ project1"

[gruppi]

groupa = user1, user2

groupb = user3, user4

[/]

@groupa = rw

[/ Project1]

@groupb = rw


1

Ho lottato molto con questo, e l'unica configurazione che funziona per me è la seguente:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

Di conseguenza, group1 ha accesso in lettura e scrittura a project1 e group2 ha accesso in lettura a project2. Tutti gli altri non hanno accesso a nessun progetto.

Dovrei sottolineare che "project1" e "project2" sono progetti all'interno del repository definito nel file di configurazione di Apache subversion.confcome.

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

Il mio problema attuale è che non è possibile elencare affatto i progetti nel repository /svn/repos(anche se sono accessibili correttamente). SVNListParentPathsulla direttiva, indipendentemente da dove lo metti, non aiuta.

Attualmente my /var/www/svnnon è un repository, ma solo una directory in un filesystem di server. /var/www/svn/reposè un repository creato consvnadmin create


0

Avresti dovuto leggere il documento websvn e tutto sarebbe stato ovvio :)

Si noti inoltre che non è necessario utilizzare il comando AuthzSVNAccessFile per definire il file di accesso.

Ora che hai definito l'autenticazione, ti verrà chiesto il nome utente e la password per accedere alla directory WebSVN. Non resta che configurare WebSVN per utilizzare il file di accesso di Subversion per controllare l'accesso. Aggiungi questa riga al tuo file config.php:

$ Config-> useAuthenticationFile ( '/ path / to / AccessFile');

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.