Bagaimana Saya Membatasi Akses Repositori melalui WebSVN?

8

Saya memiliki beberapa repositori subversi yang dilayani melalui Apache 2.2 dan WebDAV. Mereka semua terletak di tempat sentral, dan saya menggunakan artikel debian-administration.org ini sebagai dasar (saya menjatuhkan penggunaan otentikasi database untuk file htpasswd sederhana sekalipun).

Sejak itu, saya juga mulai menggunakan WebSVN . Masalah saya adalah bahwa tidak semua pengguna pada sistem harus dapat mengakses repositori yang berbeda, dan pengaturan default WebSVN adalah untuk mengizinkan siapa saja yang dapat mengotentikasi.

Menurut dokumentasi WebSVN, cara terbaik untuk melakukannya adalah dengan menggunakan sistem akses jalur subversion, jadi saya mencari untuk membuatnya, menggunakan direktif AuthzSVNAccessFile.

Ketika saya melakukan ini, saya terus mendapatkan pesan "403 Terlarang".

File saya terlihat seperti berikut:

Saya memiliki pengaturan kebijakan default dalam file:

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

  Order deny,allow
  Deny from all
</Location>

Setiap repositori mendapatkan file kebijakan seperti di bawah ini:

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

File default_auth.conf berisi ini:

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

Saya tidak sepenuhnya yakin mengapa saya memerlukan SVNParentPath kedua di default_auth.conf, tapi saya baru saja menambahkannya hari ini karena saya mendapatkan pesan kesalahan sebagai akibat dari menambahkan direktif AuthzSVNAccessFile.

Dengan file akses yang benar-benar permisif

[/]
joebloggs = rw

sistem bekerja dengan baik (dan pada dasarnya tidak berubah), tetapi segera setelah saya mulai mencoba menambahkan segala jenis pembatasan seperti

[sysadmin:/]
joebloggs = rw

alih-alih, saya mendapatkan kembali kesalahan 'Izin ditolak'. Entri file log adalah:

[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

Apa yang harus saya lakukan agar ini berfungsi? Apakah konfigurasi apache salah, atau apakah pemahaman saya tentang file svnaccess.conf salah?

Jika saya melakukan hal ini dengan cara yang salah, saya tidak memiliki keterikatan khusus pada pendekatan keseluruhan saya, jadi jangan ragu untuk menawarkan alternatif juga.

UPDATE (20090528-1600):

Saya mencoba menerapkan jawaban ini , tetapi saya masih tidak bisa membuatnya berfungsi dengan baik.

Saya tahu sebagian besar konfigurasi sudah benar, seperti yang saya tambahkan

[/]
joebloggs = rw

di awal dan 'joebloggs' kemudian memiliki semua akses yang benar.

Ketika saya mencoba untuk pergi ke repositori-spesifik, melakukan sesuatu seperti

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

kemudian saya mendapat izin ditolak kesalahan untuk mickmurphy (joebloggs masih berfungsi), dengan kesalahan yang mirip dengan apa yang sudah saya miliki sebelumnya

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

Juga, saya lupa menjelaskan sebelumnya bahwa semua repositori saya ada di bawahnya

/var/lib/svn/repository

UPDATE (20090529-1245):

Masih tidak beruntung mendapatkan ini untuk bekerja, tetapi semua tanda-tanda tampaknya menunjuk ke masalah menjadi dengan kontrol jalur akses di subversi tidak berfungsi dengan baik. Asumsi saya adalah bahwa saya belum mengkonfigurasi apache atau svn untuk mengenali struktur repositori saya dengan benar.

Ini karena entri '[/]' tampaknya berfungsi dengan baik.

Itu juga terjadi pada saya bahwa ini adalah pertanyaan yang mungkin lebih baik di StackOverflow?

UPDATE (20090603-1740):

Menanggapi salah satu komentar untuk pertanyaan ini, pengaturan WebDAV saya untuk subversi itu sendiri diberikan lokasi / svn / repos tetapi websvn diatur ke / websvn.

kaybenleroll
sumber
Di mana URL server relatif yang dijalankan websvn Anda? Dalam websvn setup saya saat ini adalah di / websvn, sedangkan repositori itu sendiri di / svn
Sander Rijken
hai kaybenleroll, bisakah Anda membantu saya dalam hal ini? stackoverflow.com/questions/13541629/...
Juned

Jawaban:

5

Masalahnya mungkin berkaitan dengan pemisahan konfigurasi antara dua arahan lokasi, tapi saya tidak yakin.

Daripada mendefinisikan izin di dua tempat (konfigurasi apache dan file authz), cukup tentukan dalam file authz. Seperti itu:

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

Anda tentu membutuhkan pengguna yang sesuai dalam file htpasswd juga.

Alex J
sumber
dapatkah Anda membantu saya dalam hal ini? stackoverflow.com/questions/13541629/...
Juned
4

Tidak tahu apakah Anda telah menyelesaikan masalah ini, tetapi ini adalah prosedur yang cocok untuk saya.

Lupakan mengutak-atik arahan apache, alih-alih edit file config.php WebSVN dan sertakan / batalkan komentar pada arahan berikut:

$ config-> useAuthenticationFile ('/ path / ke / your / authz / file');


sumber
Tidak, tidak pernah sepenuhnya menyelesaikannya. Saya akan mencoba ide Anda. :)
kaybenleroll
+1 Saya punya masalah yang sama dan ini benar-benar memperbaikinya! Terima kasih!
John Virgolino
2

ini bekerja untuk saya.

user1 dapat melihat "/" dan "/ project1" user3 hanya dapat melihat "/ project1"

[grup]

groupa = user1, user2

groupb = user3, user4

[/]

@groupa = rw

[/ project1]

@groupb = rw


sumber
1

Saya telah berjuang dengan ini cukup banyak, dan satu-satunya konfigurasi yang berfungsi untuk saya adalah sebagai berikut:

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

Akibatnya, group1 memiliki akses baca dan tulis ke project1, dan group2 memiliki akses baca ke project2. Semua orang tidak memiliki akses ke proyek apa pun.

Saya harus menekankan, bahwa "project1" dan "project2" adalah proyek di dalam repositori yang didefinisikan dalam file konfigurasi Apache subversion.confsebagai.

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

Masalah saya saat ini adalah, bahwa tidak mungkin untuk membuat daftar proyek di repositori /svn/repossama sekali (walaupun mereka dapat diakses dengan benar). SVNListParentPathpada arahan, di mana pun Anda meletakkannya, itu tidak membantu.

Saat ini saya /var/www/svnbukan repositori, tetapi hanya sebuah direktori di sistem file server. /var/www/svn/reposadalah repositori yang dibuat dengansvnadmin create

Marko Kosunen
sumber
0

Anda harus membaca doc websvn dan semuanya akan menjadi jelas :)

Perhatikan juga bahwa Anda tidak boleh menggunakan perintah AuthzSVNAccessFile untuk mendefinisikan file akses.

Sekarang setelah Anda menentukan otentikasi Anda, Anda akan diminta untuk nama pengguna dan kata sandi untuk mengakses direktori WebSVN. Yang tersisa adalah mengonfigurasi WebSVN untuk menggunakan file akses Subversion Anda untuk mengontrol akses. Tambahkan baris ini ke file config.php Anda:

$ config-> useAuthenticationFile ('/ path / to / accessfile');

Bartek
sumber