16.4. Δημιουργώντας και Ελέγχοντας Jails
Προηγ | Κεφάλαιο 16. Jails | Επόμενο

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

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

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

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

| Το βήμα αυτό δεν απαιτείται αν έχετε μεταγλωττίσει στο παρελθόν το βασικό σύστημα χρησιμοποιώντας την εντολή `make world` ή `make buildworld`. Μπορείτε απλώς να εγκαταστήσετε το υπάρχον σύστημα σας στο νέο jail.
| Η εντολή αυτή θα εμπλουτίσει τον κατάλογο που επιλέξατε για το jail με όλα τα απαραίτητα αρχεία, βιβλιοθήκες, σελίδες βοήθειας κλπ.
| Το `distribution` target του make εγκαθιστά όλα τα αρχεία ρυθμίσεων που απαιτούνται. Με απλά λόγια, εγκαθιστά κάθε αρχείο από το `/usr/src/etc/` στον κατάλογο `/etc` του περιβάλλοντος jail: `$D/etc/`.

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

Από την στιγμή που έχει εγκατασταθεί ένα jail, μπορεί να εκκινηθεί με τη χρήση της εντολής jail(8). Η jail(8) δέχεται τέσσερις υποχρεωτικές παραμέτρους οι οποίες περιγράφονται στο Τμήμα 16.3.1, &#x201C;Τι Είναι Ένα Jail&#x201D;. Μπορείτε να δώσετε και άλλες παραμέτρους, π.χ., για να εκτελέσετε μια διεργασία στο περιβάλλον του 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)

Προηγ | Πάνω | Επόμενο
16.3. Εισαγωγή | Αρχή | 16.5. Λεπτομερής Ρύθμιση και Διαχείριση

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

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