在 RHEL6 上使用 pwauth 与 SVN 进行身份验证

在 RHEL6 上使用 pwauth 与 SVN 进行身份验证

我们最近安装了 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 组安装为可执行文件。

相关内容