我已经搭建了一个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
用户对整个存储库具有读/写访问权限。为此,chown -R apache:apache *
,chmod -R 664 *
为您的 svn 存储库下的所有内容。
“664”字符串是权限的八进制(基数为 8)表示形式。这里有三位数字,分别代表该文件或目录的 owner、group 和 everyone else(有时称为“world”)的权限。
请注意,每个 8 基数字可以用 3 位表示(000 表示“0”,111 表示“7”)。每一位都有意义:
例如,文件上的 764 意味着:
希望事情能够解决!
这是权限问题。它不是 apache 用户的“经典”读/写权限,而是 selinux 的权限。
Apache 无法写入标记为
httpd_sys_content_t
的文件,它们只能由 apache 读取。
你有两种可能性:
将 svn 存储库文件标记为
httpd_sys_content_rw_t
:
chcon -R -t httpd_sys_content_rw_t /path/to/your/svn/repo
设置 selinux 布尔值
httpd_unified --> on
setsebool -P httpd_unified=1
我更喜欢第二种可能性。您还可以使用与
httpd
连接的其他 selinux 布尔值:
getsebool -a | grep httpd
我最近也遇到了这个问题,是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
现在应该可以再次工作了。
例如在 debian 上
sudo gpasswd -a svn-admin www-data
sudo chgrp -R www-data svn/
sudo chmod -R g=rwsx svn/
我刚刚遇到这个问题
希望这有帮助
除了存储库权限之外,
/tmp
目录还必须可供所有用户写入。
您可以遵循的 3 个步骤
chmod -R 775 <repo path>
---> change permissions of repository
chown -R apache:apache <repo path>
---> change owner of svn repository
chcon -R -t httpd_sys_content_t <repo path>
----> change SELinux security context of the svn repository
我通过删除 txn-current-lock 解决了这个问题。
尝试通过此命令禁用 SELinux
/usr/sbin/setenforce 0
。就我而言,它解决了问题。