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: 106.532 ]

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

    Como fazer: Chroot Dosemu (Clipper no Linux)

    Porque tanta gente não usa o Linux? Será que o Linux é ruim mesmo?

    cal2svg - brincando com shell script e arquivos vetoriais SVG

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

    Onde estão os programadores da era DOS?

    Leitura recomendada

    Automatizando as atualizações no Linux

    Segurança para iniciantes

    Configurando logout automático para conta root

    Bloqueio de repetidas tentativas de login ao seu Linux

    Gerenciamento de segurança da informação com open source (parte 1)

      
    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