Usando o pwauth para autenticação com o SVN no RHEL6

1

Instalamos recentemente o SVN 1.6.11 e estamos tentando executá-lo usando o servidor Apache (2.2.15) depois de encontrar o svnserve para ficar aquém das nossas necessidades. Nosso sistema é o RHEL 6 e gostaríamos de usar as contas de usuário do ADS, já que criar um novo lote de contas separadamente para o uso do SVN parece ser um exagero. Estamos tentando usar o pwauth para autorização externa usando as contas do sistema.

Até agora, apesar de seguir vários tutoriais online sobre isso, não tivemos sucesso em fazer o pwauth funcionar depois de configurar o Apache, o PAM e um arquivo authz para usar o mod_dav como parte da autenticação. Para dar uma ideia do que usamos, seguimos o esboço geral de alguns sites sobre isso, mas ainda não obtivemos sucesso.

Aqui estão mais informações sobre o servidor Apache que estamos executando:

[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"

No httpd.conf, configuramos a porta 80 para escutar, um NameVirtualHost em *: 80 e temos essa configuração do 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>

Anteriormente, nós carregamos os módulos DAV nesta ordem:

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

O livro "Version Control with Subversion" observa que o mod_dav.so deve ser carregado antes de qualquer outro módulo SVN. Até onde podemos dizer, estes são os únicos módulos que precisamos para isso.

Para o arquivo authzapache, configuramos dois grupos distintos de usuários. A única coisa que parece ser um ponto de parada é que os nomes incluem barras invertidas, e não percebemos se uma ou duas barras invertidas são necessárias, já que algumas coisas tiram uma (nomes são DOMAIN \ firstname.lastname ).

Com pwauth, um possível ponto de problema é o SERVER_UIDS definir no arquivo config.h. Atualmente, temos isso definido para o ID do grupo de nossos usuários locais. No entanto, alguma documentação parece sugerir que deveria ser o id do usuário do apache. Não temos certeza do que devemos fazer aqui, e por tudo que sabemos, isso pode ser o que está nos impedindo.

Por fim, executamos o comando 'net ads info' e obtemos o que parece ser um bom feedback. Em seguida, definimos um grupo de usuários (AllowUsers) em /etc/ssh/sshd_config.h. O próximo teste é testar o pwauth como um autenticador externo, e aqui está o que parece:

[svn]$ pwauth && echo 'yay' || echo 'nay'
nay

Ao tentar obter mais informações sobre isso, nós executamos e obtemos o seguinte:

[svn]$ pwauth; echo $?
50

De acordo com o site que tinha essa informação, um retorno de 50 sugere que o pwauth está sendo executado como um usuário inválido. Nós não descobrimos como corrigir isso ainda, ou se esta é mesmo a raiz do problema usando pwauth.

Em algum lugar aqui está um elo perdido. O SVN está configurado e funciona bem no servidor, mas precisamos permitir o acesso a usuários remotos e também limitar alguns desses acessos. Qualquer insight seria muito apreciado.

    
por Phil Kasiecki 12.06.2013 / 16:43

1 resposta

0

Se você quiser usar o pacote EPEL para o pwauth, ele terá o SERVER_UIDS comentado e dependerá do processo estar no grupo do apache. Ele é instalado como executável pelo grupo do apache por padrão.

    
por 17.10.2014 / 01:18