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

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

我刚刚在运行 CentOS 6 的服务器上设置了一个 SVN 存储库。我按照说明这里一切进展得相当顺利。

直到我尝试导入我的初始文件结构

svn import /path/to/wc http://svn.host.com/svn/repos -m "Init repo"

给了我以下内容
svn: Can't open file '/home/podsvn/svn/repos/db/txn-current-lock': Permission denied

但是,svn import /path/to/wc file:///path/to/repository -m "Init Repo"效果非常好。对于远程使用 repo 工作来说并不有用。

经过一番搜索,我发现这是一个权限问题,但是任何针对 repo 的权限配置都失败了:

这是按照上述教程设置的默认 repo 权限,但失败了:

-rw-rw-r-- 1 apache apache  229 Jul 24 08:58 README.txt  
drwxrwxr-x 2 apache apache 4096 Jul 24 09:17 conf/  
drwxrwsr-x 6 apache apache 4096 Jul 24 08:58 db/  
-r--r--r-- 1 apache apache    2 Jul 24 08:58 format  
drwxrwxr-x 2 apache apache 4096 Jul 24 08:58 hooks/  
drwxrwxr-x 2 apache apache 4096 Jul 24 08:58 locks/  

然后我将 root、apache 和我的主用户(称为 poduser,通过 创建了 repo svnadmin create repos)添加到一个名为 svn 的新组,仍然失败(即使在从 ssh 登录和退出之后):

-rw-rw-r-- 1 apache svn 229 Jul 24 08:58 README.txt  
drwxrwxr-x 2 apache svn 4096 Jul 24 09:17 conf/  
drwxrwsr-x 6 apache svn 4096 Jul 24 08:58 db/  
-r--r--r-- 1 apache svn 2 Jul 24 08:58 format  
drwxrwxr-x 2 apache svn 4096 Jul 24 08:58 hooks/  
drwxrwxr-x 2 apache svn 4096 Jul 24 08:58 locks/  

我运行了chmod -R g+w ./。(得到了ls -la您期望的结果)但仍然收到权限被拒绝错误。

似乎当我运行import或时checkout,它正尝试以 root、apache 或 poduser 以外的用户身份访问存储库。

它可能试图以登录到 repo 的用户身份工作(通过教程在 /etc/svn-auth-conf 中设置)。但是,我在那里设置的 SVN 用户与实际服务器上的任何帐户都是分开的,对吗?我不应该担心匹配 SVN 用户和服务器用户?

谢谢,
-Esa

答案1

找到了自己的答案。真糟糕。

所以我发现,由于我正在运行 apache svn 服务器,所以 svn 命令是以 httpd 进程所运行的用户身份运行的。

所以我首先运行ps aux | egrep '(apache|httpd)'并想到了这个:

nobody    1488  0.0  0.2  99604  4960 ?        S    06:02   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
root      1962  0.0  0.0   4140   668 pts/0    S+   06:28   0:00 egrep (apache|httpd)  
root     11404  0.0  0.2  99208  5188 ?        Ss   Jul24   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
root     27766  0.0  0.1  99208  2340 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27767  0.0  0.2  99604  5184 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27768  0.0  0.2  99568  5188 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27769  0.0  0.2  99604  5196 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27770  0.0  0.2  99568  5168 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27771  0.0  0.2  99568  5184 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  

嗯,问题就在这里。apache 进程以“nobody”的身份运行,而不是“apache”或“svn”或其他任何身份。

对此有两种可能的解决方案(我只尝试了一种)。

我所做的(并且有效的)是进入 httpd.conf,然后更改以下行:

User nobody
Group nobody

到:

User apache
Group apache

现在service httpd restart,所有这些“无人”进程都由 apache 运行,并且svn import正常工作!

另一个可能可行的解决方案(但我没有测试过)是转到您的 repo 并运行,chgrp -R svn ./*以便 repo 中的所有文件都有 svn 组,然后将用户 nobody 添加到 svn 组(usermod -g svn nobody)。 如果需要,您还可以将任何其他用户添加到该组(可能更有用的是您正在运行svnservesvn 服务器,而不是通过 apache)。

我不确定为什么 apache 配置被设置为以 nobody 身份运行,它似乎是 GoDaddy 的 CentOS 服务器上的默认设置(我正在运行的服务器)

相关内容