我刚刚在运行CentOS 6的服务器上build立了一个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"非常有用。 对于使用回购进行远程处理没有用处。
有点search导致我看到这是一个权限问题,但任何回购权限configuration失败:
这是上述教程之后的默认回购权限,失败:
-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和我的主用户(称为通过svnadmin create repos仓库创build仓库的poduser)到一个名为svn的新组,仍然失败(甚至在login和退出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结果)我仍然得到Permission Denied错误。
这似乎是当我运行import或checkout ,它试图访问存储库作为除root,apache或poduser以外的用户。
可能它试图以login到repo的用户身份工作(通过教程在/ etc / svn-auth-conf中设置)。 然而,我在那里设置的SVN用户与实际服务器上的任何帐户是分开的,对吗? 我不必担心SVN用户和服务器用户的匹配吗?
谢谢,
-esa
想出了我自己的答案。 DERP。
所以我想通了,因为我正在运行一个Apache svn服务器,svn命令作为用户运行httpd进程运行。
所以首先我运行ps aux | egrep '(apache|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”或其他方式运行的。
有两种可能的解决scheme(我只试过一个)。
我所做的(那是工作)是进入httpd.conf,并更改行:
User nobody Group nobody
至:
User apache Group apache
然后service httpd restart ,现在所有这些'nobody'进程正在由Apache运行,并且svn import工作!
另一个解决scheme,可能会工作,但我没有testing它,是去你的回购和运行chgrp -R svn ./*所以回购中的所有文件都有svn组,然后添加用户nobody svn组( usermod -g svn nobody )。 你也可以添加任何其他用户到组中,如果你想要的话(可能更有用的是你正在运行一个svnserve svn服务器,而不是通过Apache)。
我不知道为什么Apacheconfiguration设置为无人运行,它似乎是来自GoDaddy(这是我运行的服务器)的CentOS服务器上的默认值,