我们最近安装了 SVN 1.6.11,在发现 svnserve 无法满足我们的需求后,我们尝试使用 Apache 服务器 (2.2.15) 运行它。我们的系统是 RHEL 6,我们希望使用 ADS 用户帐户,因为单独为 SVN 使用创建一批新帐户似乎有点过头了。我们正尝试使用 pwauth 通过系统帐户进行外部授权。
到目前为止,尽管遵循了几个在线教程,但在设置了 Apache、PAM 和使用 mod_dav 作为身份验证一部分的 authz 文件后,我们仍无法成功让 pwauth 工作。为了说明我们使用了什么,我们遵循了几个网站上的一般概述,但尚未成功。
以下是有关我们正在运行的 Apache 服务器的更多信息:
[svn]# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Apr 29 2013 04:13:12
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
在 httpd.conf 中,我们设置了端口 80 来监听,NameVirtualHost 在 *:80,并且我们有这个 VirtualHost 设置:
<VirtualHost *:80>
DocumentRoot "/"
ServerName usfrk-sw-p1.thermo.com
AddExternalAuth pwauth /usr/local/bin/pwauth
SetExternalAuthMethod pwauth pipe
<Location /repos >
DAV svn
SVNParentPath /home/svnroot
AuthType Basic
AuthName "Thermo EPM SVN repository"
AuthzSVNAccessFile /home/svnroot/conf/authzapache
AuthBasicProvider external
AuthExternal pwauth
Satisfy Any
<limitexcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</limitexcept>
</Location>
</VirtualHost>
之前,我们按以下顺序加载了 DAV 模块:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule authnz_external_module /usr/lib64/httpd/modules/mod_authnz_external.so
《使用 Subversion 进行版本控制》一书指出,mod_dav.so 应该在任何其他 SVN 模块之前加载。据我们所知,这些是我们唯一需要的模块。
对于 authzapache 文件,我们设置了两个不同的用户组。唯一可能出现问题的是名称中包含反斜杠,我们还没有完全搞清楚是否需要一个或两个反斜杠,因为有些东西会去掉一个(名称的格式为 DOMAIN\firstname.lastname)。
对于 pwauth,一个可能的麻烦点是 config.h 文件中的 SERVER_UIDS 定义。目前,我们将其设置为本地用户的组 ID。但是,一些文档似乎建议它应该是 apache 用户的用户 ID。我们不确定我们应该在这里做什么,据我们所知,这可能是阻止我们的原因。
最后,我们运行命令“net ads info”,并获得了不错的反馈。然后我们在 /etc/ssh/sshd_config.h 中设置了一组用户 (AllowUsers)。下一个测试是测试 pwauth 作为外部身份验证器,如下所示:
[svn]$ pwauth && echo 'yay' || echo 'nay'
nay
为了尝试获取更多信息,我们运行并得到以下内容:
[svn]$ pwauth; echo $?
50
根据提供此信息的网站,返回 50 表示 pwauth 以无效用户身份运行。我们尚未弄清楚如何纠正此问题,或者这是否是使用 pwauth 时出现问题的根源。
这里某个地方缺少一个链接。SVN 已设置好,在服务器上运行良好,但我们需要允许远程用户访问,同时限制部分访问。任何见解都将不胜感激。
答案1
如果您想使用 EPEL 软件包进行 pwauth,则该软件包的 SERVER_UIDS 已被注释掉,并且依赖于 apache 组中的进程。默认情况下,它由 apache 组安装为可执行文件。