1032 lines
43 KiB
XML
1032 lines
43 KiB
XML
<?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> —
|
||
του διαχειριστικού εργαλείου που μπορεί να χρησιμοποιηθεί στο &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; 4.X από τον &a.phk;, αλλά βελτιώθηκαν
|
||
πολύ περισσότερο στην έκδοση &os; 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>Έναν κατάλογο με δική του δομή — το αρχικό σημείο
|
||
στο οποίο εισέρχεται ένα jail. Από τη στιγμή που μια διεργασία
|
||
βρίσκεται μέσα σε ένα jail, δεν επιτρέπεται να βγει έξω από τον
|
||
κατάλογο αυτό. Τα προβλήματα που ταλαιπωρούσαν τον σχεδιασμό του
|
||
&man.chroot.2; δεν επηρεάζουν τα jails του &os;.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Ένα hostname (όνομα συστήματος) — το hostname το οποίο
|
||
θα χρησιμοποιηθεί μέσα στο jail. Τα jails χρησιμοποιούνται
|
||
κυρίως για την εξυπηρέτηση δικτυακών υπηρεσιών,
|
||
επομένως η ύπαρξη ενός χαρακτηριστικού hostname που να
|
||
περιγράφει ταυτόχρονα και τη χρήση του, μπορεί να βοηθήσει αρκετά
|
||
τον διαχειριστή συστήματος.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Μια διεύθυνση <acronym>IP</acronym> — αυτή η διεύθυνση
|
||
αντιστοιχεί σε ένα jail και δεν μπορεί να αλλάξει κατά τη
|
||
διάρκεια της ζωής του. Η διεύθυνση IP ενός jail είναι συνήθως
|
||
μία διεύθυνση τύπου alias για μια ήδη υπάρχουσα διεπαφή δικτύου
|
||
(network interface), αλλά κάτι τέτοιο δεν είναι απαραίτητο.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Μία εντολή — η διαδρομή προς ένα εκτελέσιμο το οποίο θα
|
||
εκτελείται μέσα στο 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, με έναν ασφαλή
|
||
όμως τρόπο — χρησιμοποιώντας προσαρτήσεις τύπου
|
||
&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 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>
|