Apache-2.2

SVN txn-current-lock:權限被拒絕

  • July 25, 2012

我剛剛在執行 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您期望的結果)我仍然收到 Permission Denied 錯誤。

似乎當我執行importor時checkout,它試圖以 root、apache 或 poduser 以外的使用者身份訪問儲存庫。

可能它正試圖以登錄 repo 的使用者身份工作(通過教程在 /etc/svn-auth-conf 中設置)。但是,我在那裡設置的 SVN 使用者與實際伺服器上的任何帳戶都是分開的,對吧?我不應該擔心匹配 SVN 使用者和伺服器使用者嗎?

謝謝,

-Esa

想出了我自己的答案。德普。

所以我發現,由於我執行的是 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可以正常工作!

另一個可能可行但我沒有測試的解決方案是轉到您的儲存庫並執行chgrp -R svn ./*,以便儲存庫中的所有文件都具有 svn 組,然後將使用者nobody 添加到 svn 組(usermod -g svn nobody)。如果需要,您還可以將任何其他使用者添加到組中(可能更有用的是您正在執行svnservesvn 伺服器,而不是通過 apache)。

我不確定為什麼將 apache 配置設置為無人執行,這似乎是 GoDaddy 的 CentOS 伺服器上的預設設置(這是我正在執行的伺服器)

引用自:https://serverfault.com/questions/410729