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
您期望的結果)我仍然收到 Permission Denied 錯誤。似乎當我執行
import
or時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
)。如果需要,您還可以將任何其他使用者添加到組中(可能更有用的是您正在執行svnserve
svn 伺服器,而不是通過 apache)。我不確定為什麼將 apache 配置設置為無人執行,這似乎是 GoDaddy 的 CentOS 伺服器上的預設設置(這是我正在執行的伺服器)