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

时间:2009-06-06 18:20:19

标签: apache svn

我已经设置了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所有权有关,我该如何设置这个/什么是命令?

8 个答案:

答案 0 :(得分:66)

这是一个常见问题。您几乎肯定会遇到权限问题。要解决此问题,请确保apache用户具有对整个存储库的读/写访问权限。要为您的svn存储库下的所有内容chown -R apache:apache *chmod -R 664 *执行此操作。

另外,如果您仍然卡住,请参阅herehere


更新以在评论中回答OP的其他问题:

“664”字符串是权限的八进制(基数8)表示。这里有三个数字,分别表示所有者其他所有人(有时称为“世界”)的权限文件或目录。

请注意,每个基数为8位的数字可以用3位表示(000表示'0'到111表示'7')。每一位意味着什么:

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

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

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

希望能够解决问题!

答案 1 :(得分:13)

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

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
    
  3. 我更喜欢第二种可能性。您也可以使用与httpd相关联的其他selinux布尔值:

    getsebool -a | grep httpd
    

答案 2 :(得分:3)

我最近也遇到过这个问题,而SELinux引起了这个问题。 我试图让subversion的post-commit通知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 - >关

5)将此设置为on,您的post-commit将与SELinux一起使用:

    /usr/sbin/setsebool -P httpd_can_network_connect on

现在它应该再次运作。

答案 3 :(得分:1)

例如关于debian

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

答案 4 :(得分:0)

除了存储库权限之外,/tmp目录还必须是所有用户都可写的。

答案 5 :(得分:0)

我刚遇到这个问题

  1. 让多个用户使用相同的回购导致问题
  2. 使用回购
  3. 注销其他用户

    希望这有帮助

答案 6 :(得分:0)

你可以休闲的3个步骤

  1. chmod -R 775 <repopath>  
    --->permissions for repository
    
  2. chown -R apache:apache  <repo path>  
    ---> change owner as like svn conf file
    
  3. chcon -R -t httpd_sys_content_t /<repo path>  
    ----> change security context for svn repositary
    

答案 7 :(得分:-1)

尝试通过此命令/usr/sbin/setenforce 0禁用SELinux。在我的情况下,它解决了这个问题。