16.4. Δημιουργώντας και Ελέγχοντας Jails

Μερικοί διαχειριστές συστημάτων κατηγοριοποιούν τα jails σε δύο ενότητες: τα «complete (πλήρη)» jails, τα οποία μιμούνται ένα πραγματικό σύστημα FreeBSD, και τα «service» jails, τα οποία χρησιμοποιούνται για μια εφαρμογή ή υπηρεσία, που πιθανόν εκτελείται με ειδικά προνόμια. Αυτός είναι ένας νοητικός διαχωρισμός και δεν επιδρά στη διαδικασία δημιουργίας ενός jail. Η σελίδα manual του jail(8) περιέχει κατατοπιστικές πληροφορίες για τη διαδικασία δημιουργίας ενός jail:

# setenv D /here/is/the/jail
# mkdir -p $D 1
# cd /usr/src
# make buildworld 2
# make installworld DESTDIR=$D 3
# make distribution DESTDIR=$D 4
# mount -t devfs devfs $D/dev 5

1

Ο καλύτερος τρόπος για να ξεκινήσετε είναι με την επιλογή μιας θέσης (διαδρομής) για το jail σας. Εκεί θα βρίσκονται αποθηκευμένα τα αρχεία του jail όσο αφορά το σύστημα σας. Μια καλή ιδέα είναι το /usr/jail/jailname, όπου jailname το hostname με το οποίο θα αναγνωρίζεται το jail. Το σύστημα αρχείων /usr/ έχει συνήθως αρκετό χώρο για το σύστημα αρχείων του jail, το οποίο, για ένα «complete» jail είναι ουσιαστικά ένας κλώνος κάθε αρχείου του βασικού συστήματος μια προεπιλεγμένης εγκατάστασης του FreeBSD.

2

Το βήμα αυτό δεν απαιτείται αν έχετε μεταγλωττίσει στο παρελθόν το βασικό σύστημα χρησιμοποιώντας την εντολή make world ή make buildworld. Μπορείτε απλώς να εγκαταστήσετε το υπάρχον σύστημα σας στο νέο jail.

3

Η εντολή αυτή θα εμπλουτίσει τον κατάλογο που επιλέξατε για το jail με όλα τα απαραίτητα αρχεία, βιβλιοθήκες, σελίδες βοήθειας κλπ.

4

Το distribution target του make εγκαθιστά όλα τα αρχεία ρυθμίσεων που απαιτούνται. Με απλά λόγια, εγκαθιστά κάθε αρχείο από το /usr/src/etc/ στον κατάλογο /etc του περιβάλλοντος jail: $D/etc/.

5

Δε χρειάζεται να προσαρτήσετε το devfs(8) στο περιβάλλον του jail. Από την άλλη όμως, όλες, ή σχεδόν όλες οι εφαρμογές χρειάζονται πρόσβαση σε τουλάχιστον μία συσκευή, αναλόγως με τον σκοπό της εφαρμογής. Είναι πολύ σημαντικό να ελέγχεται η πρόσβαση στις συσκευές μέσα σε ένα jail, καθώς λανθασμένες ρυθμίσεις μπορεί να επιτρέψουν σε κάποιον εισβολέα να κάνει «άσχημα παιχνίδια» μέσα στο jail. Ο έλεγχος του devfs(8) γίνεται μέσω ενός συνόλου κανόνων οι οποίοι περιγράφονται στις σελίδες manual του devfs(8) και του devfs.conf(5).

Από την στιγμή που έχει εγκατασταθεί ένα jail, μπορεί να εκκινηθεί με τη χρήση της εντολής jail(8). Η jail(8) δέχεται τέσσερις υποχρεωτικές παραμέτρους οι οποίες περιγράφονται στο Τμήμα 16.3.1, «Τι Είναι Ένα Jail». Μπορείτε να δώσετε και άλλες παραμέτρους, π.χ., για να εκτελέσετε μια διεργασία στο περιβάλλον του jail με τις άδειες ενός συγκεκριμένου χρήστη. Η παράμετρος command εξαρτάται από τον τύπο του jail. Για ένα εικονικό σύστημα, το /etc/rc είναι μια καλή επιλογή, μια και στην ουσία θα κλωνοποιήσει την διαδικασία εκκίνησης ενός πραγματικού συστήματος FreeBSD. Για ένα service jail, η παράμετρος εξαρτάται από την υπηρεσία ή την εφαρμογή που θα τρέχει μέσα στο jail.

Τα jails συνήθως ξεκινούν κατά την εκκίνηση και ο μηχανισμός rc του FreeBSD παρέχει έναν εύκολο τρόπο για να γίνει κάτι τέτοιο.

  1. Η λίστα με τα jails που θέλετε να ξεκινάνε κατά την εκκίνηση θα πρέπει να προστεθούν στο αρχείο rc.conf(5):

    jail_enable="YES"   # Set to NO to disable starting of any jails
    jail_list="www"     # Space separated list of names of jails

    Σημείωση:

    Το όνομα που έχει κάθε jail στη λίστα jail_list επιτρέπεται να περιέχει μόνο αλφαριθμητικούς χαρακτήρες.

  2. Για κάθε jail που υπάρχει στο jail_list, θα πρέπει να προστεθεί μια ομάδα από ρυθμίσεις στο rc.conf(5), οι οποίες θα το περιγράφουν:

    jail_www_rootdir="/usr/jail/www"     # jail's root directory
    jail_www_hostname="www.example.org"  # jail's hostname
    jail_www_ip="192.168.0.10"           # jail's IP address
    jail_www_devfs_enable="YES"          # mount devfs in the jail
    jail_www_devfs_ruleset="www_ruleset" # devfs ruleset to apply to jail

    Η προεπιλεγμένη εκκίνηση του jail μέσω του rc.conf(5), θα ξεκινήσει το script του jail /etc/rc, το οποίο υποθέτει ότι το jail είναι ένα ολοκληρωμένο εικονικό σύστημα. Για service jails, η προεπιλεγμένη εκκίνηση πρέπει να αλλάξει, ορίζοντας κατάλληλα την επιλογή jail_jailname_exec_start.

    Σημείωση:

    Για πλήρη λίστα των διαθέσιμων επιλογών, δείτε το rc.conf(5).

Το script /etc/rc.d/jail μπορεί να χρησιμοποιηθεί για να ξεκινήσει ή να σταματήσει κάποιο jail χειροκίνητα. Πρέπει όμως να υπάρχει η αντίστοιχη καταχώρηση στο rc.conf:

# /etc/rc.d/jail start www
# /etc/rc.d/jail stop www

Για την ώρα δεν υπάρχει κάποιος απόλυτα σωστός τρόπος για να τερματίσετε κάποιο jail(8). Αυτό συμβαίνει, διότι οι εντολές που χρησιμοποιούνται συνήθως για να τερματίσουν με ασφάλεια ένα σύστημα, δεν μπορούν να χρησιμοποιηθούν μέσα στο περιβάλλον ενός jail. Ο καλύτερος τρόπος για να τερματίσετε ένα jail είναι με την εκτέλεση της ακόλουθης εντολής μέσα από το ίδιο το jail ή με χρήση του βοηθητικού προγράμματος jexec(8) έξω από αυτό:

# sh /etc/rc.shutdown

Περισσότερες πληροφορίες σχετικά με αυτή τη διαδικασία μπορείτε να βρείτε στη σελίδα βοηθείας του jail(8)

Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την <questions@FreeBSD.org>.

Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.