web-dev-qa-db-ja.com

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"は素晴らしく機能します。リポジトリをリモートで操作する場合には役立ちません。

少し検索すると、それがアクセス許可の問題であることがわかりましたが、リポジトリのアクセス許可の構成は失敗しました。

これは、上記のチュートリアルに従ったデフォルトのリポジトリ権限ですが、失敗します。

-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を介してリポジトリを作成したpoduserと呼ばれる)を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の結果があります)それでもPermissionDeniedエラーが発生します。

importまたはcheckoutを実行すると、root、Apache、またはpoduser以外のユーザーとしてリポジトリにアクセスしようとしているようです。

おそらく、リポジトリにログインしたユーザーとして機能しようとしています(チュートリアルを介して/ etc/svn-auth-confで設定します)。ただし、そこで設定したSVNユーザーは、実際のサーバー上のアカウントとは別ですよね? SVNユーザーとサーバーユーザーのマッチングについて心配する必要はありませんか?

ありがとう、
-Esa

2
Esaevian

私自身の答えを見つけました。 Derp。

そこで、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プロセスは、「Apache」や「svn」などではなく「nobody」として実行されています。

これには2つの可能な解決策があります(私は1つだけ試しました)。

私がした(そしてそれがうまくいった)のは、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)。必要に応じて、他のユーザーをグループに追加することもできます(おそらく、Apacheではなくsvnserve svnサーバーを実行している方が便利です)。

Apache configがnobodyとして実行されるように設定された理由がわかりません。これは、GoDaddy(実行しているサーバー)のCentOSサーバーのデフォルトのようです。

3
Esaevian