Guia de tecnologias

Como configurar um servidor SVN no CentOS

9 min read DevOps Atualizado 19 Oct 2025
Configurar servidor SVN no CentOS
Configurar servidor SVN no CentOS

Definição curta: Subversion (SVN) é um sistema de controlo de versão centralizado para rastrear mudanças em ficheiros e pastas ao longo do tempo.

Objetivos e variantes de procura (intent)

  • Configurar servidor SVN no CentOS
  • Instalar mod_dav_svn e integrar com Apache
  • Criar repositório e gerir utilizadores e permissões
  • Testar acesso via cliente Linux e TortoiseSVN no Windows
  • Variantes relacionadas: instalar SVN em RHEL/CentOS 7/8, usar SVN com SSL, usar svnserve em vez de Apache, migrar para Git

1. Introdução e pré-requisitos

Este tutorial foi testado com CentOS 6.4 (32 bits). As instruções são válidas para distribuições compatíveis com yum e pacotes mod_dav_svn/subversion. Para ambientes mais recentes (CentOS 7/8, RHEL 7/8) alguns detalhes do serviço e firewall podem variar.

Pré-requisitos básicos:

  • Acesso root ou sudo no servidor CentOS
  • Conectividade de rede entre clientes e servidor
  • Repositório yum configurado (ou EPEL se necessário)
  • Apache (httpd) será usado como front-end HTTP para SVN

Nota: pode optar por usar svnserve (servidor SVN nativo) em vez de Apache; isso altera alguns passos de configuração e autenticação.

2. Instalação dos pacotes necessários

Para um servidor SVN integrado com Apache instalamos httpd, subversion e mod_dav_svn. No CentOS usamos yum.

Comandos básicos mostrados no servidor de exemplo:

ifconfig

(Exemplo de saída de ifconfig no servidor de origem.)

yum install -y httpd

Exemplo (saída resumida):

[root@SVNSVR641 ~]# yum install -y httpd
Loaded plugins: refresh-packagekit, security
Setting up Install Process
Resolving Dependencies
---> Package httpd.i686 0:2.2.15-26.0.1.el6 will be installed
Installed:
httpd.i686 0:2.2.15-26.0.1.el6
Complete!

Instale também Subversion e o módulo mod_dav_svn:

yum install -y subversion
yum install -y mod_dav_svn

Saída exemplo para subversion e mod_dav_svn (resumida) está presente no tutorial original.

Important: em servidores 64 bits e em versões mais recentes os pacotes terão sufixos x86_64.

3. Criação do repositório e permissões básicas

É prática recomendada criar um diretório dedicado para os repositórios.

mkdir /data/svn

Criar o repositório chamado repo1 e ajustar a propriedade para o usuário do Apache:

svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1

Depois de criar o repositório, verá uma estrutura semelhante:

cd /data/svn/repo1
ls
[root@SVNSVR641 repo1]# ls
conf db format hooks locks README.txt

Arquivos de configuração do repositório

No diretório conf existem três ficheiros importantes:

[root@SVNSVR641 conf]# ls
authz passwd svnserve.conf
  • svnserve.conf: define políticas gerais do repositório
  • passwd: lista de utilizadores locais (quando se usa autenticação básica)
  • authz: define permissões por repositório / caminho

Edite svnserve.conf para ativar autenticação por password e usar os ficheiros internalmente:

vi svnserve.conf

Conteúdo recomendado para svnserve.conf:

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

4. Criar utilizadores para o repositório (AuthUserFile)

O tutorial usa htpasswd para gerir os utilizadores que o Apache lerá.

Criar o primeiro utilizador (cria o ficheiro passwd):

htpasswd -c /data/svn/repo1/conf/passwd jay

Adicionar mais utilizadores:

htpasswd /data/svn/repo1/conf/passwd fikri
htpasswd /data/svn/repo1/conf/passwd farid

Exemplo de conteúdo de passwd (hashes):

[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA
fikri:/hlooqJMfYLkw
farid:P7Zvu6B3HyFGo

Observação: htpasswd gera hashes compatíveis com Apache. Para linhas de segurança, guarde cópias off-line e use senhas fortes.

5. Definir permissões finas com authz

Edite o ficheiro authz para limitar acessos por utilizador e por caminho.

vi authz

Exemplo usado:

[repo1:/]
farid = r
fikri = rw
* =

Interpretação:

  • farid: apenas leitura (r)
  • fikri: leitura e escrita (rw)
  • jay e outros: sem acesso

Dica: pode definir regras por subdiretório substituindo [repo1:/subdir].

6. Integrar o repositório com Apache (mod_dav_svn)

Abra o ficheiro principal do Apache e confirme que inclui configurações adicionais:

vi /etc/httpd/conf/httpd.conf

Certifique-se de que existe a linha:

Include conf.d/*.conf

Depois, edite o ficheiro de configuração do Subversion em conf.d. No servidor de origem havia um ficheiro subversion.conf. Exemplo:

cd /etc/httpd/conf.d/
ls
vi subversion.conf

Conteúdo configurado no exemplo:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so


DAV svn
SVNPath /data/svn/repo1
Authtype Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user

Explicação rápida:

  • LoadModule: carrega os módulos Apache para SVN
  • : torna o repositório disponível em http:///repo1
  • AuthzSVNAccessFile: ficheiro com regras de autorização
  • AuthUserFile: ficheiro com utilizadores e senhas (htpasswd)

Após qualquer alteração reinicie o Apache:

service httpd restart

Exemplo de saída:

[root@SVNSVR641 conf.d]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

7. Fase de testes: cliente Linux (CentOS) e Windows (TortoiseSVN)

Teste com cliente Linux

No cliente CentOS instale subversion:

yum install -y subversion

Checkout do repositório:

mkdir repo_client
svn co http://192.168.43.101/repo1 repo_client

O cliente pedirá autenticação. No exemplo foi usado o utilizador fikri e aceita também guardar a senha em claro (aviso do cliente Subversion):

Store password unencrypted (yes/no)? yes
Checked out revision 0.

Criar um diretório local e commit:

cd repo_client
svn mkdir first_dir
svn commit -m "My first folder"

Saída esperada:

Committed revision 1.

Isso confirma que o utilizador com rw consegue criar e commitar.

Teste com cliente Windows – TortoiseSVN

No Windows instale TortoiseSVN, crie uma pasta local e seleccione SVN Checkout.

Ao abrir a URL http://192.168.43.101/repo1, o navegador pedirá autenticação (exemplo de screenshot no original):

Janela de autenticação HTTP do SVN

Se entrar com o utilizador jay, segundo as regras, deverá receber um erro de acesso proibido:

Página de acesso proibido mostrada no navegador

No TortoiseSVN, ao efetuar checkout com farid (somente leitura) ou fikri (leitura/gravação) verificamos os comportamentos esperados. Prints do processo no ambiente original estão incluídos abaixo:

Inserir a URL do repositório SVN no TortoiseSVN

Janela de login do TortoiseSVN

Checkout completado no TortoiseSVN

Lista de diretório mostrando first_dir criado por outro utilizador

Testando restrição de escrita: o utilizador farid cria uma pasta SECOND_DIR localmente, adiciona (Add) e tenta commitar. Durante o commit a autenticação é solicitada e o Apache rejeita a escrita, exibindo erro de permissão — comportamento esperado para um utilizador com apenas r.

Criação da pasta SECOND_DIR no Windows

Selecionar Add no menu do TortoiseSVN

Confirmar seleção do diretório para adicionar

Diretório adicionado ao repositório local

Selecionar Commit no menu do TortoiseSVN

Janela para confirmar commit

Janela de autenticação para commit

Erro indicando que o utilizador não tem permissão de escrita

Com isso finalizamos os testes de funcionalidade e permissões.

8. Solução de problemas comum

Abaixo uma checklist rápida para problemas frequentes.

  • Apache não serve o repositório
    • Verifique erros no /var/log/httpd/error_log
    • Confirme que LoadModule aponta para módulos existentes
    • Verifique Include conf.d/*.conf em httpd.conf
  • Erros de autorização (403 Forbidden)
    • Confirme AuthzSVNAccessFile aponta para o ficheiro correto
    • Verifique sintaxe do ficheiro authz (nomes de repositório e caminhos)
    • Cheque dono e permissões do diretório /data/svn/repo1
  • Erros de autenticação
    • Verifique o ficheiro AuthUserFile (htpasswd)
    • Teste user com htpasswd -v /data/svn/repo1/conf/passwd
  • Problemas com SELinux
    • Se SELinux estiver ativo, permita o Apache ler os repositórios:
chcon -R -t httpd_sys_content_t /data/svn/repo1
chcon -R -t httpd_sys_rw_content_t /data/svn/repo1  # se precisar de write via Apache
  • Firewall (iptables / firewalld)
    • Abra a porta 80/443 conforme necessário
  • Aviso sobre armazenamento de senhas em claro
    • Subversion avisa se a senha vai ser guardada sem encriptação; para mitigar, configure libsecret ou gnome-keyring no cliente, ou ajuste store-plaintext-passwords no ficheiro /root/.subversion/servers

9. Segurança e boas práticas

  • Use HTTPS (TLS) para tráfego SVN em produção. Configure um VirtualHost com SSLCertificateFile e habilite mod_ssl.
  • Não exponha o servidor SVN diretamente à Internet sem WAF ou VPN.
  • Use senhas fortes e rotacione credenciais regularmente.
  • Considere LDAP/AD para autenticação centralizada (AuthLDAP) em vez de htpasswd, se tiver muitos utilizadores.
  • Backup: agende dumps regulares com svnadmin dump e copie o diretório fisico do repositório para local seguro.

Comandos exemplos de backup:

svnadmin dump /data/svn/repo1 > /backup/repo1-`date +%F`.svndump

Restauração básica:

svnadmin create /data/svn/repo1-restored
svnadmin load /data/svn/repo1-restored < /backup/repo1-YYYY-MM-DD.svndump

10. Alternativas e quando evitar SVN

  • Quando preferir sistemas distribuídos: Git (maior flexibilidade para ramificação e colaboração offline).
  • SVN é adequado para projetos que precisam de controle centralizado, histórico linear e locks de ficheiros.
  • Para novos projetos verdes, Git é frequentemente recomendado; migração de SVN para Git é possível com ferramentas como git-svn.

11. Mini-metodologia para controlo de acesso (heurística)

  • Princípio do menor privilégio: conceda apenas r onde possível.
  • Separar contas de deploy e contas de pessoas.
  • Revisão trimestral de permissões e utilizadores inválidos.

12. Checklist por função

Administrador:

  • Criar /data/svn e repositórios
  • Configurar Authz e AuthUserFile
  • Configurar Apache/SSL
  • Agendar backups

Desenvolvedor:

  • Fazer checkout com credenciais
  • Verificar política de commit e mensagens
  • Evitar commitar ficheiros binários grandes sem lock

Operações/Segurança:

  • Monitorizar logs Apache
  • Gerir atualizações do SO e pacotes
  • Testar restauração de backups

13. Runbook rápido de incidentes: falha de escrita no servidor

  1. Verificar /var/log/httpd/error_log e /var/log/messages.
  2. Confirmar espaço em disco: df -h
  3. Confirmar permissões: ls -la /data/svn/repo1
  4. Se SELinux estiver ativo, verificar com getenforce e aplicar chcon se necessário.
  5. Reiniciar httpd e testar novamente: service httpd restart
  6. Se o repositório estiver corrompido, considerar restaurar a partir do dump mais recente.

14. Critérios de aceitação

  • O repositório responde em http:///repo1 e retorna página de listagem.
  • Utilizador com rw consegue commitar e ver histórico.
  • Utilizador com r consegue checkout, mas não consegue commitar (erro 403 em operações de gravação).
  • Utilizador sem permissões recebe 403 ao tentar aceder.
  • Backups cron funcionam e restauração de teste é bem-sucedida.

15. Níveis de maturidade para uso de SVN

  • Nível 1 (inicial): repositório único, auth local htpasswd, sem SSL.
  • Nível 2 (intermediário): múltiplos repositórios, authz por caminho, TLS/HTTPS.
  • Nível 3 (avançado): integração LDAP/AD, autores e hooks automatizados, backup e monitorização, políticas de revisão de acessos.

16. Glossário (1 linha cada)

  • SVN: Sistema de controlo de versão centralizado.
  • Apache/httpd: Servidor web usado para expor o repositório via HTTP(S).
  • mod_dav_svn: Módulo Apache para servir repositórios SVN via WebDAV.
  • AuthzSVNAccessFile: Ficheiro que define regras de acesso por repositório/caminho.
  • htpasswd: Utilitário para criar ficheiros de passwords usados por Apache.

17. Fact box — números chave (qualitativo)

  • Tipicamente: 1 repositório por projeto.
  • Utilizadores: gerir com htpasswd para poucos utilizadores; LDAP para muitos.
  • Transporte: use HTTPS em produção.

18. Exemplos de cenário quando SVN falha para o seu caso

  • Equipa distribuída que requer commits offline frequentes — prefira Git.
  • Necessidade intensiva de branches/merges complexos — Git costuma ser mais produtivo.

19. Migração e compatibilidade

  • Para migrar para Git use git-svn ou ferramentas especializadas.
  • Versões antigas do Subversion (ex.: 1.6 usado no exemplo) podem ter diferenças em hooks e comportamento; verifique compatibilidade ao atualizar.

20. FAQ

Q: Posso usar SVN sem Apache? A: Sim — com svnserve, que é o servidor nativo de SVN. Porém, svnserve usa um protocolo diferente (svn://) e pode ter menos opções de autorização integradas com Apache.

Q: Como habilitar HTTPS? A: Configure um VirtualHost com SSL no Apache (mod_ssl) e aponte para o mesmo bloco . Garanta que o certificado é válido.

Q: Posso integrar com LDAP? A: Sim. Use módulos de autenticação LDAP do Apache (mod_authnz_ldap) e altere a configuração de AuthType conforme necessário.

21. Conclusão

Seguindo estes passos consegue instalar, configurar e testar um servidor SVN integrado com Apache no CentOS. A configuração de permissões via authz permite controlar leitura/escrita ao nível de repositório e de diretório. Em produção, acrescente HTTPS, backups regulares e política de gestão de utilizadores.

Resumo final: cria-se o repositório, define-se utilizadores com htpasswd, configura-se authz para permissões finas, integra-se com Apache via mod_dav_svn, reinicia-se o serviço e testa-se com clientes Linux e Windows.

Importante: mantenha backups e aplique TLS em ambientes expostos à Internet.

Autor
Edição

Materiais semelhantes

Como escolher o melhor fornecedor SaaS
SaaS

Como escolher o melhor fornecedor SaaS

Como desativar Recents no app Google Android
Privacidade

Como desativar Recents no app Google Android

Controlar PC com Android: teclado e mouse remotos
Tutoriais

Controlar PC com Android: teclado e mouse remotos

Salvar backups do WhatsApp antes do Google apagar
Tecnologia

Salvar backups do WhatsApp antes do Google apagar

Como postar e ver fotos 360° no Facebook
Tutoriais

Como postar e ver fotos 360° no Facebook

Converter vídeos com VLC: guia rápido
Tutoriais

Converter vídeos com VLC: guia rápido