Backup do Samba 4

Introdução

Este documento visa a orientação para a configuração de backup dos dados de configurações do Samba4. Porém, não é uma solução para backup dos arquivos dos usuários, servidor de arquivos e etc. A efetivação destes procedimentos permite rápida restauração de um servidor samba com problemas ou implantação de um servidor novo baseado nas configurações restauradas de um anterior.

São utilizados scripts para a realização do backup e baseados em documentação oficial. A versão do samba que funciona corretamente com estes scripts é o Samba v4.0-v4.8. Para versões acima, existe outra abordagem oficial. Estes scripts podem funcionar no próprio host do samba que deve possuir um cliente de backup. Caso não seja possível instalar o cliente de backup, o script pode funcionar normalmente, mas após a geração dos arquivos de saída, estes devem ser enviados a um host intermediário que sofrerá o backup por meio de um cliente válido. Este segundo esquema pode ser representado pela seguinte figura:

esquema_Backup_gateway_SUAP.png

Host seria o servidor samba4. O backup-gateway é o host intermediário que recebe os dados gerados pelo script de backup do samba e possui um cliente de backup válido. O servidor de backup é o Bacula, Bareos ou outro servidor desejado.

Backup do samba4

Preparação

Primeiro, tenha um usuário com permissões de administrador e crie um diretório no qual serão armazenados os arquivos gerados para backup. No caso, será utilizado o diretório /root/backup/samba.

$ sudo mkdir /root/backup/samba -p

Realize o download do tarball do samba contendo o script de backup fornecido pelos desenvolvedores. 

$ cd /usr/src 
$ sudo wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz
$ sudo tar -xvzf samba-latest.tar.gz

Encontre o script em questão:

$ find / -iname samba_backup

Deverá aparecer uma saída apontando esta localização. Onde "x.x" é a especificação da versão do samba no seu cenário:

/usr/src/samba-4.x.x/source4/scripting/bin/samba_backup

Copiar para um local adequado, exemplo: /root/scripts/:

$ sudo cp /usr/src/samba-4.8.4/source4/scripting/bin/samba_backup /root/scripts/

A partir daqui preste bastante atenção. Será necessário alterar variáveis no script original e posteriormente inserir um trecho de código se for o seu caso. Caso seu samba4 seja compilado, realize da seguinte maneira:

$ sudo nano /root/scripts/samba_backup

DIRS="private etc sysvol"
FROMWHERE=/usr/local/samba
WHERE=/root/backup/samba

Caso o seu samba4 seja instalado via pacotes de repositórios:

$ sydi nano /root/scripts/samba_backup

DIRS="private /etc/samba sysvol"
FROMWHERE=/var/lib/samba
WHERE=/root/backup/samba

Agora insira (cole) o seguinte trecho de código na linha 85 se o seu samba4 foi instalado via repositório de pacotes:

elif  [ "$d" = "/etc/samba" ]; then
		# Run the backup.
		#    --warning=no-file-ignored set to suppress "socket ignored" messages.
		tar cjf ${WHERE}/${n}.${WHEN}.tar.bz2  $d --warning=no-file-ignored
		Status=$?       # Preserve $? for message, since [ alters it.
		if [ $Status -ne 0 ]; then
				echo "Error while archiving ${WHERE}/${n}.${WHEN}.tar.bz2 - status = $Status"
				exit 1
		fi

Este código é necessário pois sem ele uma parte dos arquivos não seria copiada.

 Ajuste permissões:

$ sudo chmod 750 /root/backup/samba/
$ sudo chown root:root /root/scripts/samba_backup

Execução

Antes de rodar o script é NECESSÁRIO parar o serviço do samba. Então, faça da seguinte maneira:

$ sudo service samba stop
$ /root/scripts/samba_backup 2>/dev/null

Os arquivos ficarão em /root/backup/samba/:

$ ls root/backup/samba/
_etc_samba.2018-08-20.tar.bz2 
samba4_private.2018-08-20.tar.bz2 
sysvol.2018-08-20.tar.bz2

Rotina de backup

Sugere-se a adição deste script à rotina do host para uma execução periódica. Porém, é importante alterar o script para que seja possível parar o samba antes de executar o script! Pode ser inserido tal código ao script:

# PARAR SAMBA, INÍCIO DO SCRIPT:
/etc/init.d/samba stop

......

# INICIAR SAMBA APÓS TODA A EXECUÇÃO DO SCRIPT, NAS ULTIMAS LINHAS:
# START SAMBA
/etc/init.d/samba start

Restaurando os arquivos

Por se tratar de procedimento complexo em que o sucesso depende muito das variáveis envolvidas no ambiente, não é possível garantir o sucesso dos métodos de restauração à seguir para qualquer caso. Assim, o administrador deve realizar os devidos ajustes para conseguir ter sucesso na operação.

 Observações importantes:

  • Nunca tente restaurar e realizar uma troca de versão do samba ao mesmo tempo. Sempre restaure, tenha um sistema funcional, e depois realize a atualização;
  • Não troque o hostname nem o endereço de IP para não ter problemas com o kerberos e DNS;
  • RECOMENDADO: restaure na mesma instância de S.O que estava executando o serviço anteriormente.
  • Se for necessário reinstalar o sistema, será necessário que primeiro seja instalado corretamente o seu active directory controller.

Pare o samba!

$ sudo /etc/init.d/samba stop

Remova os diretórios anteriores caso samba4 seja compilado:

$ sudo rm -rf /usr/local/samba/etc
$ sudo rm -rf /usr/local/samba/private
$ sudo rm -rf /usr/local/samba/var/locks/sysvol

Apague os diretórios anteriores caso samba4 seja instalado via repositório de pacotes:

$ sudo rm -rf /etc/samba/
$ sudo rm -rf /var/lib/samba/sysvol/
$ sudo rm -rf /var/lib/samba/private/

O arquivo compactado por vezes vai gerar uma estrutura de diretórios partindo da raiz "/", assim, ao copiar do backup para a pasta real, copie somente a parte do caminho que resta. Por exemplo, no caso de /etc/samba/ copie o diretório, dentro do arquivo compactado relativo ao etc, a partir do que estiver dentro de "samba", ou seja:

samba_backup_etc_conteudo.JPG

Estes arquivos devem ser copiados para /etc/samba/.

Assim, copie para os caminhos reais os conteúdos dos arquivos do "etc" (_etc_samba.Timestamp.tar.bz2), "private"(samba4_private.Timestamp.tar.bz2) e "sysvol"(sysvol.Timestamp.tar.bz2). Os caminhos reais, como apontado anteriormente, dependem da instalação do seu samba, se compilada ou não. Timestamp é um data no formato AAAA-MM-DD, Ex: 2018-08-24.

Supondo que esteja no diretório que contém os três arquivos do backup:

$ sudo tar -jxf etc.{Timestamp}.tar.bz2 -C /CAMINHO/COMPILADO/OU/NÃO
$ sudo tar -jxf samba4_private.{Timestamp}.tar.bz2 -C /CAMINHO/COMPILADO/OU/NÃO
$ sudo tar -jxf sysvol.{Timestamp}.tar.bz2 -C /CAMINHO/COMPILADO/OU/NÃO

Renomeie os arquivos *.ldp.bak para *.ldb:

$ find /LOCAL/DO/PRIVATE -type f -name '*.ldb.bak' -print0 | while read -d $'\0' f ; do mv "$f" "${f%.bak}" ; done

Se o backup não contém ACLs extendidas, execute:

$ sudo samba-tool ntacl sysvolreset

 Se você utiliza o samba como backend DNS, execute o comando à seguir para consertar os hardlinks das bases DNS:

$ sudo samba_upgradedns --dns-backend=BIND9_DLZ

Então pode reiniciar o serviço do samba e realizar os devidos ajustes.

$ sudo /etc/init.d/samba start

Referências

https://wiki.samba.org/index.php/Using_the_samba_backup_script

https://wiki.samba.org/index.php/Back_up_and_Restoring_a_Samba_AD_DC