Como fazer: chroot SSH (SSH mais seguro)

hra

Este tutorial explica como configurar um ambiente para o servidor sshd de forma que o usuário só tenha acesso ao seu diretório home e tenha o mínimo de comandos disponíveis, só o necessário para executar suas tarefas, assim incrementando a segurança.

[ Hits: 105.353 ]

Por: Hamilton R. Amorim em 15/10/2003 | Blog: http://www.algorista.tk


Criando a raíz



A primeira coisa a fazer é criar uma raíz de diretórios e arquivos que no final será a raíz visível para o usuário "teste". Abaixo do diretório /home/teste crie as seguintes pastas:

/bin
/dev
/etc
/home
/home/teste2
/lib
/sbin
/tmp
/usr
/usr/sbin (link simbólico para sbin)
/usr/bin (link simbólico para bin)
/usr/share


Todas essas pastas estão abaixo da pasta /home/teste, não se esqueça disso, os links em /usr/bin e /usr/sbin também apontam para essas pastas "internas" do usuário teste. Cuidado para não apontar esses links para as pastas "reais" na raíz do Linux, no final deste tutorial o usuário teste não terá mais acesso a raíz real do Linux, só vai enxergar essa raíz falsa.

Nesta próxima etapa, vamos copiar os comandos de shell que o usuário teste vai utilizar e as libs relacionadas a esses comandos. Vamos fornecer apenas um mínimo para o usuário navegar no sistema, editar um arquivo e nada mais.

Copie os seguintes arquivos de suas origens reais para suas respectivas pastas dentro do /home/teste:

/bin
     bash
     id
     cat
     clear
     cp
     du
     grep
     less
     ls
     mv
     mkdir
     rmdir
     rm
     sh -> bash (link simbólico para arquivo bash)
     su         (não copie esse ainda)
     pico       (um editor de textos, não precisa copiar)
     vi         (mais um editor de textos)

/dev
     null       (não copie, crie um link real)

/etc
     bashrc     (não é realmente necessário)
     group      (não copie ainda)
     passwd     (não copie ainda)

/lib
    ld-2.2.5.so
    ld-linux.so.2 -> ld-2.2.5.so (link simbólico)
    libc-2.2.5.so
    libcrypt.so.1
    libc.so.6 -> libc-2.2.5.so (link simbólico)
    libdl-2.2.5.so
    libdl.so.2 -> libdl-2.2.5.so (link simbólico)
    libncurses.so.5
    libnsl.so.1
    libnss_compat.so.2
    libnss_files.so.2
    libpam_misc.so.0
    libpam.so.0
    libtermcap.so.2 -> libtermcap.so.2.0.8 (link simbólico)
    libtermcap.so.2.0.8

/usr/share
    terminfo/ (pasta, copie inteira)

/home/teste
   .bash_history  (mover do /home/teste original)
   .bash_logout   (idem)
   .bash_profile  (idem)
   .bashrc        (idem)

Essa lista de arquivos foi montada da seguinte forma, copiei os arquivos dos "comandos de shell" e com o comando ldd descobri as libs necessárias para o funcionamento dos comandos. O comando ldd não lista tudo, então fui executando os comandos e vendo o que ainda faltava, assim montei a lista de libs. Tem ainda alguns arquivos que merecem um cuidado especial, veja os detalhes de cada um deles:
  • Links simbólicos: aqueles criados com comando "ln -s arq-origem".
  • /bin/su: este arquivo é um problema, o su que vem com o RedHat73 está linkado com as libs de pam e não servem para nossa necessidade. Precisamos uma versão mais simplificada. O ideal é baixar o pacote sh-utils em:
    ftp://alpha.gnu.org/gnu/coreutils/sh-utils-2.0.15.tar.gz e compilar (simples: "tar ...; cd ...; ./configure; make"), pegue o arquivo src/su, este funciona perfeito. Se tiver algum problema em compilar pegue este "su" precompilado:
    http://www.algorista.hpg.ig.com.br/como_fazer/su.gz.
  • /dev/null: crie um link real que tudo funciona bem. Você consegue sobreviver sem esse arquivo, então não precisa copiar se não quiser.
  • /etc/group: crie um arquivo só com as duas linhas do root e do seu usuário, no meu caso é o usuário "teste". Meu arquivo ficou assim:

    root:x:0:root teste:x:515:


  • /etc/passwd: o mesmo caso, crie um arquivo só com as duas linhas que interessam:

  • root:x:0:0:root:/root:/bin/bash teste:x:515:515::/home/teste:/bin/bash


  • /usr/share/terminfo: nesta pasta tem as informações para seu terminal remoto, necessário para o comando less. Se não precisa do less, não precisa disso. OBS: cuidado com o uid e gid nos arquivos passwd e group, se você errar qualquer desses números o seu usuário vai ficar recebendo erros de acesso a pasta home quando for conectar.

    Página anterior     Próxima página

    Páginas do artigo
       1. Considerações iniciais
       2. Introdução
       3. Requisitos
       4. Criando a raíz
       5. Permissões dos arquivos
       6. Configurando o Linux
       7. Considerações finais
    Outros artigos deste autor

    A miséria social do Brasil e o software proprietário

    Como fazer: Chroot Dosemu (Clipper no Linux)

    Onde estão os programadores da era DOS?

    Copiando programas dos LiveCDs (Kurumin) para seu Debian sem usar a internet

    cal2svg - brincando com shell script e arquivos vetoriais SVG

    Leitura recomendada

    Vazamento de informações vitais via "HP Operations Manager Perfd"

    Seguraça extrema com LIDS

    Auditando senhas com John The Ripper

    Fail2ban no Debian - Instalação e Configuração

    Integração de servidores Linux com Active Directory

      
    Comentários
    [1] Comentário enviado por fabio em 15/10/2003 - 09:46h

    Excelente artigo! É a primeira vez que vejo algo falando sobre criação de "celas" ssh em Português.

    [2] Comentário enviado por y2h4ck em 31/03/2004 - 13:51h

    Bom fiz o teste aqui ... estou tendo uma pequena dificuldade nao sei se com permissoes ...
    porem o quando me logo o usuario esta caindo fora do home dele ... okei

    falow

    [3] Comentário enviado por y2h4ck em 31/03/2004 - 13:59h

    (root@unsekurity)(/)$ ssh -l guest localhost
    guest@localhost's password:
    Last login: Sat Mar 27 11:35:22 2004 from localhost
    Have a lot of fun...
    /bin/chroot-shell: Exec format error
    Connection to localhost closed.

    heys meu erro
    meu /bin/chroot-shell esta igualzinho ao do seu explo
    so tive que modificar o path do /usr/sbin/chroot para /usr/bin/chroot
    espero que possa je ajudar :D

    [4] Comentário enviado por peter_77_schultz em 20/11/2005 - 12:09h

    Beleza Amilton! Pois é, voce já escreveu o artigo a quase dois anos e mesmo depois de tanto tempo e ainda desperta interesse.

    No meu caso estou tentando instalar o Chroot SSH na minha máquina. Segui todos os passos que voce descreveu, mas no final eu nao consigo me logar na area chroot. Isso acontece tanto com o comando "su" quanto com o comando "ssh".

    Eu nao obtenho nenhum erro. Mas toda vez que eu digito a senha a pergunta aparece novamente- "password:"

    será que voce pode me dar uma força. Valeu, Peter

    [5] Comentário enviado por tatototino em 19/08/2006 - 20:39h

    no meu tb igual na do peter pede duas vezes a passwd /etc/passwd

    pq pede vcs sabem ?

    [6] Comentário enviado por apscherbach em 02/10/2006 - 16:50h

    Comigo aqui está dando esse erro:

    Usuário não existente. O que pode ser. O usuário está criado... claro, e os arquivos passwd e group copiados e modificados.

    Adriano

    [7] Comentário enviado por K1LL -9 em 15/11/2007 - 17:34h

    Dúvida boba ( não tive tempo pra testar essa solução):

    Obteria exito em executar algo ('uploadeado') usando a ld-2.2.5.so ?
    Obteria né ?


    [8] Comentário enviado por TigonesBuell em 04/09/2008 - 15:26h

    Ignorante

    [9] Comentário enviado por diesel em 04/11/2012 - 09:47h

    Obrigado pela contribuição.
    Me ajudou muito.


    Contribuir com comentário




    Patrocínio

    Site hospedado pelo provedor RedeHost.
    Linux banner

    Destaques

    Artigos

    Dicas

    Tópicos

    Top 10 do mês

    Scripts