{{anchor href="top"}}
Hits : **{{hits}}**
== Jail for Bind ==
{{ToC from="h2" to="h3"}}
=== Chroot Bind ===
Για περισσότερα ρίξτε μια ματιά στο ((chroothttpd))
file:dnschroot.gif
Το πρόγραμμα bind (ακρονύμιο του Berkeley Internet Name Domain) είναι ένα από πιο δημοφιλή
και πολύ-χρησιμοποιημένα προγράμματα γύρω από το DNS στο διαδίκτυο. Αποτελεί πλέον προϊόν
του οργανισμού ISC. Για την έκδοση 9 (bind v9) έχουν ξαναγραφτεί αρκετά τμήματα κώδικα τα
οποία είχαν προβλήματα σχετικά με την αρχιτεκτονική του bind σε προηγούμενες εκδόσεις. Ένα
χαρακτηριστικό το οποίο έχει προστεθεί είναι η δυνατότητα να τρέχει σε BIND περιβάλλον. Έχει
υλοποιηθεί τμήμα κώδικα που και ΔΕΝ χρειάζεται να ακολουθήσουμε την διαδικασία που κάναμε
στο chroothttpd.
Ένας πολύ ενδιαφέρον πίνακας : https://www.isc.org/security-report/
((#top))
-----------
=== Εγκατάσταση της υπηρεσίας ===
Σκοπός είναι να δημιουργήσουμε ένα jail περιβάλλον για να μπορεί να τρέξει το bind εντός chroot
χωρίς όμως να τροποποιήσουμε κατά πολύ το σύστημά μας ή να κάνουμε πολλές αλλαγές. Ακόμα να μας
δίνεται η δυνατότητα να μπορούμε να αναβαθμίσουμε την υπηρεσία μας χωρίς όμως να πραγματοποιούμε
αλλάγες στο σύστημά μας.
Επειδή μου αρέσει πολύ να χρησιμοποιώ scripts για κάθε δουλειά, το ίδιο κάνω και εδώ:
%%(html)
#!/bin/bash
BIND=/opt/bind_950_P1
wget -c http://ftp.isc.org/isc/bind9/9.5.0-P1/bind-9.5.0-P1.tar.gz
tar zxvf bind-9.5.0-P1.tar.gz
cd bind-9.5.0-P1
./configure \
--prefix=$BIND \
--enable-threads \
--disable-ipv6
make
make install
/usr/bin/strip $BIND/bin/*
/usr/bin/strip $BIND/sbin/*
%%
((#top))
-----------
=== Δημιουργία Χρήστη ===
Πριν συνεχίσουμε χρειάζεται να δημιουργήσουμε την ομάδα και τον χρήστη, στον οποία θα
μεταβιβάζουμε τα δικαιώματα του bind κατά την εκκίνησή του μέσα στο BIND περιβάλλον.
Με αυτό τον τρόπο εάν κάποιος αποκτήσει δικαιώματα στο bind μέσω κάποιου κενού ασφαλείας
να ΜΗΝ πάρει τα δικαιώματα του διαχειριστή αλλά του παρακάτω χρήστη:
%%(code)
groupadd -f named
useradd -c 'Bind User' -d /dev/null -g named -s /bin/false named
%%
((#top))
-----------
=== Δημιουργία Καταλόγων ===
Αυτή την στιγμή είμαστε σε θέση να δημιουργήσουμε όλα τα απαραίτητα αρχεία και καταλόγους
για να το jail περιβάλλον μας. Οπότε και δημιουργούμε τα εξής:
%%(code)
mkdir -pv $BIND/etc
mkdir -pv $BIND/dev
mkdir -pv $BIND/var/run
mkdir -pv $BIND/var/log
mkdir -pv $BIND/var/namedb
%%
((#top))
-----------
=== Δημιουργία συσκευών ===
Αυτή την στιγμή έχουμε δημιουργήσει τους καταλόγους, οπότε και προχωρούμε τις
απαραίτητες συσκευές:
%%(code)
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 :
%%(code)
perl -p -i -e 's/^SYSLOGD=""$/SYSLOGD="\-a \/opt\/bind_950_P1\/dev\/log"/g' /etc/default/syslogd
/etc/init.d/sysklogd restart
%%
((#top))
-----------
=== Αντιγραφή αρχείων ===
Τώρα μπορούμε να αντιγράψουμε όλα τα απαραίτητα αρχεία που χρειαζόμαστε ενός jail περιβάλλον.
Τα παρακάτω αρχεία είναι τα αρχεία ρυθμίσεων του chroot περιβάλλον για το bind:
%%(code)
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:
%%(code)
cd $BIND/var/namedb/
wget -c ftp://ftp.internic.net/domain/db.cache
%%
((#top))
-----------
=== Δημιουργία αρχείου named.conf ===
Εν συνεχεία χρειάζεται να δημιουργήσουμε το named.conf.
Για να μπορούμε να κάνουμε χρήση του bind μέσω του rndc:
%%(code)
$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
%%
((#top))
-----------
=== Αλλαγή δικαιωμάτων ===
Τώρα είμαστε σε θέση να τροποποιήσουμε τα δικαιώματα των αρχείων
ρυθμίσεων του bind, δίνοντας την δικαιοδοσία στον χρήστη named:
%%(code)
chown named.named $BIND/etc/rndc.conf $BIND/etc/named.conf
chown -R named.named $BIND/var/
%%
((#top))
-----------
# $BIND/sbin/named -g -u named -t $BIND
# $BIND/sbin/named -g -u named
=== Named.conf ===
**named.conf**
Για να ολοκληρώσουμε την διαδικασία και να μπορεί το bind να τρέχει εντός
του jail περιβάλλον χρειάζεται να προσθέσουμε στο τέλος του αρχείου named.conf
τα παρακάτω:
%%(code)
# 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;
};
%%
((#top))
-----------
=== Εκκίνηση named ===
Και σε αυτό το σημείο απλά χρειάζεται να εκκινήσουμε το bind:
Πριν εκκινήσουμε το bind κανονικά θα το ξεκινήσουμε το option **-g**
ώστε να δούμε μήπως μας χτυπήσει πουθενά:
%%(code)
$BIND/sbin/named -g -t $BIND -c /etc/named.conf -u named
%%
εάν όλα πάνε καλά τότε απλά:
%%(code)
$BIND/sbin/named -t $BIND -c /etc/named.conf -u named
%%
Και ελέγχουμε με την εντολή:
%%(code)
ps -ef | grep -i na[m]ed
%%
((#top))
-----------