Gentoo Logo

1.  Fazendo chroot

Fazer chroot de um serviço é um jeito de limitar o ambiente de um serviço (ou um usuário) a só acessar o que deve e não obter acesso (ou informações) que podem levar a acesso de administrador (root). Ao rodar um serviço como um usuário diferente de root (nobody, apache, named), um indivíduo malicioso só pode ter acesso a arquivos com a permissão do usuário. Isto significa que um indivíduo malicioso não pode obter acesso de root, mesmo se os serviços tiverem uma falha de segurança.

Alguns serviços como o pure-ftpd e bind têm funções de chroot, e outros serviços não têm. Se o serviço suportá-lo, use-o. Caso contrário, você terá que descobrir como criar sua própria função de chroot. Vamos ver como criar um chroot e para uma compreensão básica de como o chroot funciona, nós iremos testá-lo com o bash (jeito fácil de aprender).

Crie o diretório /chroot com mkdir /chroot. E descubra com que bibliotecas dinâmicas que o bash é compilado (se for compilado com -static este passo não é necessário):

O seguinte comando irá criar uma lista de bibliotecas usadas pelo bash.

Listagem de código 1.1: Obtendo uma lista de bibliotecas usadas

# ldd /bin/bash
  libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000)
  libdl.so.2 => /lib/libdl.so.2 (0x40060000)
  libc.so.6 => /lib/libc.so.6 (0x40063000)
  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Agora, vamos criar o ambiente para o bash.

Listagem de código 1.1: Criando ambiente de chroot para o bash

# mkdir /chroot/bash
# mkdir /chroot/bash/bin
# mkdir /chroot/bash/lib

Copie os arquivos usados pelo bash (/lib) para o lib chrootado e copie o comando de bash para o diretório bin chrootado. Isto irá criar o exato mesmo ambiente, só que com menos funcionalidades. Depois de copiar, teste-o: chroot /chroot/bash /bin/bash. Se você receber um prompt dizendo /, ele está funcionando! Caso contrário ele dirá que algum arquivo está faltando. Algumas bibliotecas compartilhadas dependem uma da outra.

Você perceberá que dentro do chroot nada funciona, fora talvez o echo. Isto é porque não temos outros comandos fora do ambiente de chroot fora bash, e o echo é uma função interna.

Este é basicamente o mesmo jeito que você criaria um serviço chrootado. A única diferença é que os serviços às vezes dependem de dispositivos e arquivos de configuração em /etc. Simplesmente copie-os (dispositivos podem ser copiados com cp -a) para o ambiente de chroot, edite o script de init para usar chroot antes de executar. Pode ser difícil descobrir que serviços e arquivos de configuração um serviço precisa. Aqui é onde o comando strace torna-se útil. Inicie o serviço com /usr/bin/strace bash e procure por open, read, stat e talvez connect. Isto dará a você uma melhor idéia de que arquivos copiar. Mas na maioria dos casos, só copiar o arquivo passwd (edite a cópia e remova usuários que não têm nada em relação ao serviço), /dev/zero, /dev/log e /dev/random.

1.  User Mode Linux

Outro jeito de criar um ambiente mais seguro é rodando uma máquina virtual. Uma máquina virtual, como o nome implica, é o processo que roda em cima de seu sistema operacional real fornecendo um hardware e ambiente de sistema operacional que parece ser sua própria máquina individual. O benefício de segurança é que se o servidor rodando a máquina virtual for comprometido, só o servidor virtual é afetado e não a instalação mestre.

Para mais informações sobre como configurar o User Mode Linux consulte o Guia de User Mode Linux.

Atualizado 15 de dezembro de 2005

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.