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.
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.
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.