Como configurar um 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):
Se entrar com o utilizador jay, segundo as regras, deverá receber um erro de acesso proibido:
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:
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.
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
- Verificar /var/log/httpd/error_log e /var/log/messages.
- Confirmar espaço em disco: df -h
- Confirmar permissões: ls -la /data/svn/repo1
- Se SELinux estiver ativo, verificar com getenforce e aplicar chcon se necessário.
- Reiniciar httpd e testar novamente: service httpd restart
- 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
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.
Materiais semelhantes

Como escolher o melhor fornecedor SaaS

Como desativar Recents no app Google Android

Controlar PC com Android: teclado e mouse remotos

Salvar backups do WhatsApp antes do Google apagar

Como postar e ver fotos 360° no Facebook
