doc/el_GR.ISO8859-7/books/handbook/jails/chapter.sgml
Gabor Kovesdan 7ba98a21ad MFH
Approved by:	doceng (implicit)
2012-08-19 23:05:52 +00:00

1032 lines
43 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="ISO-8859-7" standalone="no"?>
<!--
Το Εγχειρίδιο του FreeBSD: Jails
The FreeBSD Greek Documentation Project
$FreeBSD$
%SOURCE% en_US.ISO8859-1/books/handbook/jails/chapter.sgml
%SRCID% 38826
-->
<chapter id="jails">
<chapterinfo>
<authorgroup>
<author>
<firstname>Matteo</firstname>
<surname>Riondato</surname>
<contrib>Συνεισφορά από τον </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Jails</title>
<indexterm><primary>jails</primary></indexterm>
<sect1 id="jails-synopsis">
<title>Σύνοψη</title>
<para>Το κεφάλαιο αυτό εξηγεί τι είναι τα jails (φυλακές) του &os; και
πως χρησιμοποιούνται. Τα jails, που αναφέρονται ορισμένες φορές σαν
μια ενισχυμένη εναλλακτική λύση για
<emphasis>περιβάλλοντα chroot</emphasis>, είναι ένα ισχυρό εργαλείο για
διαχειριστές συστημάτων, αλλά η βασική τους χρήση μπορεί επίσης να
είναι χρήσιμη σε προχωρημένους χρήστες.</para>
<para>Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε:</para>
<itemizedlist>
<listitem>
<para>Τι είναι ένα jail και τι σκοπό μπορεί να εξυπηρετήσει σε
εγκαταστάσεις &os;.</para>
</listitem>
<listitem>
<para>Πως να φτιάξετε, να εκκινήσετε, και να σταματήσετε ένα
jail.</para>
</listitem>
<listitem>
<para>Τα βασικά της διαχείρισης ενός jail, τόσο μέσα, όσο και έξω
από αυτό.</para>
</listitem>
</itemizedlist>
<para>Άλλες πηγές χρήσιμων πληροφοριών σχετικά με τα jails είναι:</para>
<itemizedlist>
<listitem>
<para>Η σελίδα manual του &man.jail.8;. Περιέχει πλήρη αναφορά
του βοηθητικού προγράμματος <command>jail</command> &mdash;
του διαχειριστικού εργαλείου που μπορεί να χρησιμοποιηθεί στο &os;
για την εκκίνηση, διακοπή, και έλεγχο των jails.</para>
</listitem>
<listitem>
<para>Οι λίστες ταχυδρομείου και τα αρχεία τους. Τα αρχεία από την
&a.questions; και άλλες λίστες που εξυπηρετούνται από τον
&a.mailman.lists; περιέχουν πλήρη οδηγό για τα jails. Είναι πάντοτε
ενδιαφέρον να ψάχνετε τα αρχεία ή να δημοσιεύετε νέες ερωτήσεις
στη λίστα &a.questions.name;.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="jails-terms">
<title>Όροι των Jails</title>
<para>Για να κατανοήσετε καλύτερα το πως οι εσωτερικές λειτουργίες του
&os; σχετίζονται με τα jails και πως αυτές αλληλεπιδρούν με τα υπόλοιπα
μέρη του &os;, θα χρησιμοποιήσουμε εκτενώς τους παρακάτω όρους:</para>
<variablelist>
<varlistentry>
<term>&man.chroot.8; (εντολή)</term>
<listitem>
<para>Ένα βοηθητικό πρόγραμμα, το οποίο χρησιμοποιεί την κλήση
συστήματος &man.chroot.2; του &os; για να αλλάξει
τον γονικό κατάλογο (root directory) μιας διεργασίας και όλων των
άλλων διεργασιών που εξαρτώνται από αυτή.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&man.chroot.2; (περιβάλλον)</term>
<listitem>
<para>Το περιβάλλον μια διεργασίας που τρέχει μέσα σε ένα
<quote>chroot</quote>. Αυτό περιλαμβάνει πόρους όπως το τμήμα
του συστήματος αρχείων που είναι ορατό, τα ID του χρήστη και της
ομάδας που είναι διαθέσιμα, καθώς και τις διεπαφές δικτύου
(network interfaces), τους μηχανισμούς IPC κλπ.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&man.jail.8; (εντολή)</term>
<listitem>
<para>Το πρόγραμμα που σας επιτρέπει να διαχειρίζεστε το σύστημα
σας και να ξεκινάτε διεργασίες σε περιβάλλον jail.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>host (σύστημα (system), διεργασία (process), χρήστης (user),
κλπ.)</term>
<listitem>
<para>Το φυσικό σύστημα που φιλοξενεί και ελέγχει ένα περιβάλλον
jail. Το host system έχει πρόσβαση σε όλο το διαθέσιμο υλικό,
και μπορεί να ελέγξει διεργασίες τόσο μέσα όσο και έξω από το
περιβάλλον του jail. Μία από τις σημαντικότερες διαφορές μεταξύ
του host system και του jail είναι ότι οι περιορισμοί που
εφαρμόζονται στις διεργασίες του χρήστη root μέσα στο περιβάλλον
jail, δεν ισχύουν για τις διεργασίες στο host system.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>hosted (σύστημα (system), διεργασία (process), χρήστης (user),
κλπ.)</term>
<listitem>
<para>Μια διεργασία, ένας χρήστης ή κάποια άλλη οντότητα, του
οποίου η πρόσβαση στους πόρους του συστήματος περιορίζεται μέσα
από ένα jail.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="jails-intro">
<title>Εισαγωγή</title>
<para>Μια και η διαχείριση ενός συστήματος μπορεί να είναι δύσκολη και
περίπλοκη, αναπτύχθηκαν αρκετά εργαλεία τα οποία μπορούν να κάνουν τη
ζωή ενός διαχειριστή πολύ πιο εύκολη. Τα εργαλεία αυτά προσφέρουν
κάποιες πρόσθετες δυνατότητες όσο αφορά τον τρόπο εγκατάστασης,
ρύθμισης και συντήρησης ενός συστήματος. Μια από τις εργασίες που
αναμένεται να εκτελέσει κάθε διαχειριστής συστήματος, είναι να ρυθμίσει
σωστά την ασφάλεια του συστήματος, προκειμένου να προσφέρει τις
υπηρεσίες για τις οποίες έχει προγραμματιστεί, χωρίς να επιτρέπει
συμβιβασμούς στην ασφάλεια.</para>
<para>Ένα από τα εργαλεία που μπορούν να ενισχύσουν την ασφάλεια ενός
συστήματος &os; είναι τα <emphasis>jails</emphasis>. Τα Jails
πρωτοεμφανίστηκαν στο &os;&nbsp;4.X από τον &a.phk;, αλλά βελτιώθηκαν
πολύ περισσότερο στην έκδοση &os;&nbsp;5.X, προκειμένου να προσφέρουν
περισσότερες δυνατότητες και να είναι περισσότερο ευέλικτα. Η ανάπτυξή
τους συνεχίζεται ακόμη, με βελτιώσεις στους τομείς της ευχρηστίας, της
απόδοσης, της αξιοπιστίας και της ασφάλειας που πρέπει να
παρέχουν.</para>
<sect2 id="jails-what">
<title>Τι Είναι Ένα Jail</title>
<para>Τα λειτουργικά συστήματα τύπου BSD, παρείχαν το &man.chroot.2; από
την εποχή του 4.2BSD. Η εντολή &man.chroot.8; μπορεί να
χρησιμοποιηθεί για να αλλάξει τον γονικό κατάλογο μιας ομάδας
διεργασιών, δημιουργώντας ένα ασφαλές περιβάλλον, ξεχωριστό από το
υπόλοιπο σύστημα. Όσες διεργασίες δημιουργούνται σε έναν τέτοιο
περιβάλλον, δεν έχουν πρόσβαση σε αρχεία και πόρους έξω από αυτό.
Για αυτό το λόγο, αν μια υπηρεσία τρέχει μέσα σε ένα τέτοιο
περιβάλλον, και κάποιος εισβολέας καταφέρει να διεισδύσει σε αυτή, δε
θα του επιτραπεί η πρόσβαση στο υπόλοιπο σύστημα.
Η εντολή &man.chroot.8; είναι πολύ καλή για απλές εργασίες οι οποίες
δε χρειάζονται να είναι πολύ ευέλικτες ή να διαθέτουν πολύπλοκα και
προηγμένα χαρακτηριστικά. Ωστόσο, από την αρχή της ιδέας του chroot,
βρέθηκαν αρκετοί τρόποι για να μπορέσει κάποιος να ξεφύγει από το
περιβάλλον αυτό. Παρ' όλο που έχουν διορθωθεί πολλά σφάλματα στις
πρόσφατες εκδόσεις του πυρήνα του &os;, ήταν ξεκάθαρο ότι η
&man.chroot.2; δεν ήταν η ιδανική λύση για την ασφάλιση υπηρεσιών.
Έπρεπε να υλοποιηθεί ένα νέο υποσύστημα.</para>
<para>Αυτός είναι ένας από τους κύριους λόγους για την ανάπτυξη των
<emphasis>jails</emphasis>.</para>
<para>Τα jails βελτίωσαν με διάφορους τρόπους την ιδέα του παραδοσιακού
περιβάλλοντος του &man.chroot.2;. Στο τυπικό περιβάλλον του
&man.chroot.2;, οι διεργασίες περιορίζονται μόνος ως προς το μέρος
του συστήματος αρχείων όπου μπορούν να έχουν πρόσβαση. Οι υπόλοιποι
πόροι του συστήματος (όπως οι χρήστες, οι τρέχοντες διεργασίες, το
υποσύστημα δικτύωσης) είναι κοινόχρηστοι μεταξύ των διεργασιών του
περιβάλλοντος chroot και των διεργασιών του host system. Τα jails
επεκτείνουν αυτό το μοντέλο, με την εικονικοποίηση όχι μόνο της
πρόσβασης στο σύστημα αρχείων, αλλά επίσης των χρηστών, του
υποσυστήματος δικτύωσης του πυρήνα του &os; και μερικών ακόμη
πραγμάτων. Περισσότερα για τις διαθέσιμες εντολές που μπορούν να
χρησιμοποιηθούν για τη ρύθμιση και τον έλεγχο ενός περιβάλλοντος jail
μπορείτε να βρείτε στο <xref linkend="jails-tuning"/>.</para>
<para>Το Jail έχει τέσσερα κύρια στοιχεία:</para>
<itemizedlist>
<listitem>
<para>Έναν κατάλογο με δική του δομή &mdash; το αρχικό σημείο
στο οποίο εισέρχεται ένα jail. Από τη στιγμή που μια διεργασία
βρίσκεται μέσα σε ένα jail, δεν επιτρέπεται να βγει έξω από τον
κατάλογο αυτό. Τα προβλήματα που ταλαιπωρούσαν τον σχεδιασμό του
&man.chroot.2; δεν επηρεάζουν τα jails του &os;.</para>
</listitem>
<listitem>
<para>Ένα hostname (όνομα συστήματος) &mdash; το hostname το οποίο
θα χρησιμοποιηθεί μέσα στο jail. Τα jails χρησιμοποιούνται
κυρίως για την εξυπηρέτηση δικτυακών υπηρεσιών,
επομένως η ύπαρξη ενός χαρακτηριστικού hostname που να
περιγράφει ταυτόχρονα και τη χρήση του, μπορεί να βοηθήσει αρκετά
τον διαχειριστή συστήματος.</para>
</listitem>
<listitem>
<para>Μια διεύθυνση <acronym>IP</acronym> &mdash; αυτή η διεύθυνση
αντιστοιχεί σε ένα jail και δεν μπορεί να αλλάξει κατά τη
διάρκεια της ζωής του. Η διεύθυνση IP ενός jail είναι συνήθως
μία διεύθυνση τύπου alias για μια ήδη υπάρχουσα διεπαφή δικτύου
(network interface), αλλά κάτι τέτοιο δεν είναι απαραίτητο.</para>
</listitem>
<listitem>
<para>Μία εντολή &mdash; η διαδρομή προς ένα εκτελέσιμο το οποίο θα
εκτελείται μέσα στο jail. Η διαδρομή αυτή είναι σχετική ως προς
τον γονικό κατάλογο του περιβάλλοντος του jail, και μπορεί να
διαφέρει πολύ από jail σε jail ανάλογα με το συγκεκριμένο
περιβάλλον.</para>
</listitem>
</itemizedlist>
<para>Εκτός αυτών, τα jails μπορούν να έχουν τις δικές τους ομάδες
χρηστών και τον δικό τους χρήστη <username>root</username>. Φυσικά, ο
έλεγχος που έχει ο χρήστης <username>root</username> του jail,
περιορίζεται μέσα στο περιβάλλον του jail, και από την
οπτική γωνία του host system, ο χρήστης αυτός δεν είναι παντοδύναμος.
Επιπλέον, ο χρήστης <username>root</username> του jail, δεν μπορεί
να εκτελέσει κρίσιμες εργασίες στο σύστημα έξω από το περιβάλλον του
&man.jail.8;. Περισσότερες πληροφορίες σχετικά με τις δυνατότητες και
τους περιορισμούς του <username>root</username> θα βρείτε στο
<xref linkend="jails-tuning"/>.</para>
</sect2>
</sect1>
<sect1 id="jails-build">
<title>Δημιουργώντας και Ελέγχοντας Jails</title>
<para>Μερικοί διαχειριστές συστημάτων κατηγοριοποιούν τα jails σε δύο
ενότητες: τα <quote>complete (πλήρη)</quote> jails, τα οποία μιμούνται
ένα πραγματικό σύστημα &os;, και τα <quote>service</quote> jails, τα
οποία χρησιμοποιούνται για μια εφαρμογή ή υπηρεσία, που πιθανόν
εκτελείται με ειδικά προνόμια. Αυτός είναι ένας νοητικός διαχωρισμός
και δεν επιδρά στη διαδικασία δημιουργίας ενός jail. Η σελίδα manual
του &man.jail.8; περιέχει κατατοπιστικές πληροφορίες για τη διαδικασία
δημιουργίας ενός jail:</para>
<screen>&prompt.root; <userinput>setenv D <replaceable>/here/is/the/jail</replaceable></userinput>
&prompt.root; <userinput>mkdir -p $D</userinput> <co id="jailpath"/>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildworld</userinput> <co id="jailbuildworld"/>
&prompt.root; <userinput>make installworld DESTDIR=$D</userinput> <co id="jailinstallworld"/>
&prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co id="jaildistrib"/>
&prompt.root; <userinput>mount -t devfs devfs $D/dev</userinput> <co id="jaildevfs"/></screen>
<calloutlist>
<callout arearefs="jailpath">
<para>Ο καλύτερος τρόπος για να ξεκινήσετε είναι με την επιλογή μιας
θέσης (διαδρομής) για το jail σας. Εκεί θα βρίσκονται αποθηκευμένα
τα αρχεία του jail όσο αφορά το σύστημα σας. Μια καλή ιδέα είναι
το <filename class="directory">/usr/jail/<replaceable>jailname</replaceable></filename>,
όπου <replaceable>jailname</replaceable> το hostname με το οποίο θα
αναγνωρίζεται το jail. Το σύστημα αρχείων
<filename class="directory">/usr/</filename> έχει συνήθως αρκετό
χώρο για το σύστημα αρχείων του jail, το οποίο, για ένα
<quote>complete</quote> jail είναι ουσιαστικά
ένας κλώνος κάθε αρχείου του βασικού συστήματος μια προεπιλεγμένης
εγκατάστασης του &os;.</para>
</callout>
<callout arearefs="jailbuildworld">
<para>Το βήμα αυτό δεν απαιτείται αν έχετε μεταγλωττίσει στο παρελθόν
το βασικό σύστημα χρησιμοποιώντας την εντολή
<command>make world</command> ή
<command>make buildworld</command>. Μπορείτε απλώς να
εγκαταστήσετε το υπάρχον σύστημα σας στο νέο jail.</para>
</callout>
<callout arearefs="jailinstallworld">
<para>Η εντολή αυτή θα εμπλουτίσει τον κατάλογο που επιλέξατε για το
jail με όλα τα απαραίτητα αρχεία, βιβλιοθήκες, σελίδες βοήθειας
κλπ.</para>
</callout>
<callout arearefs="jaildistrib">
<para>Το <maketarget>distribution</maketarget> target του
<application>make</application> εγκαθιστά όλα τα αρχεία ρυθμίσεων
που απαιτούνται. Με απλά λόγια, εγκαθιστά κάθε αρχείο από το
<filename class="directory">/usr/src/etc/</filename> στον κατάλογο
<filename class="directory">/etc</filename> του περιβάλλοντος
jail: <filename class="directory">$D/etc/</filename>.</para>
</callout>
<callout arearefs="jaildevfs">
<para>Δε χρειάζεται να προσαρτήσετε το &man.devfs.8; στο περιβάλλον
του jail. Από την άλλη όμως, όλες, ή σχεδόν όλες οι εφαρμογές
χρειάζονται πρόσβαση σε τουλάχιστον μία συσκευή, αναλόγως με τον
σκοπό της εφαρμογής. Είναι πολύ σημαντικό να ελέγχεται η πρόσβαση
στις συσκευές μέσα σε ένα jail, καθώς λανθασμένες ρυθμίσεις
μπορεί να επιτρέψουν σε κάποιον εισβολέα να κάνει
<quote>άσχημα παιχνίδια</quote> μέσα στο jail.
Ο έλεγχος του &man.devfs.8; γίνεται μέσω ενός συνόλου κανόνων οι
οποίοι περιγράφονται στις σελίδες manual του &man.devfs.8; και του
&man.devfs.conf.5;.</para>
</callout>
</calloutlist>
<para>Από την στιγμή που έχει εγκατασταθεί ένα jail, μπορεί να εκκινηθεί
με τη χρήση της εντολής &man.jail.8;. Η &man.jail.8; δέχεται τέσσερις
υποχρεωτικές παραμέτρους οι οποίες περιγράφονται στο
<xref linkend="jails-what"/>. Μπορείτε να δώσετε και άλλες παραμέτρους,
π.χ., για να εκτελέσετε μια διεργασία στο περιβάλλον του jail με τις
άδειες ενός συγκεκριμένου χρήστη.
Η παράμετρος <option><replaceable>command</replaceable></option>
εξαρτάται από τον τύπο του jail. Για ένα
<emphasis>εικονικό σύστημα</emphasis>, το <filename>/etc/rc</filename>
είναι μια καλή επιλογή, μια και στην ουσία θα κλωνοποιήσει
την διαδικασία εκκίνησης ενός πραγματικού συστήματος &os;. Για ένα
<emphasis>service</emphasis> jail, η παράμετρος εξαρτάται από την
υπηρεσία ή την εφαρμογή που θα τρέχει μέσα στο jail.</para>
<para>Τα jails συνήθως ξεκινούν κατά την εκκίνηση και ο μηχανισμός
<filename>rc</filename> του &os; παρέχει έναν εύκολο τρόπο για να γίνει
κάτι τέτοιο.</para>
<procedure>
<step>
<para>Η λίστα με τα jails που θέλετε να ξεκινάνε κατά την εκκίνηση θα
πρέπει να προστεθούν στο αρχείο &man.rc.conf.5;:</para>
<programlisting>jail_enable="YES" # Set to NO to disable starting of any jails
jail_list="<replaceable>www</replaceable>" # Space separated list of names of jails</programlisting>
<note>
<para>Το όνομα που έχει κάθε jail στη
λίστα <varname>jail_list</varname> επιτρέπεται να περιέχει μόνο
αλφαριθμητικούς χαρακτήρες.</para>
</note>
</step>
<step>
<para>Για κάθε jail που υπάρχει στο <varname>jail_list</varname>, θα
πρέπει να προστεθεί μια ομάδα από ρυθμίσεις στο &man.rc.conf.5;, οι
οποίες θα το περιγράφουν:</para>
<programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www" # jail's root directory
jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org" # jail's hostname
jail_<replaceable>www</replaceable>_ip="192.168.0.10" # jail's IP address
jail_<replaceable>www</replaceable>_devfs_enable="YES" # mount devfs in the jail
jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # devfs ruleset to apply to jail</programlisting>
<para>Η προεπιλεγμένη εκκίνηση του jail μέσω του
&man.rc.conf.5;, θα ξεκινήσει το script του jail
<filename>/etc/rc</filename>, το οποίο υποθέτει ότι το jail είναι
ένα ολοκληρωμένο εικονικό σύστημα. Για service jails, η
προεπιλεγμένη εκκίνηση πρέπει να αλλάξει, ορίζοντας κατάλληλα την
επιλογή <varname>jail_<replaceable>jailname</replaceable>_exec_start</varname>.</para>
<note>
<para>Για πλήρη λίστα των διαθέσιμων επιλογών, δείτε το
&man.rc.conf.5;.</para>
</note>
</step>
</procedure>
<para>Το script <filename>/etc/rc.d/jail</filename> μπορεί να
χρησιμοποιηθεί για να ξεκινήσει ή να σταματήσει κάποιο jail
χειροκίνητα. Πρέπει όμως να υπάρχει η αντίστοιχη καταχώρηση στο
<filename>rc.conf</filename>:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/jail start <replaceable>www</replaceable></userinput>
&prompt.root; <userinput>/etc/rc.d/jail stop <replaceable>www</replaceable></userinput></screen>
<para>Για την ώρα δεν υπάρχει κάποιος απόλυτα σωστός τρόπος για να
τερματίσετε κάποιο &man.jail.8;. Αυτό συμβαίνει, διότι οι εντολές
που χρησιμοποιούνται συνήθως για να τερματίσουν με ασφάλεια ένα
σύστημα, δεν μπορούν να χρησιμοποιηθούν μέσα στο περιβάλλον ενός jail.
Ο καλύτερος τρόπος για να τερματίσετε ένα jail είναι με την εκτέλεση
της ακόλουθης εντολής μέσα από το ίδιο το jail ή με χρήση του
βοηθητικού προγράμματος &man.jexec.8; έξω από αυτό:</para>
<screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>
<para>Περισσότερες πληροφορίες σχετικά με αυτή τη διαδικασία μπορείτε να
βρείτε στη σελίδα βοηθείας του &man.jail.8;</para>
</sect1>
<sect1 id="jails-tuning">
<title>Λεπτομερής Ρύθμιση και Διαχείριση</title>
<para>Υπάρχουν αρκετές επιλογές που μπορούν να εφαρμοστούν σε ένα jail,
καθώς και διάφοροι τρόποι για να συνδυαστεί ένα σύστημα &os; με jails
προκειμένου να παράγουν εφαρμογές υψηλότερου επιπέδου. Η ενότητα αυτή
παρουσιάζει:</para>
<itemizedlist>
<listitem>
<para>Μερικές από τις διαθέσιμες επιλογές για την ρύθμιση της
συμπεριφοράς και των περιορισμών ασφαλείας που υλοποιούνται από την
εγκατάσταση ενός jail.</para>
</listitem>
<listitem>
<para>Μερικές εφαρμογές υψηλού επιπέδου για τη διαχείριση jails,
οι οποίες είναι διαθέσιμες μέσω της συλλογής των Ports του &os; και
μπορούν να χρησιμοποιηθούν στην υλοποίηση ολοκληρωμένων λύσεων με
τη χρήση jails.</para>
</listitem>
</itemizedlist>
<sect2 id="jails-tuning-utilities">
<title>Εργαλεία Συστήματος του &os; για τη Ρύθμιση Jails</title>
<para>Λεπτομερής ρύθμιση ενός jail γίνεται κατά κύριο λόγο μέσω των
μεταβλητών του &man.sysctl.8;. Υπάρχει ένα ειδικό subtree του sysctl
το οποίο αποτελεί τη βάση για την οργάνωση όλων των σχετικών
επιλογών: πρόκειται για την ιεραρχία επιλογών πυρήνα
<varname>security.jail.*</varname>. Παρακάτω θα βρείτε μια λίστα με
τα κύρια sysctl που σχετίζονται με κάποιο jail καθώς και τις
προεπιλεγμένες τιμές τους. Τα ονόματα μάλλον εξηγούν από μόνα τους
την αντίστοιχη λειτουργία, αλλά για περισσότερες πληροφορίες μπορείτε
να δείτε τις σελίδες βοήθειας των &man.jail.8;
και &man.sysctl.8;.</para>
<itemizedlist>
<listitem>
<para><varname>security.jail.set_hostname_allowed: 1</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.socket_unixiproute_only: 1</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.sysvipc_allowed: 0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.enforce_statfs: 2</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.allow_raw_sockets: 0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.chflags_allowed: 0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.jailed: 0</varname></para>
</listitem>
</itemizedlist>
<para>Οι μεταβλητές αυτές μπορούν να χρησιμοποιηθούν από τον
διαχειριστή του <emphasis>host system</emphasis>
προκειμένου να προσθέσει ή να αφαιρέσει περιορισμούς οι οποίοι
υπάρχουν αρχικά στον χρήστη <username>root</username>. Υπάρχουν όμως
και κάποιοι περιορισμοί οι οποίοι δεν μπορούν να αφαιρεθούν.
Ο χρήστης <username>root</username> δεν επιτρέπεται να προσαρτά ή να
απο-προσαρτά συστήματα αρχείων μέσα από ένα &man.jail.8;. Ο
<username>root</username> μέσα σε ένα jail δεν επιτρέπεται να
φορτώσει ή να αποφορτώσει τους κανόνες (rulesets) του &man.devfs.8;,
το firewall, και διάφορες άλλες εργασίες διαχείρισης οι οποίες
χρειάζονται τροποποίηση των δεδομένων του πυρήνα, όπως για παράδειγμα
ο ορισμός του <varname>securelevel</varname> του πυρήνα.</para>
<para>Το βασικό σύστημα του &os; περιέχει τα βασικά εργαλεία για τη
προβολή πληροφοριών σχετικά με τα ενεργά jails, και επίσης για την
ανάθεση συγκεκριμένων εντολών διαχείρισης σε κάποιο jail. Οι εντολές
&man.jls.8; και &man.jexec.8; αποτελούν μέρος του βασικού συστήματος
του &os;, και μπορούν να χρησιμοποιηθούν για να τις παρακάτω απλές
εργασίες:</para>
<itemizedlist>
<listitem>
<para>Προβολή λίστας των ενεργών jails και τον αντίστοιχων
χαρακτηριστικών τους - jail identifier (<acronym>JID</acronym>),
διεύθυνση <acronym>IP</acronym>, hostname και path.</para>
</listitem>
<listitem>
<para>Προσκόλληση σε κάποιο ενεργό jail, από το host system, και
εκτέλεση κάποιας εντολής μέσα στο jail ή εκτέλεση εργασιών
διαχείρισης μέσα στο jail. Κάτι τέτοιο είναι ιδιαίτερα χρήσιμο
όταν ο χρήστης <username>root</username> επιθυμεί να τερματίσει
με ασφάλεια κάποιο jail. Μπορεί επίσης να χρησιμοποιηθεί η εντολή
&man.jexec.8; για την εκτέλεση κάποιου shell μέσα στο jail
προκειμένου να εκτελεστούν εργασίες διαχείρισης, για
παράδειγμα:</para>
<screen>&prompt.root; <userinput>jexec <replaceable>1</replaceable> tcsh</userinput></screen>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="jails-tuning-admintools">
<title>Εργαλεία Διαχείρισης Υψηλού Επιπέδου στη Συλλογή Ports
του &os;</title>
<para>Ανάμεσα στις διάφορες εφαρμογές τρίτων κατασκευαστών για τη
διαχείριση των jails, ένα από τα ποιο ολοκληρωμένα και χρήσιμα πακέτα
είναι το <filename role="package">sysutils/jailutils</filename>.
Αποτελεί ένα σύνολο μικρών εφαρμογών
οι οποίες συνεισφέρουν στη διαχείριση του &man.jail.8;. Για
περισσότερες πληροφορίες, δείτε στον δικτυακό του τόπο.</para>
</sect2>
</sect1>
<sect1 id="jails-application">
<title>Εφαρμογή των Jails</title>
<sect2 id="jails-service-jails">
<sect2info>
<authorgroup>
<author>
<firstname>Daniel</firstname>
<surname>Gerzo</surname>
<contrib>Συνεισφορά του </contrib>
<!-- 15. May 2007 -->
</author>
</authorgroup>
</sect2info>
<title>Service Jails</title>
<para>Η ενότητα αυτή είναι βασισμένη στην ιδέα που παρουσιάστηκε αρχικά
από τον &a.simon; στο <ulink
url="http://simon.nitro.dk/service-jails.html"></ulink>, καθώς και
σε ένα ανανεωμένο άρθρο του Ken Tom <email>locals@gmail.com</email>.
Στην ενότητα αυτή θα σας δείξουμε πως να στήσετε ένα σύστημα &os; το
οποίο να διαθέτει ένα επιπλέον επίπεδο ασφάλειας, με τη χρήση του
&man.jail.8;. Υποθέτουμε ότι το σύστημα τρέχει τουλάχιστον RELENG_6_0
και ότι έχετε κατανοήσει όλες τις προηγούμενες πληροφορίες του
κεφαλαίου.</para>
<sect3 id="jails-service-jails-design">
<title>Σχεδιασμός</title>
<para>Ένα από τα σημαντικότερα προβλήματα με τα jails είναι η
διαχείριση της διαδικασίας αναβαθμίσεων. Αυτό τείνει να είναι
πρόβλημα διότι το κάθε jail πρέπει να δημιουργηθεί από την αρχή σε
κάθε αναβάθμιση. Συνήθως δεν είναι πρόβλημα αν έχετε ένα μόνο jail,
μια και πρόκειται για σχετικά απλή διαδικασία, αλλά γίνεται
κουραστική και χρονοβόρα αν έχετε πολλά jails.</para>
<warning>
<para>Οι παρακάτω ρυθμίσεις προϋποθέτουν εμπειρία με το &os; και τη
χρήση των διάφορων χαρακτηριστικών του. Εάν τα παρακάτω βήματα
σας φαίνονται πολύ περίπλοκα, είναι καλύτερα να ρίξετε μια ματιά
σε κάτι ποιο απλό όπως το
<filename role="package">sysutils/ezjail</filename>, το οποίο
παρέχει έναν ευκολότερο τρόπο διαχείρισης των jails του &os; και
δεν είναι τόσο εξειδικευμένο όσο οι παρακάτω ρυθμίσεις.</para>
</warning>
<para>Η ιδέα αυτή έχει παρουσιαστεί για να λύσει τέτοιου είδους
προβλήματα, με την βοήθεια της κοινής χρήσης όσο το δυνατόν
περισσότερων αρχείων μεταξύ των jails, με έναν ασφαλή
όμως τρόπο &mdash; χρησιμοποιώντας προσαρτήσεις τύπου
&man.mount.nullfs.8; και μόνο για ανάγνωση (read only)
έτσι ώστε η αναβάθμιση να είναι ευκολότερη, και η χρήση μεμονωμένων
jails για κάθε υπηρεσία να καθίσταται επιθυμητή. Επιπλέον, παρέχει
έναν απλό τρόπο για να προσθέσετε και να αφαιρέσετε jails όπως
επίσης και να τα αναβαθμίσετε.</para>
<note>
<para>Παραδείγματα υπηρεσιών τέτοιου τύπου: ένας
<acronym>HTTP</acronym> server, ένας <acronym>DNS</acronym>
server, ένας <acronym>SMTP</acronym> server, κλπ.</para>
</note>
<para>Οι στόχοι των παρακάτω ρυθμίσεων είναι:</para>
<itemizedlist>
<listitem>
<para>Δημιουργία απλών και κατανοητών jails.
Αυτό σημαίνει ότι <emphasis>δεν</emphasis> θα τρέξουμε ένα
πλήρες installworld σε κάθε jail.</para>
</listitem>
<listitem>
<para>Εύκολη προσθήκη και διαγραφή jails.</para>
</listitem>
<listitem>
<para>Εύκολη αναβάθμιση υπαρχόντων jails.</para>
</listitem>
<listitem>
<para>Δυνατότητα δημιουργίας προσαρμοσμένου τμήματος
του &os;.</para>
</listitem>
<listitem>
<para>Όσο περισσότερη ασφάλεια είναι δυνατόν, με ελαχιστοποίηση
της πιθανότητας κακόβουλης χρήσης.</para>
</listitem>
<listitem>
<para>Εξοικονόμηση χώρου και inodes.</para>
</listitem>
</itemizedlist>
<para>Όπως έχουμε ήδη πει, ο σχεδιασμός αυτός εξαρτάται ιδιαίτερα από
την ύπαρξη ενός αρχικού template στο οποίο δεν επιτρέπεται η
εγγραφή δεδομένων (γνωστό ως <application>nullfs</application>) και
το οποίο πρέπει να έχει προσαρτηθεί σε κάθε jail, όπως επίσης και
στην ύπαρξη για κάθε jail μιας συσκευής που να επιτρέπει τόσο την
ανάγνωση όσο και την εγγραφή. Μια τέτοια συσκευή μπορεί να είναι
κάποιος ξεχωριστός φυσικός δίσκος, μια κατάτμηση, ή κάποια συσκευή
vnode &man.md.4;. Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε
προσαρτήσεις τύπου <application>nullfs</application> στις οποίες
θα επιτρέπεται εγγραφή και ανάγνωση.</para>
<para>Η δομή του συστήματος αρχείων περιγράφεται στην παρακάτω
λίστα:</para>
<itemizedlist>
<listitem>
<para>Κάθε jail θα προσαρτάται κάτω από τον κατάλογο <filename
class="directory">/home/j</filename>.</para>
</listitem>
<listitem>
<para>Το <filename class="directory">/home/j/mroot</filename>
είναι το template για το κάθε jail και η κατάτμηση μόνο
ανάγνωσης για όλα τα jails.</para>
</listitem>
<listitem>
<para>Θα δημιουργηθεί ένας κενός κατάλογος για κάθε jail κάτω
από τον κατάλογο
<filename class="directory">/home/j</filename>.</para>
</listitem>
<listitem>
<para>Κάθε jail θα έχει έναν κατάλογο
<filename class="directory">/s</filename>, ο οποίος θα είναι
σύνδεσμος προς το εγγράψιμο μέρος του συστήματος.</para>
</listitem>
<listitem>
<para>Κάθε jail θα έχει το δικό εγγράψιμο μέρος το οποίο
θα βασίζεται στο
<filename class="directory">/home/j/skel</filename>.</para>
</listitem>
<listitem>
<para>Κάθε jailspace (το εγγράψιμο μέρος κάθε jail) θα πρέπει
να δημιουργηθεί στον κατάλογο
<filename class="directory">/home/js</filename>.</para>
</listitem>
</itemizedlist>
<note>
<para>Όλα αυτά προϋποθέτουν ότι τα jails βρίσκονται κάτω από τον
κατάλογο <filename class="directory">/home</filename>. Αυτό
βέβαια μπορεί να αλλάξει σε οτιδήποτε εσείς θέλετε, αλλά θα
επηρεάσει όλα τα παρακάτω παραδείγματα.</para>
</note>
<!-- Insert an image or drawing here to illustrate the example. -->
</sect3>
<sect3 id="jails-service-jails-template">
<title>Δημιουργώντας το Template</title>
<para>Η ενότητα αυτή θα περιγράψει τα βήματα που χρειάζονται
προκειμένου να δημιουργήσετε το πρωταρχικό template το οποίο θα
περιέχει το τμήμα των jails που είναι μόνο για ανάγνωση.</para>
<para>Είναι πάντοτε καλή ιδέα να αναβαθμίζετε το &os; στη τελευταία
έκδοση -RELEASE. Για το σκοπό αυτό, διαβάστε το αντίστοιχο
<ulink url="&url.books.handbook;/makeworld.html">κεφάλαιο</ulink>
στο Εγχειρίδιο. Στη περίπτωση που η αναβάθμιση
δεν είναι εφικτή, θα χρειαστείτε buildworld για να μπορέσετε να
συνεχίσετε. Επιπλέον θα χρειαστείτε το πακέτο
<filename role="package">sysutils/cpdup</filename>. Θα
χρησιμοποιήσουμε το βοηθητικό πρόγραμμα &man.portsnap.8; για να
κατεβάσουμε τη συλλογή των Ports. Για τους νεο-εισερχόμενους,
συνίσταται η ανάγνωση του <ulink
url="&url.books.handbook;/portsnap.html">κεφαλαίου για το
Portsnap</ulink> στο Εγχειρίδιο του &os;.</para>
<procedure>
<step>
<para>Αρχικά, δημιουργήστε μια δομή καταλόγων για το σύστημα
αρχείων το οποίο θα είναι μόνο για ανάγνωση, και το οποίο θα
περιέχει τα εκτελέσιμα (binaries) του &os; για τα jails.
Στη συνέχεια πηγαίνετε στον κατάλογο όπου βρίσκονται τα αρχεία
πηγαίου κώδικα (source tree) του &os; και
εγκαταστήστε τα αντίστοιχα αρχεία στο jail template:</para>
<screen>&prompt.root; <userinput>mkdir /home/j /home/j/mroot</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot</userinput></screen>
</step>
<step>
<para>Επόμενο βήμα είναι να προετοιμάσετε τη συλλογή των Ports
του &os; για τα jails όπως επίσης και ένα &os; source tree, το
οποίο θα χρειαστεί για το
<application>mergemaster</application>:</para>
<screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
&prompt.root; <userinput>mkdir usr/ports</userinput>
&prompt.root; <userinput>portsnap -p /home/j/mroot/usr/ports fetch extract</userinput>
&prompt.root; <userinput>cpdup /usr/src /home/j/mroot/usr/src</userinput></screen>
</step>
<step>
<para>Δημιουργήστε το σκελετό για το τμήμα του συστήματος όπου
προορίζεται για ανάγνωση και εγγραφή:</para>
<screen>&prompt.root; <userinput>mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles</userinput>
&prompt.root; <userinput>mv etc /home/j/skel</userinput>
&prompt.root; <userinput>mv usr/local /home/j/skel/usr-local</userinput>
&prompt.root; <userinput>mv tmp /home/j/skel</userinput>
&prompt.root; <userinput>mv var /home/j/skel</userinput>
&prompt.root; <userinput>mv root /home/j/skel</userinput></screen>
</step>
<step>
<para>Χρησιμοποιήστε το <application>mergemaster</application>
για να εγκαταστήσετε τα αρχεία ρυθμίσεων που λείπουν. Στη
συνέχεια διαγράψτε όλους τους έξτρα καταλόγους
που δημιουργεί το <application>mergemaster</application>:</para>
<screen>&prompt.root; <userinput>mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i</userinput>
&prompt.root; <userinput>cd /home/j/skel</userinput>
&prompt.root; <userinput>rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev</userinput></screen>
</step>
<step>
<para>Τώρα, δημιουργήστε συνδέσμους από το σύστημα αρχείων στο
οποίο επιτρέπεται η εγγραφή, προς το σύστημα αρχείων που είναι
μόνο για ανάγνωση. Βεβαιωθείτε ότι οι σύνδεσμοι έχουν
δημιουργηθεί στις σωστές θέσεις <filename
class="directory">s/</filename>. Η ύπαρξη πραγματικών
καταλόγων ή η δημιουργία καταλόγων σε λάθος θέσεις θα οδηγήσουν
την εγκατάσταση σε αποτυχία.</para>
<screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
&prompt.root; <userinput>mkdir s</userinput>
&prompt.root; <userinput>ln -s s/etc etc</userinput>
&prompt.root; <userinput>ln -s s/home home</userinput>
&prompt.root; <userinput>ln -s s/root root</userinput>
&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
&prompt.root; <userinput>ln -s ../../s/distfiles usr/ports/distfiles</userinput>
&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
&prompt.root; <userinput>ln -s s/var var</userinput></screen>
</step>
<step>
<para>Σαν τελευταίο βήμα, δημιουργήστε ένα γενικό αρχείο
<filename>/home/j/skel/etc/make.conf</filename> με τα παρακάτω
δεδομένα:</para>
<programlisting>WRKDIRPREFIX?= /s/portbuild</programlisting>
<para>Έχοντας ορίσει το <literal>WRKDIRPREFIX</literal> με
αυτόν τον τρόπο, θα μπορείτε να μεταγλωττίσετε ports του &os;
μέσα σε κάθε jail. Θυμηθείτε ότι ο κατάλογος των ports είναι
μέρος του συστήματος αρχείων που έχει προσαρτηθεί μόνο για
ανάγνωση. Η προσαρμοσμένη διαδρομή για το
<literal>WRKDIRPREFIX</literal> επιτρέπει την μεταγλώττιση
των ports στο εγγράψιμο μέρος του κάθε jail.</para>
</step>
</procedure>
</sect3>
<sect3 id="jails-service-jails-creating">
<title>Δημιουργώντας Jails</title>
<para>Τώρα που έχουμε ένα ολοκληρωμένο &os; jail template, μπορούμε να
εγκαταστήσουμε και να ρυθμίσουμε τα jails στο
<filename>/etc/rc.conf</filename>. Το παράδειγμα αυτό δείχνει
τη δημιουργία τριών jails: <quote>NS</quote>,
<quote>MAIL</quote> και <quote>WWW</quote>.</para>
<procedure>
<step>
<para>Εισάγετε τις παρακάτω γραμμές στο αρχείο
<filename>/etc/fstab</filename>, ώστε το μόνο για ανάγνωση
template για τα jails και ο εγγράψιμος χώρος
να είναι διαθέσιμα στα αντίστοιχα jails:</para>
<programlisting>/home/j/mroot /home/j/ns nullfs ro 0 0
/home/j/mroot /home/j/mail nullfs ro 0 0
/home/j/mroot /home/j/www nullfs ro 0 0
/home/js/ns /home/j/ns/s nullfs rw 0 0
/home/js/mail /home/j/mail/s nullfs rw 0 0
/home/js/www /home/j/www/s nullfs rw 0 0</programlisting>
<note>
<para>Οι κατατμήσεις που είναι σημειωμένες με 0 pass number δεν
ελέγχονται κατά την εκκίνηση από το &man.fsck.8;, ενώ για τις
κατατμήσεις με 0 dump number, η &man.dump.8; δεν θα
δημιουργεί αντίγραφα ασφαλείας. Προφανώς, δεν θέλουμε το
<application>fsck</application> να ελέγχει τις προσαρτήσεις
τύπου <application>nullfs</application>, ούτε και το
<application>dump</application> να κρατά αντίγραφα από τα
μόνο για ανάγνωση nullfs συστήματα αρχείων των jails. Αυτός
είναι και ο λόγος που βάλαμε <quote>0&nbsp;0</quote> στις δύο
τελευταίες στήλες κάθε εγγραφής του
<filename>fstab</filename>.</para>
</note>
</step>
<step>
<para>Ρυθμίστε τα jails στο
<filename>/etc/rc.conf</filename>:</para>
<programlisting>jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/home/j/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/home/j/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="62.123.43.14"
jail_www_rootdir="/home/j/www"
jail_www_devfs_enable="YES"</programlisting>
<warning>
<para>Ο λόγος για τον οποίο θέτουμε τη μεταβλητή
<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
να δείχνει στο
<filename class="directory">/usr/home</filename>
αντί για το <filename class="directory">/home</filename>
είναι ότι η φυσική διαδρομή για τον κατάλογο
<filename class="directory">/home </filename> σε μια τυπική
εγκατάσταση του &os; είναι το
<filename class="directory">/usr/home</filename>. Η μεταβλητή
<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
<emphasis>δεν</emphasis> δεν πρέπει να δείχνει προς διαδρομή
που περιλαμβάνει συμβολικό δεσμό, διαφορετικά τα jails θα
αρνηθούν να ξεκινήσουν. Χρησιμοποιήστε το βοηθητικό πρόγραμμα
&man.realpath.1; για να προσδιορίσετε την τιμή που θα πρέπει
να λάβει αυτή η μεταβλητή. Δείτε το &os;-SA-07:01.jail
Security Advisory για περισσότερες πληροφορίες.</para>
</warning>
</step>
<step>
<para>Δημιουργήστε τα απαραίτητα σημεία προσαρτήσεων για το
σύστημα αρχείων μόνο ανάγνωσης του κάθε jail:</para>
<screen>&prompt.root; <userinput>mkdir /home/j/ns /home/j/mail /home/j/www</userinput></screen>
</step>
<step>
<para>Εγκαταστήστε το εγγράψιμο template μέσα στο κάθε jail.
Προσέξτε εδώ τη χρήση του
<filename role="package">sysutils/cpdup</filename>, το οποίο
επιβεβαιώνει ότι δημιουργείται το σωστό αντίγραφο του κάθε
καταλόγου:</para>
<!-- keramida: Why is cpdup required here? Doesn't cpio(1)
already include adequate functionality for performing this
job *and* have the advantage of being part of the base
system of FreeBSD? -->
<screen>&prompt.root; <userinput>mkdir /home/js</userinput>
&prompt.root; <userinput>cpdup /home/j/skel /home/js/ns</userinput>
&prompt.root; <userinput>cpdup /home/j/skel /home/js/mail</userinput>
&prompt.root; <userinput>cpdup /home/j/skel /home/js/www</userinput></screen>
</step>
<step>
<para>Σε αυτή τη φάση, τα jails έχουν δημιουργηθεί και είναι
έτοιμα να ξεκινήσουν. Προσαρτήστε το σωστό σύστημα αρχείων
για το κάθε jail, και στη συνέχεια εκκινήστε τα,
χρησιμοποιώντας το script
<filename>/etc/rc.d/jail</filename>:</para>
<screen>&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
</step>
</procedure>
<para>Τα jails θα πρέπει τώρα να εκτελούνται κανονικά. Γα να ελέγξετε
αν έχουν ξεκινήσει σωστά, χρησιμοποιείστε την εντολή &man.jls.8;.
Θα πρέπει να δείτε κάτι αντίστοιχο με το παρακάτω:</para>
<screen>&prompt.root; <userinput>jls</userinput>
JID IP Address Hostname Path
3 192.168.3.17 ns.example.org /home/j/ns
2 192.168.3.18 mail.example.org /home/j/mail
1 62.123.43.14 www.example.org /home/j/www</screen>
<para>Σε αυτό το σημείο, θα πρέπει να μπορείτε να συνδεθείτε σε κάθε
jail, να προσθέσετε νέους χρήστες ή να ρυθμίσετε υπηρεσίες. Η στήλη
<literal>JID</literal> δηλώνει το χαρακτηριστικό αναγνωριστικό
αριθμό κάθε ενεργού jail. Χρησιμοποιήστε την παρακάτω εντολή
προκειμένου να εκτελέσετε εργασίες διαχείρισης του jail, με
<literal>JID</literal> 3:</para>
<screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen>
</sect3>
<sect3 id="jails-service-jails-upgrading">
<title>Αναβάθμιση</title>
<para>Κάποια στιγμή, θα χρειαστεί να αναβαθμίσετε το σύστημά σας σε
μια νέα έκδοση του &os;, είτε για λόγους ασφάλειας, είτε γιατί
υπάρχουν νέες δυνατότητες στην νεώτερη έκδοση οι οποίες είναι
χρήσιμες για τα jails που ήδη έχετε. Ο τρόπος που χρησιμοποιήσαμε
για την δημιουργία των jails, επιτρέπει την εύκολη αναβάθμιση τους.
Επιπλέον, ελαχιστοποιεί το χρόνο διακοπής της λειτουργίας τους, μια
και θα χρειαστεί να τα σταματήσετε μόνο κατά τα λίγα τελευταία
λεπτά. Επίσης, παρέχει έναν τρόπο να επιστρέψετε σε παλαιότερες
εκδόσεις εάν προκύψουν οποιαδήποτε σφάλματα.</para>
<procedure>
<step>
<para>Το πρώτο βήμα είναι να αναβαθμίσετε το σύστημα στο οποίο
φιλοξενούνται τα jails, με το συνήθη τρόπο. Στη συνέχεια
δημιουργήστε ένα νέο προσωρινό template κατάλογο, μόνο για
ανάγνωση, στο
<filename class="directory">/home/j/mroot2</filename>.</para>
<screen>&prompt.root; <userinput>mkdir /home/j/mroot2</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot2</userinput>
&prompt.root; <userinput>cd /home/j/mroot2</userinput>
&prompt.root; <userinput>cpdup /usr/src usr/src</userinput>
&prompt.root; <userinput>mkdir s</userinput></screen>
<para>Το <maketarget>installworld</maketarget> δημιουργεί
μερικούς καταλόγους που δε χρειάζονται, και θα πρέπει
να διαγραφούν:</para>
<screen>&prompt.root; <userinput>chflags -R 0 var</userinput>
&prompt.root; <userinput>rm -R etc var root usr/local tmp</userinput></screen>
</step>
<step>
<para>Δημιουργήστε ξανά τους συνδέσμους για το σύστημα αρχείων
ανάγνωσης - εγγραφής:</para>
<screen>&prompt.root; <userinput>ln -s s/etc etc</userinput>
&prompt.root; <userinput>ln -s s/root root</userinput>
&prompt.root; <userinput>ln -s s/home home</userinput>
&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
&prompt.root; <userinput>ln -s s/var var</userinput></screen>
</step>
<step>
<para>Τώρα είναι η σωστή στιγμή για να σταματήσετε τα
jails:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/jail stop</userinput></screen>
</step>
<step>
<para>Αποπροσαρτήστε τα αρχικά συστήματα αρχείων:</para>
<!-- keramida: Shouldn't we suggest a short script-based
loop here, instead of tediously copying the same commands
multiple times? -->
<screen>&prompt.root; <userinput>umount /home/j/ns/s</userinput>
&prompt.root; <userinput>umount /home/j/ns</userinput>
&prompt.root; <userinput>umount /home/j/mail/s</userinput>
&prompt.root; <userinput>umount /home/j/mail</userinput>
&prompt.root; <userinput>umount /home/j/www/s</userinput>
&prompt.root; <userinput>umount /home/j/www</userinput></screen>
<note>
<para>Τα συστήματα αρχείων ανάγνωσης - εγγραφής είναι
προσαρτημένα στο σύστημα αρχείων μόνο ανάγνωσης
(<filename class="directory">/s</filename>) και πρέπει να
είναι τα πρώτα που θα αποπροσαρτηθούν.</para>
</note>
</step>
<step>
<para>Μετακινήστε τον παλιό μόνο για ανάγνωση κατάλογο, και
αντικαταστήστε τον με τον καινούργιο. Ο παλιός θα παραμείνει ως
αντίγραφο ασφαλείας του παλιού συστήματος σε περίπτωση
προβλήματος. Ο τρόπος ονομασίας που ακολουθήσαμε εδώ
αντιστοιχεί στη χρονική στιγμή δημιουργίας του νέου συστήματος
αρχείων μόνο ανάγνωσης. Μετακινήστε την αρχική συλλογή των
Ports του &os; στο νέο σύστημα, αρχείων προκειμένου να
εξοικονομήσετε χώρο και inodes:</para>
<screen>&prompt.root; <userinput>cd /home/j</userinput>
&prompt.root; <userinput>mv mroot mroot.20060601</userinput>
&prompt.root; <userinput>mv mroot2 mroot</userinput>
&prompt.root; <userinput>mv mroot.20060601/usr/ports mroot/usr</userinput></screen>
</step>
<step>
<para>Σε αυτό το σημείο το μόνο για ανάγνωση template είναι
έτοιμο, οπότε το μόνο που απομένει είναι να προσαρτήσετε ξανά
τα συστήματα αρχείων και να ξεκινήσετε τα jails:</para>
<screen>&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
</step>
</procedure>
<para>Χρησιμοποιείτε την εντολή &man.jls.8; για να ελέγξετε εάν τα
jails ξεκίνησαν σωστά. Μην ξεχάσετε να εκτελέσετε το mergemaster
για το κάθε jail. Θα χρειαστεί να αναβαθμίσετε τόσο τα αρχεία
ρυθμίσεων, όσο και τα rc.d scripts.</para>
</sect3>
</sect2>
</sect1>
</chapter>