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

wsd*_*wsd 50 svn apache

我已经设置了一个Linux服务器,并在其上安装了Apache,SVN和dav_svn.现在,当我尝试https://x.x.x.x:x/svn/repo使用Tortoise SVN 上传时,我得到了

Can't open file '/server/svn/repo/db/txn-current-lock': Permission denied
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*lla 67

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

此外,如果你仍然卡住,请看这里这里.


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

"664"字符串是权限的八进制(基数8)表示.此处有三个数字,分别表示该文件或目录的所有者,其他所有人(有时称为"世界")的权限.

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

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

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

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

希望这能说明问题!

  • 你的答案的最重要部分 - 灰色突出显示 - 说chmod 664,但我认为你的意思是764? (4认同)
  • 要防止目录出现问题,请尝试:`find.-type d -exec chmod 755 {} \;``find.-type f -exec chmod 644 {} \;` (3认同)

小智 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置selinux布尔值 httpd_unified --> on

    setsebool -P httpd_unified=1
    
    Run Code Online (Sandbox Code Playgroud)

我更喜欢第二种可能性 你也可以和其他连接的selinux布尔玩家一起玩httpd:

getsebool -a | grep httpd
Run Code Online (Sandbox Code Playgroud)

  • 选项1的问题在于,如果文件系统再次被重新标记(有时在重新启动时发生),那么您的更改就会消失.一个更好的选择(我更喜欢你的选项2)是"教"SELinux的策略,它可以让apache写入某些目录:`semanage fcontext -a -t httpd_sys_content_rw_t"/ path/to/your/svn/repo( /.*)?"然后使用`restorecon -R/path/to/your/svn/repo`重新标记此路径.这样更安全,因为您使用SELinux进行设计:准确指定允许的内容和不允许的内容. (3认同)