web-dev-qa-db-ja.com

svnserveはファイルをrootとして書き込んでいるようです。 svnserveとapacheを介して同じリポジトリへのアクセスを許可するにはどうすればよいですか?

目的は、svnserveとApache/webdavアクセスの両方でSubversionをセットアップすることです。

ユーザーがhttp/Apacheを介してコミットすると、ファイルはファイルシステムに書き込まれ、Apacheユーザーに属します。

ユーザーがsvn/svnserveを介してコミットすると、ファイルはファイルシステムに書き込まれ、rootユーザーに属します。

改善せずにApacheをsvnserveユーザーとして設定しようとしました:


cat /pathto/repo/conf/passwd
[users]
Apache = XxXxXxX

 cat /pathto/repo/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd


[sasl]
use-sasl = false

svn: Commit failed (details follow):
svn: Can't move '/pathto/repo/db/txn-protorevs/1091-ux.rev' 
to '/pathto/repo/db/revs/1/1092': Permission denied

確かに、rootはディレクトリの所有者です。私はApacheが欲しかったのです。


ls -ld /pathto/repo/db/revs/1/
drwxr-s--- 2 root svn 4096 Jul 17 15:25 /pathto/repo/db/revs/1/

今のところ、次の回避策を使用します。


chown -R Apache /pathto/repo/db/

誰かがsvnserveを実行するためのcleanソリューションを持っていますか?

更新1: svnserveはスタンドアロンサービスとして実行されます

更新2:これが/ etc/sysconfig/svnserveの内容です:


OPTIONS="--threads --root /pathto "

更新3:私はJvOに同意します:唯一のアクセスシステムとしてhttp/Apache/webdavを使用する方がはるかに簡単です。残念ながら、サードパーティのソフトウェアにはsvn://バインディングしかなく、http://バインディングはありません。

pdate 4: svnserve initスクリプトの変更は機能するはずですが、誰か別のアイデアがありますか?

更新5:賞金を追加:エレガントな回避策を探しています

4
user130370

明らかに、svnserveプロセスはrootとして実行されます。したがって、そのプロセスを非特権ユーザーとして実行するように構成を変更します(svnserveがどのように開始されるかは説明から正確にはわかりません。xinetdなどの可能性があります)。

安全性に関して、IMOの最善のアプローチは、Apacheとsnvserveユーザーの両方を共通のグループ(「svn」など)に追加し、リポジトリのアクセス許可をdrwxrwsに変更することです---(つまり、グループのアクセス許可は「スティッキー」です)

5
JvO

別のユーザーとして実行するようにsvnserv起動スクリプトを変更できるはずです。 https://Gist.github.com/dexterbt1/905615 を見てください。関連する部分は

start() {
        echo -n $"Starting $desc ($prog): "
    daemon --user $USER $prog -d $OPTIONS
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
    echo
}

そうすれば、/etc/sysconfig/SubversionのUSERを実行したいユーザーに設定できるはずです。また、共通グループを持つユーザーとして実行することについての@JVQの提案をエコーし​​ます(つまり、svnユーザーを作成し、svnグループでデーモンをユーザーsvnとして実行し、Apacheユーザーをsvnグループに追加します)

4
Doon