Configurando o Bind para rodar em um chroot

Concluindo, outra medida saudável de segurança é fazer com que o Bind rode em um chroot, sem acesso aos arquivos do sistema. Com isso, ele tem acesso apenas aos seus próprios arquivos de configuração e outras funções necessárias para seu trabalho, limitando os danos que podem ser causados por eventuais brechas de segurança.

Para ativar o uso do chroot, é necessário fazer uma série de mudanças, recriando a estrutura de arquivos utilizada pelo Bind dentro do diretório “/var/lib/named” e reconfigurar o Bind para trabalhar dentro do diretório.

Esta receita é destinada ao Debian Etch (e também no Debian Sarge) ao utilizar o pacote “bind9”, mas a configuração em outras distribuições é bastante similar. Uma pesquisa por “bind9 chroot” mais o nome da distribuição costuma levar aos passos necessários.

O primeiro passo é desativar temporariamente o serviço:

# /etc/init.d/bind9 stop

Em seguida, edite o arquivo “/etc/default/bind9“, substituindo a linha

OPTIONS=”-u bind”

por:

OPTIONS=”-u bind -t /var/lib/named”

Essa alteração orienta o Bind a rodar em modo chroot, dentro do diretório especificado. Falta agora preparar o diretório, criando as pastas e os devices utilizados pelo Bind:

# mkdir -p /var/lib/named/etc
# mkdir /var/lib/named/dev
# mkdir -p /var/lib/named/var/cache/bind
# mkdir -p /var/lib/named/var/run/bind/run

# mknod /var/lib/named/dev/null c 1 3
# mknod /var/lib/named/dev/random c 1 8
# chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random

Um passo importante é ajustar as permissões da pasta ” /var/lib/named/var/”, de forma que o usuário “bind”, usado pelo servidor tenha permissão para alterar os arquivos:

# chown -R bind:bind /var/lib/named/var/*

Em seguida, migramos os arquivos de configuração, concentrados na pasta “/etc/bind”, para a pasta correspondente dentro do chroot, deixando um link para ela no local original (evitando assim problemas futuros ao atualizar o pacote). Assim como no passo anterior, é necessário acertar as permissões de acesso, de forma que o diretório seja propriedade do usuário usado pelo Bind:

# mv /etc/bind /var/lib/named/etc
# ln -s /var/lib/named/etc/bind /etc/bind
# chown -R bind:bind /var/lib/named/etc/bind

Uma última alteração é feita no arquivo “/etc/default/syslogd“, de forma que o daemon sysklogd continue gerando os logs do Bind, apesar das alterações.

Dentro do arquivo, substitua a linha:

SYSLOGD=””

por:

SYSLOGD=”-a /var/lib/named/dev/log”

Concluindo, reinicie os serviços para que as alterações entrem em vigor:

# /etc/init.d/sysklogd restart
# /etc/init.d/bind9 restart

Você pode verificar se o servidor está realmente funcionando usando o comando “rndc status”. Ele deverá retornar algo similar a:

# rndc status

number of zones: 6
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running

Se, por outro lado, você receber um erro como:

rndc: neither /etc/bind/rndc.conf nor /etc/bind/rndc.key was found

… verifique a cópia dos arquivos de configuração do diretório “/etc/bind” e os demais passos na configuração do chroot e reinicie o Bind novamente.

Concluindo, é importante reforçar que, ao ativar o chroot, todos os arquivos de configuração devem ser incluídos dentro das pastas criadas. O arquivo “/etc/bind/named.conf.local” passa a ser o “/var/lib/named/etc/bind/named.conf.local” e assim por diante.

O mesmo se aplica à configuração das zonas, cujos arquivos também devem ser criados dentro da pasta “/var/lib/named/etc/bind/”, ou outra dentro do chroot, como em “/var/lib/named/etc/bind/db.dominio”.

Apesar disso, a configuração dentro dos arquivos não muda. Ao adicionar uma nova zona no arquivo named.conf, ou named.conf.local, você continua especificando a localização dos arquivos como se nada tivesse sido alterado. Em vez de usar algo como file “/var/lib/named/etc/bind/db.gdhn”, você continua usando file “/etc/bind/db.gdhn”, como no exemplo:

zone “gdhn.com.br” IN {
type master;
file “/etc/bind/db.gdhn”;
};

Isso acontece porque, dentro do chroot, a pasta “/var/lib/named/” é vista pelo Bind como sendo o diretório raiz, já que a idéia é justamente que ele não tenha acesso às demais pastas do sistema. Com isso, a pasta “/var/lib/named/etc/bind/” é vista por ele como apenas “/etc/bind”.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X