User Tools

Site Tools


howtos:bind-apparmor

bind and chroot

Install software:

apt-get install bind9
/etc/init.d/bind9 stop
/etc/init.d/apparmor stop

Change bind settings to make it startup in chroot environment:

vim /etc/default/bind9

Change first line to:

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

Create some directories & a link to move /etc/bind to /var/lib/named/etc/bind, creating null & random devices, fixing permissions:

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
mv /etc/bind /var/lib/named/etc
ln -s /var/lib/named/etc/bind /etc/bind
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
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind

Edit /etc/default/syslogd:

vim /etc/default/syslogd

Change it to:

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

On Lucid Lynx you need to this instead:

vi /etc/rsyslog.d/bind-chroot.conf

and add the following line so that we can still get important messages logged to the system logs:

$AddUnixListenSocket /var/lib/named/dev/log

Now edit the (problematic) bind9 apparmor profile:

vim /etc/apparmor.d/usr.sbin.named

and change marked lines

# vim:syntax=apparmor
# Last Modified: Fri Jun  1 16:43:22 2007
#include <tunables/global>

/usr/sbin/named {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  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
#These three lines for chroot environment
  /var/lib/named/etc/bind/* rw,
  /var/lib/named/var/run/bind/run/named.pid w,
  /var/lib/named/var/run/bind/named.options r,
  /var/lib/named/etc/localtime r,
  /var/lib/named/etc/bind/named.conf r,
  /var/lib/named/etc/root.hints r,
  /var/lib/named/etc/named.run rw,
  /var/lib/named/var/run/named.pid rw,
  /var/lib/named/dev/random r,
#chroot end
  /etc/bind/** r,
  /var/lib/bind/** rw,
  /var/cache/bind/** rw,

  /proc/net/if_inet6 r,
  /usr/sbin/named mr,
 # /var/run/bind/run/named.pid w,
  # support for resolvconf
 # /var/run/bind/named.options r,
}

Or use this profile:

# Last Modified: Mon Oct  6 20:46:31 2008
#include <tunables/global>
/usr/sbin/named {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/nis>

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

  /usr/sbin/named mr,
  /var/lib/named/dev/random r,
  /var/lib/named/etc/127.0.0 r,
  /var/lib/named/etc/bind/named.conf r,
  /var/lib/named/etc/bind/rndc.key r,
  /var/lib/named/etc/localhost r,
  /var/lib/named/etc/localtime r,
  /var/lib/named/etc/named.run a,
  /var/lib/named/etc/root.hints r,
  /var/lib/named/etc/sites/domingo.dk/forward.zone r,
  /var/lib/named/etc/sites/domingo.dk/reverse.zone r,
  /var/lib/named/var/run/named.pid w,
}

then restart services

/etc/init.d/sysklogd restart

/etc/init.d/apparmor start

/etc/init.d/bind9 start

howtos/bind-apparmor.txt · Last modified: d/m/Y H:i (external edit)