Backup automatizado e seguro usando SSH / SCP / SFTP

São muitos os scripts de backup existentes hoje na Internet para o fim de agilizar e automatizar esse importante e muitas vezes esquecido item de Segurança da Informação. Mas poucos se preocupam em como esses dados serão enviados, podendo criar mais problemas do que solução.

[ Hits: 113.077 ]

Por: Carlos Vinícius Braga dos Santos em 29/05/2007 | Blog: http://slaypher.wordpress.com


Criando jaula SSH de segurança (Jail)



Apesar dele ter acesso de usar apenas o comando "scp" para enviar os arquivos de backup, isso também permite que ele use tal comando pega baixar arquivos do servidor, incluindo arquivos inocentes como "/etc/passwd" e por aí vai.

Devemos criar uma jaula para esse infeliz e não permitir que ele passe dos limites que lhe são necessários para executar o backup, garantindo assim a integridade do nosso sistema.

Para tal, vamos ter que fazer algumas chatices, mas essenciais, vamos começar alterando novamente o arquivo /usr/local/etc/rssh.conf e adicionar a seguinte linha:

chrootpath="/home/pequenogrilo"

Com isso estamos definindo um confinamento, uma jaula ao qual o usuário ficará preso. Em modos mais técnicos, pra quem já usou o comando "chroot", tenho certeza que já sabe o que vai acontecer, nós vamos definir um "mini-sistema" ao qual o usuário irá trabalhar. Esse comando permite transformar um diretório normal em um diretório raiz "/".

Para entender de maneira prática, comente a linha que foi adicionada agora pouco do chrootpath, reinicie o servidor sshd, e faça o seguinte:

# scp -P 2222 pequenogrilo@192.168.0.1:/etc/passwd password_do_serv
# cat password_do_serv


E você terá o "/etc/passwd" do servidor sem problemas, sabendo quais usuários ele possui, quais tem acesso root e tudo mais. Que chato não é?

Agora continuemos, descomente a linha do chrootpath do arquivo rssh.conf e deixe como descrevi agora pouco.

Depois crie um arquivo com o seguinte conteúdo e vamos executá-lo, ele é um shell script que fará uma configuração básica, copiando alguns arquivos essenciais para o diretório do pequenogrilo, para que possamos travá-lo. Dê o nome de gerar.sh:

#!/bin/bash

cd /home/pequenogrilo
mkdir -p usr/bin
cp /usr/bin/scp usr/bin
cp /usr/local/bin/rssh usr/bin
mkdir -p usr/libexec
mkdir -p usr/lib/misc
mkdir -p usr/libexec
mkdir -p usr/local/libexec
cp /usr/local/libexec/rssh_chroot_helper usr/lib/misc
cp /usr/libexec/sftp-server usr/lib/misc
cp /usr/local/libexec/rssh_chroot_helper usr/local/libexec
cp /usr/libexec/sftp-server usr/libexec
cd /home/pequenogrilo
mkdir -p lib/tls
cp /lib/libsafe.so.2 lib
cp /lib/tls/libresolv.so.2 lib/tls
cp /usr/lib/libcrypto.so.0 usr/lib
cp /lib/tls/libutil.so.1 lib/tls
cp /usr/lib/libz.so.1 usr/lib
cp /lib/tls/libnsl.so.1 usr/lib
cp /lib/tls/libcrypt.so.1 lib/tls
cp /lib/tls/libc.so.6 lib/tls
cp /lib/tls/libdl.so.2 lib/tls
cp /lib/ld-linux.so.2 lib
cp /lib/ld-linux.so.2 lib
cp /lib/libcrypt.so.1 lib
cp /lib/libnss_* lib
mkdir etc
cp /etc/passwd etc
cp /etc/ld.so* etc
mkdir dev
mknod -m 666 dev/null c 1 3

Caso não lembre, dê a permissão para execução no script que acabou de criar com o seguinte comando:

# chmod 700 gerar.sh

E execute o script:

# ./gerar.sh

Bem simples e nada engenhoso, é só pra você não ter o trabalho de mandar comando por comando. Esse arquivos são as dependências de alguns comandos que mandamos para o diretório do pequenogrilo, você pode visualizar essas dependências usando:

# ldd /usr/bin/scp

Mas teria que copiar também as dependências dos outros comandos, rssh e companhia, além de copiar o arquivo "/etc/passwd" e criar um dispositivo "/dev/null", então esse scriptzinho vai ajudá-lo e muito!

Então mais uma vez o pequeno grilo pergunta. Você falou tanto do "/etc/passwd" e agora você acabou de copiar ele pra dentro do diretório jaula? Sim! Mas vamos fazer o seguinte com ele, vamos remover todos os usuários, exceto o pequenogrilo, então o conteúdo passwd do diretório /home/pequenogrilo/etc deve ficar assim:

pequenogrilo:x:1001:104::/backup:/usr/local/bin/rssh

ATENÇÃO! Reparem que eu alterei o diretório de /home/pequenogrilo para apenas /backup, pois agora a raiz será o diretório do pequeno grilo e devemos até criar esse diretório.

Criemos então:

# cd /home/pequenogrilo
# mkdir backup
# chmod 700 backup
# chown pequenogrilo.pequenogrilo backup


Entenderam? Não!? Então vamos praticar. Primeiro reinicie o serviço sshd com o famoso comando:

# /etc/rc.d/rc.sshd restart

Agora tentem usar o scp novamente para baixar o passwd e vejam o seu conteúdo, que surpresa!

# scp -P 2222 pequenogrilo@192.168.0.1:/etc/passwd password_denovo
# cat password_denovo


Opa, mostrou apenas o usuário "pequenogrilo", justamente o arquivo que está no diretório jaula que criamos, assim ele ficará restrito apenas ao bendito.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Configurando servidor SSH
   3. O shell restrito chamado RSSH
   4. Criando jaula SSH de segurança (Jail)
   5. A hora da verdade! O backup
   6. Considerações finais
Outros artigos deste autor

Utilizando atributos em partições ReiserFS

Você sabe o que é INODE?

Traduzir dicas e mensagens do login

Leitura recomendada

Utilizando o Nmap Scripting Engine (NSE)

Uma introdução ao Linux-PAM

Tornando seu Apache mais seguro com o ModSecurity

Nessus Portscanner

Bloqueio de repetidas tentativas de login ao seu Linux

  
Comentários
[1] Comentário enviado por mbsalgueiro em 29/05/2007 - 10:24h

Cara parabens pelo artigo! Gostei d+ q vou comecar a usa-lo no servidor aqui q dou suporte! =)
So me tira uma duvida eu quero aumentar o tamanho do bk eu mudo essas duas linhas neh?

if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -gt 10000 ];

if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -le 10000 ];

e retiro essa pq ela eh p quebrar se o bk for maior de 10Mb

split -b 10m BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz.

vlww pela att!
abraco

[2] Comentário enviado por slaypher em 29/05/2007 - 23:30h

Olá,

Desculpe a demora para responder, e espero que o artigo junto com o script venha a ser muito útil para você.

Mas respondendo sua questão, você pode também alterar apenas os valores, caso queira um volume maior na quebra, por exemplo 50MB, basta alterar os valores para a sua necessidade ou comentar a parte da quebra dos pacotes.

[]'s

[3] Comentário enviado por cilmar_oliveira em 07/02/2008 - 22:45h

Muito útil....bom mesmo...
valew

[4] Comentário enviado por Maielo em 11/02/2008 - 17:25h

Parabéns pelo artigo, ajudou muito.


Vlw =]]

[5] Comentário enviado por marujo em 19/01/2009 - 11:24h

Irmãozinho parabéns, está muito bem elaborado e explicado...

[6] Comentário enviado por femars em 05/01/2010 - 10:38h

Mto bom, parabens!

[7] Comentário enviado por ls_ketzer em 24/03/2010 - 15:30h

Muito bom mesmo, meus parabens!!!

Feitas as devidas adaptações ta funcionando beleza...

[8] Comentário enviado por paulopmt1 em 26/06/2013 - 11:36h

Olá amigo,
este script faz verificação da data do arquivo antes de enviar (só envia se o arquivo de origem foi modificado)?

Parabéns pelo artigo!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts