我已经设置了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所有权有关,我该如何设置这个/什么是命令?
答案 0 :(得分:66)
这是一个常见问题。您几乎肯定会遇到权限问题。要解决此问题,请确保apache
用户具有对整个存储库的读/写访问权限。要为您的svn存储库下的所有内容chown -R apache:apache *
,chmod -R 664 *
执行此操作。
“664”字符串是权限的八进制(基数8)表示。这里有三个数字,分别表示所有者,组和其他所有人(有时称为“世界”)的权限文件或目录。
请注意,每个基数为8位的数字可以用3位表示(000表示'0'到111表示'7')。每一位意味着什么:
例如,文件上的764意味着:
希望能够解决问题!
答案 1 :(得分:13)
这是许可问题。它不是apache用户的“经典”读/写权限,而是selinux one。
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
答案 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)
我刚遇到这个问题
希望这有帮助
答案 6 :(得分:0)
你可以休闲的3个步骤
chmod -R 775 <repopath>
--->permissions for repository
chown -R apache:apache <repo path>
---> change owner as like svn conf file
chcon -R -t httpd_sys_content_t /<repo path>
----> change security context for svn repositary
答案 7 :(得分:-1)
尝试通过此命令/usr/sbin/setenforce 0
禁用SELinux。在我的情况下,它解决了这个问题。