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

4 redhat svn rhel5 svnserve mod-webdav

目的是使用 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

Run Code Online (Sandbox Code Playgroud)

确实,root 是目录的所有者,我想要 apache。


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

Run Code Online (Sandbox Code Playgroud)

现在我使用以下解决方法:


chown -R apache /pathto/repo/db/

Run Code Online (Sandbox Code Playgroud)

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

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

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


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

Run Code Online (Sandbox Code Playgroud)

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

更新 4:修改 svnserve init 脚本应该可以工作,但是有人有其他想法吗?

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

JvO*_*JvO 5

显然,您的 svnserve 进程以 root 身份运行。因此,更改配置以作为某个非特权用户运行该进程(从您的描述中不清楚 svnserve 是如何启动的;可能是 xinetd 或其他东西)。

安全方面,IMO 的最佳方法是将 apache 和 snvserve 用户添加到一个公共组(如“svn”)并将存储库的权限更改为 drwxrws ---(即,组权限是“粘性的” )