giovedì 27 gennaio 2011

Bind e AppArmor

Penso che chiunque stia leggendo questo post sappia gia' cos'e' Bind (server dns), ma pochi forse sanno cos'e' apparmor. Quest'ultimo e' un sistema di sicurezza, sviluppato come alternativa a SELinux, (di difficile configurazione), che sfrutta i percorsi per individuare i permessi assegnati ad un eseguibile specifico.

Per problemi lavorativi avevo bisogno di spostare la cartella in cui Bind salva le zone. Purtroppo apparmor me lo impediva restituendo quest'errore:


Jan 27 13:24:48 ns named[28834]: starting BIND 9.4.2-P2.1 -u bind
Jan 27 13:24:48 ns named[28834]: found 1 CPU, using 1 worker thread
Jan 27 13:24:48 ns named[28834]: loading configuration from '/var/named/named.conf'
Jan 27 13:24:48 ns named[28834]: none:0: open: /var/named/named.conf: permission denied
Jan 27 13:24:48 ns named[28834]: loading configuration: permission denied
Jan 27 13:24:48 ns named[28834]: exiting (due to fatal error)

Ho controllato mille volte i permessi quando poi ho capito che non erano quest'ultimi a dare problemi. Allora ho capito che era colpa di apparmor. 
Nella cartella /etc/apparmor.d/ si trovano tutte le policy di accesso per ogni eseguibile che abbiamo settato. In particolare aprendo il file usr.sbin.named possiamo trovare quanto segue:

# vim:syntax=apparmor
# Last Modified: Fri Jun  1 16:43:22 2007
#include

/usr/sbin/named {
  #include
  #include

  capability net_bind_service,
  capability setgid,
  capability setuid,
  capability sys_chroot,

  # /etc/bind should be read-only for bind
  # /var/lib/bind is for dynamically updated zone (and journal) files.
  # /var/cache/bind is for slave/stub data, since we're not the origin of it.
  # See /usr/share/doc/bind9/README.Debian.gz
  /etc/bind/** r,
  /var/lib/bind/** rw,
  /var/cache/bind/** rw,
  /var/named/** rw,
  /proc/net/if_inet6 r,
  /usr/sbin/named mr,
  /var/run/bind/run/named.pid w,
#  /var/run/named/* rw,
  # support for resolvconf
  /var/run/bind/named.options r,
}
Ogni riga indica la cartella/files a cui ha accesso l'eseguibile /usr/sbin/named. Ora basta modificare questo file per dare accesso a tutto quello che vogliamo in maniera sicura.

NB: Per far si che le modifiche abbiano effetto dobbiamo riavviare apparmor e il servizio che stiamo settando, in questo caso bind:

/etc/init.d/apparmor restart
/etc/init.d/bind9 restart

0 commenti:

Posta un commento