目的是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组)