svnserve似乎以root身份写入文件。 我如何通过svnserve和apache访问同一个存储库?

目的是build立与svnserve和apache / webdav访问颠覆。

当用户通过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/ 

有没有人有一个干净的解决scheme来运行svnserve?

更新1: svnserve作为独立的服务运行

更新2:这里是/ etc / sysconfig / svnserve的内容:

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

更新3:我同意JvO:使用http / apache / webdav作为唯一的访问系统会简单得多。 不幸的是,第三方软件只有svn://绑定和没有http://绑定。

更新4:修改svnserve初始化脚本应该工作,但没有人有另一个想法?

更新5:增加赏金:寻找一个优雅的解决方法

显然,你的svnserve进程以root身份运行。 因此,改变configuration以像某些非特权用户一样运行该进程(不清楚svnserve是如何从您的描述开始的;可能是xinetd或其他)。

在安全方面,最好的方法是将apache和snvserve用户添加到一个普通的组(比如“svn”),并将你的版本库的权限更改为drwxrws —(也就是说,组权限是“sticky” )

您应该能够修改您的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关于作为普通组用户运行的build议(即创buildsvn用户,用svn组作为用户svn运行守护进程,然后添加apache用户到svn组)