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.
sumber
Jawaban:
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
svn.authz
Anda tentu membutuhkan pengguna yang sesuai dalam file htpasswd juga.
sumber
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
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
Saya telah berjuang dengan ini cukup banyak, dan satu-satunya konfigurasi yang berfungsi untuk saya adalah sebagai berikut:
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.conf
sebagai.Masalah saya saat ini adalah, bahwa tidak mungkin untuk membuat daftar proyek di repositori
/svn/repos
sama sekali (walaupun mereka dapat diakses dengan benar).SVNListParentPath
pada arahan, di mana pun Anda meletakkannya, itu tidak membantu.Saat ini saya
/var/www/svn
bukan repositori, tetapi hanya sebuah direktori di sistem file server./var/www/svn/repos
adalah repositori yang dibuat dengansvnadmin create
sumber
Anda harus membaca doc websvn dan semuanya akan menjadi jelas :)
sumber