目的は、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:賞金を追加:エレガントな回避策を探しています
明らかに、svnserveプロセスはrootとして実行されます。したがって、そのプロセスを非特権ユーザーとして実行するように構成を変更します(svnserveがどのように開始されるかは説明から正確にはわかりません。xinetdなどの可能性があります)。
安全性に関して、IMOの最善のアプローチは、Apacheとsnvserveユーザーの両方を共通のグループ(「svn」など)に追加し、リポジトリのアクセス許可をdrwxrwsに変更することです---(つまり、グループのアクセス許可は「スティッキー」です)
別のユーザーとして実行するように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グループに追加します)