AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 13853
Accepted
kaybenleroll
kaybenleroll
Asked: 2009-05-29 06:59:48 +0800 CST2009-05-29 06:59:48 +0800 CST 2009-05-29 06:59:48 +0800 CST

如何通过 WebSVN 限制存储库访问?

  • 772

我有多个通过 Apache 2.2 和 WebDAV 提供的颠覆存储库。它们都位于一个中心位置,我以这篇debian-administration.org文章为基础(不过,我放弃了对简单 htpasswd 文件使用数据库身份验证)。

从那时起,我也开始使用WebSVN。我的问题是,并非系统上的所有用户都应该能够访问不同的存储库,并且 WebSVN 的默认设置是允许任何可以进行身份​​验证的人。

根据 WebSVN 文档,最好的解决方法是使用 subversion 的路径访问系统,所以我希望使用 AuthzSVNAccessFile 指令来创建它。

但是,当我这样做时,我不断收到“403 Forbidden”消息。

我的文件如下所示:

我在文件中有默认策略设置:

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

  Order deny,allow
  Deny from all
</Location>

每个存储库都会获得一个策略文件,如下所示:

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

default_auth.conf 文件包含以下内容:

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

我不完全确定为什么我需要 default_auth.conf 中的第二个 SVNParentPath,但我今天刚刚添加了这一点,因为添加 AuthzSVNAccessFile 指令导致我收到错误消息。

具有完全许可的访问文件

[/]
joebloggs = rw

系统运行良好(并且基本上没有改变),但是当我开始尝试添加任何类型的限制时,例如

[sysadmin:/]
joebloggs = rw

相反,我再次收到“权限被拒绝”错误。日志文件条目是:

[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

我需要做什么才能使其正常工作?apache配置错了,还是我对svnaccess.conf文件的理解不对?

如果我以错误的方式解决这个问题,我对我的整体方法没有特别的依恋,所以也可以随意提供替代方案。

更新(20090528-1600):

我试图实现这个答案,但我仍然无法让它正常工作。

我知道大部分配置都是正确的,因为我已经添加了

[/]
joebloggs = rw

一开始,“joebloggs”就拥有所有正确的访问权限。

当我尝试去特定于存储库时,做类似的事情

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

然后我得到了 mickmurphy 的权限被拒绝错误(joebloggs 仍然有效),错误类似于我之前已经遇到的错误

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

另外,我之前忘了解释我所有的存储库都在下面

/var/lib/svn/repository

更新(20090529-1245):

让它工作仍然没有运气,但所有迹象似乎都指向问题在于颠覆中的路径访问控制无法正常工作。我的假设是我没有配置 apache 或 svn 来正确识别我的存储库结构。

这是因为“[/]”条目似乎运行良好。

我还想到这个问题可能更适合 StackOverflow?

更新(20090603-1740):

作为对这个问题的评论之一的回应,我的颠覆本身的 WebDAV 设置被赋予位置 /svn/ repos,但 websvn 设置为 /websvn。

apache-2.2 svn permissions
  • 5 5 个回答
  • 22408 Views

5 个回答

  • Voted
  1. Best Answer
    Alex J
    2009-05-29T07:59:05+08:002009-05-29T07:59:05+08:00

    该问题可能与两个位置指令之间的配置拆分有关,但我不确定。

    与其在两个地方(apache config 和 authz 文件)定义权限,不如在 authz 文件中定义它们。像这样:

    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
    

    显然,您还需要 htpasswd 文件中的相应用户。

    • 5
  2. Daniel
    2010-03-24T04:07:43+08:002010-03-24T04:07:43+08:00

    不知道你是否解决了这个问题,但这是适合我的程序。

    忘记摆弄 apache 指令,而是编辑 WebSVN 的 config.php 文件并包含/取消注释以下指令:

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

    • 4
  3. user11196
    2009-07-01T06:44:20+08:002009-07-01T06:44:20+08:00

    这对我有用。

    user1 可以看到“/”和“/project1” user3 只能看到“/project1”

    [团体]

    组 = 用户 1,用户 2

    groupb = 用户 3,用户 4

    [/]

    @groupa = rw

    [/项目1]

    @groupb = rw

    • 2
  4. Marko Kosunen
    2011-11-21T21:54:44+08:002011-11-21T21:54:44+08:00

    我为此苦苦挣扎,唯一适合我的配置如下:

    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
    

    因此,group1 对 project1 具有读写权限,而 group2 对 project2 具有读取权限。其他人无权访问任何项目。

    我要强调的是,“project1”和“project2”是在 Apache 配置文件subversion.conf中定义的存储库中的项目。

    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
    

    我目前的问题是,根本不可能在存储库/svn/repos中列出项目(尽管可以正确访问它们)。SVNListParentPathon 指令,无论你把它放在哪里,它都无济于事。

    目前 my/var/www/svn不是存储库,而只是服务器文件系统中的目录。/var/www/svn/repos是使用创建的存储库svnadmin create

    • 1
  5. Bartek
    2014-08-23T03:53:30+08:002014-08-23T03:53:30+08:00

    您应该阅读过 websvn 文档,一切都会很明显 :)

    另请注意,您不应使用 AuthzSVNAccessFile 命令来定义访问文件。

    现在您已经定义了身份验证,系统将要求您输入用户名和密码以访问 WebSVN 目录。剩下的就是配置 WebSVN 以使用您的 Subversion 访问文件来控制访问。将此行添加到您的 config.php 文件中:

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

    • 0

相关问题

  • 阿帕奇的替代品

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 如何授予对 Exchange 2007 中每个人的日历的访问权限?

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve