De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Problemas com AppArmor e Bind 9

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 07 de setembro de 2011

Recentemente eu tive que mudar a Dicas-L de servidor três vezes. Na última vez em que migrei, optei pela versão 11.05 do Ubuntu. Tudo funcionando, todas as páginas em ordem, serviços, etc. Ao menos era o que eu pensava. No mesmo servidor em que a Dicas-l está hospedada, eu mantenho um servidor DNS secundário. Qual foi minha surpresa ao ver que ele tinha parado de funcionar.

Ao emitir o comando dmesg, recebo dezenas de mensagens como abaixo:

  [1489102.871184] type=1400 audit(1315244843.987:3490):
  apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/named"
  name="/etc/bind/sec/tmp-ImXVqwHRNT" pid=12185 comm="named" requested_mask="c"
  denied_mask="c" fsuid=104 ouid=104

Nunca havia visto algo do tipo. Claramente, é um problema de permissão. Alterei as permissões do diretório em que armazeno os dados do serviço bind mas mesmo assim o problema continuava.

O causador do problema, AppArmor, ou Application Armor, é um módulo de segurança para o kernel do Linux. Segundo a definição da Wikipedia, em tradução livre:

AppArmor ("Application Armor") é um módulo de segurança do kernel do Linux, distribuído sobre a licença GPL (GNU General Public License). De 2005 a setembro de 2007, o AppArmor foi mantido pela Novell. AppArmor permite que o administrador de sistemas associe a cada programa um perfil de segurança que restringe os seus recursos. (...)

Além de adicionar perfis manualmente, o AppArmor inclui um módulo de aprendizado, nos quais violações do perfil são registradas, mas não impedidas. Este log, por sua vez, pode ser transformado em um perfil, baseado no comportamento típico do programa.

No meu caso, como eu fiz migração de todo o servidor entre versões diferentes do sistema operacional, fiquei de repente com um serviço de resolução de nomes inoperante, e o pior, sem saber a razão da falha.

Existem vários documentos na Web ensinando a lidar com o problema, mas a solução definitiva veio ao ler o texto BIND9, AppArmor and WOE!, de autoria de Pokeyoats (???).

O texto a seguir é a tradução adaptada do post citado acima.


Se você já sabe disto, então minhas desculpas, mas eu só queria publicar algo com algumas strings de busca bem claras caso algum pobre idiota (como eu) de repente se encontrar com um bind9 inoperante após um upgrade do Ubuntu.

Se você está usando Ubuntu versão 9.1, instalou o Bind 9 com o kernel nível 2.6.31-14 a 2.6.31-17, conseguiu colocá-lo para funcionar perfeitamente como mestre ou escravo, e de repente começou a receber mensagens do tipo SERVFAILs, o culpado é o AppArmor.

Eu espero que você, como eu, batalhou para resolver este problema e chegou aqui por não ter encontrado uma solução documentada.

Aqui estão alguns dos erros que você terá se o AppArmor estiver interferindo:

  dumping master file: /etc/bind/zones (or other directory)/tmp-FDGDSFDS open: permission denied
  refresh: could not set file modification time of '/etc/bind/XXXXX': permisison denied
  failed while receiving responses: permission denied
  kernel: [ 61.952539] type=1503 audit(1268157790.971:34): operation="mknod"
  pid=960 parent=1 profile="/usr/sbin/named" requested_mask="w::"
  denied_mask="w::" fsuid=114 ouid=114 name="/etc/bind/zones/tmp-9wPWFDSJ"

Todos estes problemas são causados pelo AppArmor. Aqui estão as suas opções. Você pode saber mais sobre AppArmor visitando o link https://help.ubuntu.com/8.04/serverguide/C/apparmor.html

OU então, se você quiser que o Bind 9 comece a funcionar imediatamente, vá até o diretório /etc/apparmor.d e estude o arquivo usr.sbin.named.

Desative o AppArmor com o comando:

  [as root]: aa-complain usr.sbin.named
  [as user]: sudo aa-complain usr.sbin.named

E em seguida, reative o serviço Bind9:

  /etc/init.d/bind9 start (restart, etc)

e o Bind 9 irá começar a funcionar.

Basicamente, você precisa desabilitar as regras do AppArmor ou então o seu serviço Bind 9 não funcionará (no meu caso eu coloquei as minhas zonas em /etc/bind/zones - que crime!!!)


Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida