Jails em SSH: Montando sistema de Shell Seguro

Neste artigo vamos aprender a criar sistemas de Jail em SSH e assim separar recursos a usuários shell de acordo com suas necessidades, criando um ambiente secundário, o que aumenta a segurança na disponibilização de acessos remotos a terceiros.

[ Hits: 66.491 ]

Por: Anderson L Tamborim em 19/02/2008 | Blog: http://y2h4ck.wordpress.com


Montando a estrutura de Jail



Vamos criar a pasta onde será criada nossa primeira Jail. Nela iremos instalar um Jail contendo o seguinte:
  • A shell Bash básica
  • Editores de texto
  • SCP

# mkdir /home/jail
# chown root:root /home/jail


Isto evita que bisbilhoteiros do lado de fora, entrem para dentro da Jail para ver o que os outros usuários acessam.

O Jailkit tem um aplicativo chamado jk_init que permite criar e copiar programas para o ambiente Jail de forma rápida e eficiente.

Vamos criar a Jail utilizando-o:

# jk_init -v -j /home/jail basicshell editors scp

Após executar este comando o jk_init irá gerar os links simbólicos e criar o mknod s dos /dev/random e /dev/null da sua jail. O jk_init copia os binários e faz uma referência para as bibliotecas compartilhadas que cada binário utiliza.

Para saber quais shared libs cara programa utiliza é fácil, basta usar o comando ldd:

# whereis scp
scp: /usr/bin/scp /usr/X11R6/bin/scp

# ldd /usr/bin/scp
libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7ee0000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7da6000)
libutil.so.1 => /lib/tls/i686/cmov/libutil.so.1 (0xb7da1000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7d8d000)
libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7d77000)
libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb7d49000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7d2d000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7cb1000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7c8b000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7c88000)
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb7c83000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7b52000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7b4e000)
/lib/ld-linux.so.2 (0xb7efb000)

Ou seja o jk_init precisa referenciar todas estas libs, caso contrário o SCP não irá funcionar de forma adequada.

Após o comando acima para criar nossa jail tenha concluído vamos dar uma checada no que ele gerou:

# cd /home/jail/
# ls -la

total 32
drwxr-xr-x 8 root root 4096 2008-02-19 15:41 .
drwxr-xr-x 5 root root 4096 2008-02-19 15:35 ..
drwxr-xr-x 2 root root 4096 2008-02-19 15:41 bin
drwxr-xr-x 2 root root 4096 2008-02-19 15:41 dev
drwxr-xr-x 5 root root 4096 2008-02-19 15:41 etc
drwxr-xr-x 3 root root 4096 2008-02-19 15:41 lib
drwxr-xr-x 5 root root 4096 2008-02-19 15:41 usr
drwxr-xr-x 3 root root 4096 2008-02-19 15:41 var

Ele criou a estrutura necessária para que nosso usuário possa viver com o suficiente para ser feliz (ou não rs rs) neste ambiente.

Para viver nesta nova jail vamos criar um usuário chamado "bandit", ou seja o bandit vai ficar na Jail? (piada péssima eheh).

# useradd bandit
# passwd bandit


O usuário bandit existe normalmente como qualquer outro:

# ls -ld /home/bandit
drwxr-xr-x 2 bandit bandit 4096 2008-02-19 15:46 /home/bandit

# cat /etc/passwd | grep bandit
bandit:x:1002:1002:,,,:/home/bandit:/bin/bash

Vamos agora utilizar o comando jk_jailuser. Este comando irá criar o ambiente do nosso usuário dentro da Jail.

# jk_jailuser -m -j /home/jail bandit

Para que o usuário bandit possa ser direcionado para a jail no momento do login ele deve ter em seu interpretador de comando no /etc/passwd o jk_chrootsh. Este será o responsável para colocar o usuário em seu devido ambiente com seus environment:

No /etc/passwd deve ficar da seguinte forma:

bandit:x:1002:1002:,,,;/home/jail/./home/bandit:/usr/sbin/jk_chrootsh


Onde como sabemos a pasta de home dele deve apontar para a pasta dentro do /home/jail.

Obviamente o diretório /home/jail/home/bandit deve existir e pertencer ao usuário, sendo assim vamos criá-lo:

# mkdir home
# cd home/
# mkdir bandit
# chown bandit:bandit bandit/
# ls -la

total 12
drwxr-xr-x 3 root root 4096 2008-02-19 15:51 .
drwxr-xr-x 9 root root 4096 2008-02-19 15:51 ..
drwxr-xr-x 2 bandit bandit 4096 2008-02-19 15:51 bandit

Pronto, o usuário tem seu novo home.

Vamos também criar um /tmp para que os usuários possam utilizá-lo dentro da Jail:

# mkdir /home/jail/tmp
# chmod a+rwx /home/jail/tmp


É muito importante criar também um /dev/null dentro do Jail, uma vez que vários aplicativos como por exemplo SCP precisam do /dev/null para executar corretamente.

# mknod -m 666 /home/jail/dev/null c 1 3

Edite agora as entradas do /etc/passwd e /etc/group de sua JAIL ou seja, os arquivos /home/jail/etc/passwd e /home/jail/etc/group. Verifique se eles estão de acordo com os abaixo, com as informações corretas sobre o usuário:

# cat etc/passwd

root:x:0:0:root:/root:/bin/bash
bandit:x:1002:1002::/home/bandit:/bin/bash

# cat etc/group

root:x:0:
bandit:x:1002:

Feito isto nossa primeira Jail está pronta e já pode ser utilizada.

Para efetuar a manutenção da Jail usaremos o aplicativo jk_update. Ele vai servir para procurar por arquivos supostamente perigosos como SUIDs, e arquivos com permissão de execução global. Isso vai ajudar muito na segurança da sua Jail.

Para checar utilize:

# jk_update -j /home/jail -d

Existe um pequeno arquivo de configuração para o jk_update onde você define o que deve ser checado ou não. Ele é bem intuitivo e pode ser configurado de acordo com a sua necessidade.

# cat /etc/jailkit/jk_check.ini
[/home/testchroot]
# jk_check does not run any tests in this directory (useful for proc filesystem)
# be careful!! there is I repeat NO SINGLE TEST in this directory
#ignorepatheverywhere =

# jk_check compares files if they are equal to their counterparts in the real system,
# using md5sum(). In the specified directories it will not test if files are equal
# it will still test for world writable directories and setuid files
ignorepathoncompare = /home/testchroot/home, /home/testchroot/etc

# jk_check tests directory permissions, if you deliberately made some directories writable
# for group or others, or you don't care, specify them here
ignorewritableforgroup = /home/testchroot/home
ignorewritableforothers = /home/testchroot/home/tmp

# jk_check tests for setuid root and setgid root files
# if you deliberately have such files specify them here
ignoresetuidexecuteforuser = /home/testchroot/usr/bin/smbmnt, /home/testchroot/usr/bin/smbumount
ignoresetuidexecuteforgroup = /home/testchroot/usr/bin/smbmnt, /home/testchroot/usr/bin/smbumount
ignoresetuidexecuteforothers =

Terminada esta primeira parte está na hora de colocar nosso projeto sob-fogo e verificar se a Jail realmente se comporta da forma adequada. :)

Página anterior     Próxima página

Páginas do artigo
   1. Prólogo
   2. Introdução - Jail Chroot e funcionalidades
   3. Iniciando o Projeto: Recursos necessários
   4. Montando a estrutura de Jail
   5. Projeto sob fogo: Testando o nosso sistema Jail
   6. Considerações finais
Outros artigos deste autor

OpenVZ: Virtualização para servidores Linux

Análise Forense - Aspectos de perícia criminal

Security Hacks: Linux & BSD

Segurança extrema com LIDS: novos recursos

Race condition - vulnerabilidades em suids

Leitura recomendada

Como configurar um IPTABLES simples e seguro no Slackware!

Notificação Fail2ban pelo Telegram

Análise Forense - Aspectos de perícia criminal

Engenharia Social - Fios de telefone

Os segredos da criptografia com o Gcipher

  
Comentários
[1] Comentário enviado por alpkaiser em 20/02/2008 - 11:45h

Muito bom.

Mais uma vez um ótimo artigo que vem ajudar em muito na implementação de segurança em servidores Linux.

Parabéns.

[2] Comentário enviado por capitainkurn em 20/02/2008 - 11:49h

Ótimo artigo! Aliás gosto muito de seus artigos e frequentemente costumo tirar umas colas.
Já está em meus favoritos.

Parabéns!

[3] Comentário enviado por marcaoguitarra em 20/02/2008 - 12:32h

Bonzinho!!!
heheehe
muito bom cara, eu já tinha feito um apache em chroot mas não tão bem configurado assim, gostei desse jaill_kit...

[4] Comentário enviado por kalib em 20/02/2008 - 14:46h

A primeira coisa q me veio a cabeça foi um honey pott... rsrsrs
Parabéns pelo artigo camarada...o conteúdo está excelente, didático...
O conteúdo é bastante interessante...ainda não conhecia essa prática.
Parabéns novamente pelo excelente trabalho. ;]

[5] Comentário enviado por tinti em 21/02/2008 - 09:35h

Vc deitou cara!!! Muito bom!!!

[6] Comentário enviado por maran em 21/02/2008 - 21:12h

Assim eu fiquei pensando aqui né em como fazer um comentário, e cara não precisa dizer nada, simplesmente perfeito...

Abraços.

[7] Comentário enviado por removido em 25/02/2008 - 12:02h

Simplesmente fantástico!! Parabéns, com certeza utilizar Jails e Chroot é mais uma forma de mantermos nossos servicos mais seguros.

Continue postando novos artigos e utilizando a mesma didática.

Abracos.

[8] Comentário enviado por rfmartins em 01/03/2008 - 19:09h

fiz tudo que esta notutorial, mas quando crie o usuario, ele nao aparece no home.
verifiquei o /etc/passwd e o usuario esta da sequinte forma:

bandit:x:1002:1002::/home/bandit:/bin/sh

como posso ressolver isto ??

[9] Comentário enviado por danimontelo em 03/12/2009 - 12:13h

Excelente tutorial! Ajudou-me bastante em tornar mais seguro o acesso remoto aos servidores que administro.

Grata e abraços, Dani

[10] Comentário enviado por carlosparisotto em 25/08/2014 - 09:26h

Primeiramente, muito bom o artigo.
Estou usando essa ferramenta há um tempo já, porém agora estou precisando fazer um SSH sem senha
para um desses usuários enjaulados e não estou conseguindo. Sabe se é possível? Se já conseguiste
fazer, favor passar o procedimento, pois estou fazendo o mesmo procedimento que para um usuário
comum e não está funcionando. Obrigado

[11] Comentário enviado por carlosparisotto em 25/08/2014 - 11:11h

Opa, descobri que o problema na verdade é o meu SELinux, então já entra em outro tópico. Vou verificar. Valeu!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts