Hits :
2793
Jail for Apache
Chroot Apache
Στο λειτουργικό σύστημα linux μπορούμε να δημιουργήσουμε ένα ξεχωριστό
ψευδό-σύστημα αρχείων κάτω από το ήδη υπάρχον σύστημα αρχείων. Είναι δλδ
μία εικόνα του συστήματος, συνήθως μόνο με τα πολύ απαραίτητα στοιχεία.
Η δυνατότητα αυτή μας δίνει το πλεονέκτημα να μπορούμε να χρησιμοποιούμε
υπηρεσίες οι οποίες τρέχουν στο σύστημά μας αλλά μέσα στα πλαίσια του
συγκεκριμένου ψευδό-συστήματος αρχείων.
Πιο αναλυτικά το chroot ή jail περιβάλλον είναι ένας συγκεκριμένος
κατάλογος στο σύστημά μας, ο οποίος έχει τροποποιηθεί με τέτοιο τρόπο
ώστε να προσφέρει το κατάλληλο περιβάλλον για να τρέξει μία υπηρεσία.
file:apachechroot.gif
top
Εγκατάσταση της υπηρεσίας
Πριν μεταφέρουμε μία υπηρεσία σε ένα chroot περιβάλλον, χρειάζεται
φυσικά να την εγκαταστήσουμε στο σύστημά μας. Στο συγκεκριμένο παράδειγμα
θα εγκαταστήσω πολύ γενικά την τελευταία (για την ώρα) έκδοση του apache:
apache 2.2.14 οπότε και αρκετά βήματα παρακάτω μπορεί να τροποποιηθούν
ανάλογα με το πως έχουμε εγκαταστήσει την υπηρεσίας μας.
Ως διαχειριστές απλά τρέχουμε το εξής script:
#!/bin/bash
wget -c http://apache.otenet.gr/dist/httpd/httpd-2.2.14.tar.bz2
tar jxvf httpd-2.2.14.tar.bz2
cd httpd-2.2.14
./configure \
--enable-modules \
--enable-rewrite \
--enable-so \
--enable-ssl
make
make install
με αυτό τον τρόπο έχουμε εγκαταστήσει τον Web Server Apache Version 2.2.14
κάτω από τον κατάλογο /usr/local/apache2 (ο συγκεκριμένος κατάλογος
ορίζεται ως o προεπιλεγμένος κατά την βασική εγκατάσταση του apache).
top
Δημιουργία Χρήστη
Τώρα μπορούμε να δημιουργήσουμε έναν νέο ξεχωριστό χρήστη. Αυτό το
κάνουμε ώστε όταν εκκινούμε την υπηρεσία να μεταβιβάζονται τα δικαιώματα
σε αυτόν τον νέο χρήστη, που του έχουμε αφαιρέσει όλα τα υπόλοιπα
δικαιώματα, για να μην τρέχει η υπηρεσία μας με δικαιώματα διαχειριστή.
Αυτή η δυνατότητα μας προσφέρει μεγαλύτερη ακόμα ασφάλεια, καθώς εάν
κάποιος κακόβουλος χρήστης καταφέρει να αποκτήσει τον έλεγχο της υπηρεσίας
θα αποκτήσει τα δικαιώματα του συγκεκριμένου χρήστη. Αυτό γίνεται με τις εξής εντολές:
groupadd apache
useradd -c 'Apache User' -d /dev/null -g apache -s /sbin/nologin apache
Οπότε και πρέπει να τον ορίσουμε στο αρχείο ρυθμίσεων του apache.
Στο παραπάνω παράδειγμα είναι το εξής αρχείο:
/usr/local/apache2/conf/httpd.conf
Με τις παρακάτω εντολές πραγματοποιούμε τις αλλαγές που θέλουμε:
perl -p -i -e 's/User daemon/User apache/g' /usr/local/apache2/conf/httpd.conf
perl -p -i -e 's/Group daemon/Group apache/g' /usr/local/apache2/conf/httpd.conf
perl -p -i -e 's/#ServerName www.example.com:80/ServerName localhost/g' /usr/local/apache2/conf/httpd.conf
top
Shared Libraries
Σε αυτό το σημείο χρειάζεται να καταγράψουμε τα βασικά στοιχεία,
shared libraries του λειτουργικού μας συστήματος, με σκοπό να τα
μεταφέρουμε αργότερα εντός του chroot περιβάλλοντος. Για να γίνει αυτό
απλά πληκτρολογούμε την εξής εντολή:
ldd /usr/local/apache2/bin/httpd
Στο δικό μου σύστημα μου έχει βγάλει το εξής αποτέλεσμα:
Formatter "highlight/html" not found
top
Δημιουργιά chroot περιβάλλοντος
Για να δημιουργήσουμε ένα τέτοιο περιβάλλον αρχικά ορίζουμε (και
δημιουργούμε) το αρχείο σημείο που θα δηλώσουμε ως chroot περιβάλλον.
Έστω λοιπόν ο κατάλογος /chroot/ θα αναλάβει αυτόν τον ρόλο και επειδή
θέλουμε να υλοποιήσουμε τον apache δλδ έναν web server ώστε ο κατάλογος
web/ για αυτό (για τις ανάγκες του παραδείγματός μας χρειάζεται να έχουμε
δικαιώματα διαχειριστή – root)
export jail=/chroot/web
mkdir -pv $jail
Στην συνέχεια χρειάζεται – όπως αναφέραμε και παραπάνω – μία εικόνα του
συστήματος αρχείων μας κάτω από τον παραπάνω κατάλογο. Οι σημαντικοί
κατάλογοι είναι οι εξής:
Formatter "highlight/html" not found
και οι υποκατάλογοι:
Formatter "highlight/html" not found
οπότε:
mkdir -pv $jail/dev
mkdir -pv $jail/etc
mkdir -pv $jail/home
mkdir -pv $jail/lib
mkdir -pv $jail/usr/lib
mkdir -pv $jail/usr/sbin
mkdir -pv $jail/var/log
mkdir -pv $jail/var/run
top
Μεταφορά της υπηρεσίας
Τώρα είμαστε έτοιμοι να μεταφέρουμε την υπηρεσία μας εντός του chroot.
Στην παραπάνω εγκατάσταση μας όπως είδαμε ο apache βρίσκεται κάτω από το
/usr/local/apache2 οπότε και χρειάζεται να δημιουργήσουμε τον εξής
κατάλογο κάτω από το $jail. Καθώς επίσης όπως επίσης φαίνεται από τα
παραπάνω κατά την δημιουργία του χρήστη χρειάζεται να δημιουργήσουμε τον
αρχικό του κατάλογο
/dev/null. Για να γίνουν αυτά απλά πληκτρολογούμε:
mkdir -pv $jail/usr/local
mknod $jail/dev/null c 1 3
chmod 666 $jail/dev/null
groupadd apache
useradd -c 'Apache User' -d /dev/null -g apache -s /sbin/nologin apache
grep apache /etc/passwd > $jail/etc/passwd
grep apache /etc/group > $jail/etc/group
grep 127.0.0.1 /etc/hosts > $jail/etc/hosts
cp /etc/resolv.conf $jail/etc/resolv.conf
cp /etc/localtime $jail/etc/localtime
cp /etc/nsswitch.conf $jail/etc/nsswitch.conf
Με το παραπάνω έχουμε αντιγράψει και όλα τα απαραίτητα στοιχεία/αρχεία
που χρειαζόμαστε εντός του chroot περιβάλλοντος για να παίξει η υπηρεσία
μας. Και για να ολοκληρώσουμε την μεταφορά της υπηρεσίας χρειάζεται να
αντιγράψουμε τον κατάλογο
/usr/local/apache2 εντός του
$jail.
cp -rav /usr/local/apache2 $jail/usr/local/
mv /usr/local/apache2 /usr/local/apache2.old
Σημείωση: Όταν θέλουμε να δημιουργήσουμε μία συσκευή (δλδ ένα αρχείο
το οποίο αντιστοιχεί σε μία συσκευή) χρειαζόμαστε μερικές πληροφορίες για
το mknod. Όπως τον τύπο της συσκευής και τα major/minor numbers. Μία καλή
συμβουλή είναι να κοιτάς τις λεπτομέρειες του αρχείου από το ήδη υπάρχον
σύστημα. Για παράδειγμα:
ls -l /dev/null /dev/zero
crw-rw-rw- 1 root root 1, 3 2008-04-22 20:49 /dev/null
crw-rw-rw- 1 root root 1, 5 2008-06-27 10:09 /dev/zero
οπότε εάν θέλουμε να δημιουργήσουμε την συσκευή
zero πρέπει να πληκτρολογήσουμε το εξής:
mknod $jail/dev/zero c 1 5
top
Shared Libraries
Το τελικό στάδιο είναι η αντιγραφή των libraries που χρειάζονται
εντός του chroot περιβάλλοντος. Με την παραπάνω εντολή ldd που τρέξαμε
μπορούμε να βρούμε ποια είναι αυτά τα libraries και να τα προσθέσουμε
εντός του chroot καταλόγου.
Ξεκινάμε με την πιο βασική βιβλιοθήκη:
cp /lib/ld-* $jail/lib
Για να βρούμε και να αντιγράψουμε τις βιβλιοθήκες ακολουθούμε τα εξής βήματα:
a. Αναζητούμε το αρχείο με την εντολή locate
b. Αντιγράφουμε το αρχείο από τον κατάλογο /lib ή /usr/lib εντός του
lib καταλόγου κάτω από το chroot περιβάλλον.
Παράδειγμα:
$ locate libssl.so.0.9.8
/usr/lib/libssl.so.0.9.8
/usr/lib/i486/libssl.so.0.9.8
/usr/lib/i586/libssl.so.0.9.8
/usr/lib/i686/cmov/libssl.so.0.9.8
$ cp /usr/lib/libssl.so.0.9.8 $jail/lib
top
chroot web server
Αφού έχουμε αντιγράψει όλα τα αρχεία που χρειάζονται τότε το μόνο που μένει
είναι να τρέξουμε τον apache εντός του chroot καταλόγου:
chroot $jail /usr/local/apache2/bin/httpd -k start
Εάν δεν παίξει τότε χρειάζεται να κάνουμε χρήση του προγράμματος
strace
π.χ.
strace chroot $jail /usr/local/apache2/bin/httpd -k start
Και να προσθέσουμε ότι χρειάζεται.
top
Ένα πλήρες παράδειγμα
Formatter "highlight/html" not found
top
Some links
Formatter "highlight/html" not found
top