SVN权限被拒绝 - txn-current-lock

42
我刚在我的Ubuntu服务器上设置了svn。我有一个可以登录的用户。问题是,每当我试图对文件结构进行更改时,就会出现权限被拒绝的错误。
Can't open file '/var/www-svn/db/txn-current-lock':
Permission denied
我的repo在 /var/www-svn 中,该文件夹的权限为drwxr-xr-x,用户和组名为svn(我不擅长权限,所以不知道是否正确)。我登录到svn的用户属于svn组,但我无法更改文件结构。我做错了什么?如果我将文件夹的用户和组更改为我登录的用户,它就能正常工作。
在svnserve.conf中,anon-access设置为noneauth-access设置为write
(我通过在/var目录中键入sudo chown -R svn:svn www-svn来更改 /var/www-svn 的所有者。)

你的访问/认证配置(svnserve.conf)是什么样子的? - prodigitalson
是的,我已经在 passwd 文件中添加了我的用户名和密码。 - Marwelln
当我尝试通过svn+ssh提交时,出现了这种情况,而SVN设置为使用https。 - 329933
为什么不在 svn 命令前使用简单的 sudo 命令? - Nanhe Kumar
检查一下我复制文件时使用的用户和组。因为我是以root身份操作的,所以所有权都是root/root,而不是分配给SVN用户的用户组。 - Jeff Beougher
显示剩余4条评论
10个回答

32

文件系统上的存储库文件夹必须由与您的svn或通过web-dav访问的Apache相同的Linux用户拥有或至少具有读/写权限...

在我的情况下是:

$ chown -R www-data:www-data /svn/reponame

但在其他情况下,情况可能会有所不同,例如:

$ chown -R someuser:somegroup /svn/reponame

所以,请使用正确的值替换someuser:somegroup。


11

你需要为 /var/www-svn/ 文件夹添加 SETUID 位,因为在 SVN 运行期间会生成用于保留事务的文件夹(由文件夹表示)。

简单来说,这意味着只需执行

chmod +s -R /var/www-svn/

应该解决这个问题。


7

svnserve守护程序以我的用户身份运行,而非root。我杀掉了运行在我的用户下的svnserve进程,并以root身份重新启动它。现在它可以正常工作。


6
我的问题最终是我先设置了权限,然后执行了svnadmin create,所以需要再次设置权限。
 $ sudo chown -R www-data:subversion myproject
 $ sudo chmod -R g+rws myproject

3

在创建的仓库中缺少读写权限。

使用以下命令添加 httpd_sys_rw_content_t 权限到路径 /path_to_svn: 例如:chcon -R -t httpd_sys_rw_content_t /opt/svn/trunk


在CentOS 8上,我遇到了通过apache httpd设置svn的问题(使用了这个指南:https://computingforgeeks.com/install-apache-subversion-svn-on-centos-rhel-8)。这解决了我的问题。谢谢 :) - Ali

3

3
请执行以下命令:chmod -R 770 /var/www-svn/。该命令会给/var/www-svn/目录及其子目录和文件赋予读写执行权限。 - Simone-Cu
您提供的链接未找到。 - Zeeshan
1
@Zeeshan 谢谢,我已经在这个答案的第一条评论中添加了一个快速解决方案,希望没问题。我将编辑并删除链接。 - Simone-Cu

2

如果您没有sudo权限:

在我的情况下,我正在从一个共享的Webfaction服务器迁移到另一个。复制文件时,整个仓库的所有权可能已被分配给我的用户名,而所有者应该是apache,以便可以访问仓库。我无法应用任何chown apache:mygroup repo,因为我无法访问用户apache。如果没有root访问权限,唯一的方法是在我的仓库根目录中运行chmod -R 777 .,最终删除一个我没有权限更改所有权的锁定文件。这最终解决了问题,我可以再次提交。


0
虽然这个问题很老,但在谷歌上的排名很高,但对于在Linux上使用Apache / httpd的子版本的人来说,找不到有用的解决方案。
我在CentOS Linux上运行子版本,并且我的问题是由于SELinux引起的。禁用它对我有所帮助。
在执行此操作之前,需要谨慎,因为在生产服务器上禁用SELinux可能不被推荐。在尝试这样做之前,请仔细阅读文档。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Enabling_and_Disabling_SELinux-Disabling_SELinux.html

正如Stewart在评论中建议的那样,另一种解决方案是通过更新文件权限来实现,尽管缺少更多细节,但对文件权限进行一些调整应该会有所帮助。

发布的链接已经失效了。为什么你不能直接在这里发布答案呢?这就是为什么“仅链接回答”备受反感的原因。现在我们永远不会知道了.... - Stewart
1
@Stewart 很抱歉链接失效了。似乎无法通过搜索引擎缓存或archive.org恢复。据我最好的记忆,SELinux的问题已经通过禁用它来解决。尝试做同样的事情并告诉我们结果。在PROD服务器上执行此操作之前,请小心阅读并仔细考虑。 - Pavan Kumar
最终我通过更改文件所有权来解决了这个问题。 - Stewart
在CentOS上,不建议禁用SeLinux。可以尝试使用@Sadashiv提供的解决方法。这对我很有效。 - Ali

0

重新启动Eclipse IDE。

我遇到了完全相同的情况,并在尝试使用EclipseIDE提交更改时失败。

当Eclipse正在运行时,我更改了想要提交到存储库的用户的组。

令人惊讶的是,我注意到只要我重新启动Eclipse,修改后的存储库组/权限就被授予了。我认为Eclipse保持了一个ssh通道,在ssh通道会话期间忽略了修改的组权限。

在Eclipse重新启动期间,ssh会话被重新创建,并将修改的组权限粘贴到新的ssh会话中,从而授予提交权限。


0
最后但并非最不重要的,如果您的代码库归用户和组svn所有
sudo chown -R svn:svn /var/svn/repos
请确保将可以访问它的用户添加到svn组中。 vi /etc/group
svn:x:502:user1,user2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接