目的是设置具有 svnserve 和 apache/webdav 访问权限的 subversion。
当用户通过 http/apache 提交时,文件将写入文件系统并属于 apache 用户。
当用户通过 svn/svnserve 提交时,文件被写入文件系统并属于 root 用户。
我尝试以 svnserve 用户身份设置 apache,但没有任何效果:
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 的解决方案?
更新1:svnserve 作为独立服务运行
更新2:这是 /etc/sysconfig/svnserve 内容:
OPTIONS="--threads --root /pathto "
更新3:我同意 JvO 的观点:使用 http/apache/webdav 作为唯一访问系统会简单得多。不幸的是,第三方软件只有 svn:// 绑定,没有 http:// 绑定。
更新4:修改 svnserve init 脚本应该可行,但是有人有其他想法吗?
更新 5:增加赏金:寻找一个优雅的解决方案
答案1
显然,您的 svnserve 进程以 root 身份运行。因此,请更改配置,以某个非特权用户身份运行该进程(从您的描述中不清楚 svnserve 究竟是如何启动的;可能是 xinetd 或其他东西)。
从安全角度来看,我认为最好的方法是将 apache 和 snvserve 用户添加到一个公共组(如“svn”),并将存储库的权限更改为 drwxrws---(即,组权限是“粘性的”)
答案2
您应该能够修改 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
}
然后你应该能够将 USER 设置/etc/sysconfig/subversion
为你想要运行的用户。我也会回应@JVQ关于以具有共同组的用户身份运行的建议(即创建 svn 用户,使用 svn 组使守护进程以用户 svn 身份运行,然后将 apache 用户添加到 svn 组)