Jail for Bind
Contents
Chroot Bind
Για περισσότερα ρίξτε μια ματιά στο chroothttpd?
file:dnschroot.gif
Το πρόγραμμα bind (ακρονύμιο του Berkeley Internet Name Domain) είναι ένα από πιο δημοφιλή
και πολύ-χρησιμοποιημένα προγράμματα γύρω από το DNS στο διαδίκτυο. Αποτελεί πλέον προϊόν
του οργανισμού ISC. Για την έκδοση 9 (bind v9) έχουν ξαναγραφτεί αρκετά τμήματα κώδικα τα
οποία είχαν προβλήματα σχετικά με την αρχιτεκτονική του bind σε προηγούμενες εκδόσεις. Ένα
χαρακτηριστικό το οποίο έχει προστεθεί είναι η δυνατότητα να τρέχει σε BIND περιβάλλον. Έχει
υλοποιηθεί τμήμα κώδικα που και ΔΕΝ χρειάζεται να ακολουθήσουμε την διαδικασία που κάναμε
στο chroothttpd.
Ένας πολύ ενδιαφέρον πίνακας : http://www.isc.org/index.pl?/s[..]-security.php#matrix
Εγκατάσταση της υπηρεσίας
Σκοπός είναι να δημιουργήσουμε ένα jail περιβάλλον για να μπορεί να τρέξει το bind εντός chroot
χωρίς όμως να τροποποιήσουμε κατά πολύ το σύστημά μας ή να κάνουμε πολλές αλλαγές. Ακόμα να μας
δίνεται η δυνατότητα να μπορούμε να αναβαθμίσουμε την υπηρεσία μας χωρίς όμως να πραγματοποιούμε
αλλάγες στο σύστημά μας.
Επειδή μου αρέσει πολύ να χρησιμοποιώ scripts για κάθε δουλειά, το ίδιο κάνω και εδώ:
Formatter "highlight/html" not found
Δημιουργία Χρήστη
Πριν συνεχίσουμε χρειάζεται να δημιουργήσουμε την ομάδα και τον χρήστη, στον οποία θα
μεταβιβάζουμε τα δικαιώματα του bind κατά την εκκίνησή του μέσα στο BIND περιβάλλον.
Με αυτό τον τρόπο εάν κάποιος αποκτήσει δικαιώματα στο bind μέσω κάποιου κενού ασφαλείας
να ΜΗΝ πάρει τα δικαιώματα του διαχειριστή αλλά του παρακάτω χρήστη:
groupadd -f named useradd -c 'Bind User' -d /dev/null -g named -s /bin/false named
Δημιουργία Καταλόγων
Αυτή την στιγμή είμαστε σε θέση να δημιουργήσουμε όλα τα απαραίτητα αρχεία και καταλόγους
για να το jail περιβάλλον μας. Οπότε και δημιουργούμε τα εξής:
mkdir -pv $BIND/etc mkdir -pv $BIND/dev mkdir -pv $BIND/var/run mkdir -pv $BIND/var/log mkdir -pv $BIND/var/namedb
Δημιουργία συσκευών
Αυτή την στιγμή έχουμε δημιουργήσει τους καταλόγους, οπότε και προχωρούμε τις
απαραίτητες συσκευές:
mknod $BIND/dev/null c 1 3 mknod $BIND/dev/zero c 1 5 mknod $BIND/dev/random c 1 8 chmod 666 $BIND/dev/*
Σε αυτό το σημείο χρειάζεται να κάνουμε μία αλλαγή στο αρχείο ρυθμίσεων
του προγράμματος syslog daemon /etc/default/syslogd ώστε να μπορεί
το πρόγραμμα bind να καταγράφει μέσω της συσκευής /dev/log :
perl -p -i -e 's/^SYSLOGD=""$/SYSLOGD="\-a \/opt\/bind_950_P1\/dev\/log"/g' /etc/default/syslogd /etc/init.d/sysklogd restart
Αντιγραφή αρχείων
Τώρα μπορούμε να αντιγράψουμε όλα τα απαραίτητα αρχεία που χρειαζόμαστε ενός jail περιβάλλον.
Τα παρακάτω αρχεία είναι τα αρχεία ρυθμίσεων του chroot περιβάλλον για το bind:
grep named /etc/group > $BIND/etc/group grep named /etc/passwd > $BIND/etc/passwd grep 127.0.0.1 /etc/hosts > $BIND/etc/hosts cp /etc/resolv.conf $BIND/etc/resolv.conf cp /etc/localtime $BIND/etc/localtime cp /etc/nsswitch.conf $BIND/etc/nsswitch.conf
Μετά από όλα αυτά χρειάζεται να αντιγράψουμε το αρχείο db.cache για να ορίσουμε
την ρίζα των dns:
cd $BIND/var/namedb/ wget -c ftp://ftp.internic.net/domain/db.cache
Δημιουργία αρχείου named.conf
Εν συνεχεία χρειάζεται να δημιουργήσουμε το named.conf.
Για να μπορούμε να κάνουμε χρήση του bind μέσω του rndc:
$BIND/sbin/rndc-confgen -b 512 > $BIND/etc/rndc.conf tail $BIND/etc/rndc.conf | head -9 | sed -e 's/# //g' > $BIND/etc/named.conf
Αλλαγή δικαιωμάτων
Τώρα είμαστε σε θέση να τροποποιήσουμε τα δικαιώματα των αρχείων
ρυθμίσεων του bind, δίνοντας την δικαιοδοσία στον χρήστη named:
chown named.named $BIND/etc/rndc.conf $BIND/etc/named.conf chown -R named.named $BIND/var/
# $BIND/sbin/named -g -u named -t $BIND
# $BIND/sbin/named -g -u named
Named.conf
named.conf
Για να ολοκληρώσουμε την διαδικασία και να μπορεί το bind να τρέχει εντός
του jail περιβάλλον χρειάζεται να προσθέσουμε στο τέλος του αρχείου named.conf
τα παρακάτω:
# options options { pid-file "/var/run/named.pid"; }; # db.cache - root name server zone "." IN { type hint; file "/var/namedb/db.cache"; }; # logging logging { channel my_log { file "/var/log/named.log"; severity dynamic; print-time yes; print-severity yes; print-category yes; }; category default { my_log; }; }; # forward zone "otenet.gr" { type forward; forwarders { 195.170.0.1; }; forward only; };
Εκκίνηση named
Και σε αυτό το σημείο απλά χρειάζεται να εκκινήσουμε το bind:
Πριν εκκινήσουμε το bind κανονικά θα το ξεκινήσουμε το option -g
ώστε να δούμε μήπως μας χτυπήσει πουθενά:
$BIND/sbin/named -g -t $BIND -c /etc/named.conf -u named
εάν όλα πάνε καλά τότε απλά:
$BIND/sbin/named -t $BIND -c /etc/named.conf -u named
Και ελέγχουμε με την εντολή:
ps -ef | grep -i na[m]ed