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.358 ]

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: