我刚刚在运行 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
)。 如果需要,您还可以将任何其他用户添加到该组(可能更有用的是您正在运行svnserve
svn 服务器,而不是通过 apache)。
我不确定为什么 apache 配置被设置为以 nobody 身份运行,它似乎是 GoDaddy 的 CentOS 服务器上的默认设置(我正在运行的服务器)