无法打开文件“svn/repo/db/txn-current-lock”:权限被拒绝

问题描述 投票:0回答:9

我已经搭建了一个Linux服务器并在其上安装了Apache和SVN以及dav_svn。现在,当我尝试使用 Tortoise SVN 上传到

https://x.x.x.x:x/svn/repo
时,我得到

Can't open file '/server/svn/repo/db/txn-current-lock': Permission denied

我已经正确设置了我的 SSL(我可以结帐,没有问题,甚至由于端口转发而远程)。

我猜这与存储库文件夹的 Linux 所有权有关,我必须如何设置/命令是什么?

apache svn
9个回答
69
投票

这是一个常见问题。您几乎肯定会遇到权限问题。要解决此问题,请确保

apache
用户对整个存储库具有读/写访问权限。为此,
chown -R apache:apache *
chmod -R 664 *
为您的 svn 存储库下的所有内容。

此外,如果您仍然遇到困难,请参阅此处此处


更新以回答OP在评论中提出的附加问题:

“664”字符串是权限的八进制(基数为 8)表示形式。这里有三位数字,分别代表该文件或目录的 ownergroupeveryone else(有时称为“world”)的权限。

请注意,每个 8 基数字可以用 3 位表示(000 表示“0”,111 表示“7”)。每一位都有意义:

  • 第一位:读取权限
  • 第二位:写权限
  • 第三位:执行权限

例如,文件上的 764 意味着:

  • 所有者(第一位数字)具有读/写/执行(7)权限
  • 组(第二位数字)具有读/写(6)权限
  • 其他人(第三位)已阅读(4)许可

希望事情能够解决!


13
投票

这是权限问题。它不是 apache 用户的“经典”读/写权限,而是 selinux 的权限。

Apache 无法写入标记为

httpd_sys_content_t
的文件,它们只能由 apache 读取。

你有两种可能性:

  1. 将 svn 存储库文件标记为

    httpd_sys_content_rw_t
    :

    chcon -R -t httpd_sys_content_rw_t /path/to/your/svn/repo
    
  2. 设置 selinux 布尔值

    httpd_unified --> on

    setsebool -P httpd_unified=1
    

我更喜欢第二种可能性。您还可以使用与

httpd
连接的其他 selinux 布尔值:

getsebool -a | grep httpd

3
投票

我最近也遇到了这个问题,是SELinux导致的。 我试图让 subversion 后提交来通知 Jenkins 代码已更改,以便 Jenkins 进行构建并部署到 Nexus。

我必须执行以下操作才能使其正常工作。

1)首先我检查 SELinux 是否已启用:

    less /selinux/enforce

这将输出 1(打开)或 0(关闭)

2)暂时禁用SELinux:

    echo 0 > /selinux/enforce

现在测试看看现在是否有效。

3) 启用 SELinux:

    echo 1 > /selinux/enforce

更改 SELinux 的策略。

4)首先查看当前配置:

    /usr/sbin/getsebool -a | grep httpd

这将为您提供:httpd_can_network_connect --> off

5) 将其设置为打开,您的提交后将与 SELinux 一起使用:

    /usr/sbin/setsebool -P httpd_can_network_connect on

现在应该可以再次工作了。


2
投票

例如在 debian 上

sudo gpasswd -a svn-admin www-data
sudo chgrp -R www-data svn/
sudo chmod -R g=rwsx svn/

0
投票

我刚刚遇到这个问题

  1. 多个用户使用同一个存储库导致了问题
  2. 注销使用该存储库的所有其他用户

希望这有帮助


0
投票

除了存储库权限之外,

/tmp
目录还必须可供所有用户写入。


0
投票

您可以遵循的 3 个步骤

  1. chmod -R 775 <repo path>  
    ---> change permissions of repository
    
  2. chown -R apache:apache <repo path>  
    ---> change owner of svn repository
    
  3. chcon -R -t httpd_sys_content_t <repo path>  
    ----> change SELinux security context of the svn repository
    

0
投票

我通过删除 txn-current-lock 解决了这个问题。


-1
投票

尝试通过此命令禁用 SELinux

/usr/sbin/setenforce 0
。就我而言,它解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.