Εγχειρίδιο του FreeBSD
Προηγ | Κεφάλαιο 13 Χρήστες και Βασική Διαχείριση Λογαριασμών | Επόμενο

# 13.7 Περιορίζοντας Χρήστες

Αν έχετε χρήστες, ίσως έχετε σκεφτεί να περιορίσετε την δυνατότητα χρήσης του συστήματος από αυτούς. Το FreeBSD παρέχει στο διαχειριστή αρκετούς τρόπους για να περιορίσει τους πόρους του συστήματος που μπορεί να χρησιμοποιήσει ένα άτομο. Αυτά τα όρια χωρίζονται σε δύο τμήματα: μερίδια δίσκου (disk quotas), και άλλα όρια πόρων.

Τα μερίδια δίσκου περιορίζουν την χρήση των δίσκων στους χρήστες, και παρέχουν έναν τρόπο γρήγορου ελέγχου αυτής της χρήσης χωρίς να υπολογίζονται από την αρχή κάθε φορά. Τα μερίδια συζητούνται στο Τμήμα 18.15.

Τα άλλα όρια πόρων περιλαμβάνουν τρόπους για περιορισμό χρήσης της CPU, της μνήμης, και άλλων πόρων που μπορεί να καταναλώσει ένα χρήστης. Τα όρια αυτά καθορίζονται χρησιμοποιώντας κλάσεις σύνδεσης και συζητούνται εδώ.

Οι κλάσεις σύνδεσης καθορίζονται στο `/etc/login.conf`. Οι ακριβείς έννοιες είναι πέρα από τον σκοπό αυτού του τμήματος, αλλά περιγράφονται με λεπτομέρεια στην σελίδα login.conf(5) του manual. Είναι αρκετό να πούμε ότι κάθε χρήστης ανήκει σε μία κλάση σύνδεσης (την `default` εξ' ορισμού), και ότι κάθε κλάση σύνδεσης έχει ένα σύνολο από δυνατότητες σύνδεσης που σχετίζονται με αυτήν. Μια δυνατότητα σύνδεσης καθορίζεται από ένα ζεύγος ``name`=`value``, όπου `name` είναι ένα γνωστό αναγνωριστικό και `value` είναι μια επιλεγμένη τιμή που θα χρησιμοποιηθεί σύμφωνα με το όνομα. To στήσιμο κλάσεων σύνδεσης και δυνατοτήτων είναι μια μάλλον απλή διαδικασία και περιγράφεται επίσης στο login.conf(5).

> Σημείωση: Το σύστημα συνήθως δεν διαβάζει απευθείας το αρχείο ρυθμίσεων στο `/etc/login.conf`, αλλά το αρχείο βάσης δεδομένων `/etc/login.conf.db` το οποίο παρέχει γρηγορότερες αναζητήσεις. Για να δημιουργήσουμε το `/etc/login.conf.db` από το `/etc/login.conf`, εκτελούμε την παρακάτω εντολή:

>     # cap_mkdb /etc/login.conf

Τα όρια πόρων είναι διαφορετικά από τις απλές δυνατότητες σύνδεσης για δύο λόγους. Πρώτα, για κάθε όριο, υπάρχει ένα μεταβλητό (τρέχον) και ένα μόνιμο όριο. Ένα μεταβλητό όριο μπορεί να αλλάξει από τον χρήστη ή την εφαρμογή, αλλά δεν μπορεί να είναι υψηλότερο από το μόνιμο όριο. Το τελευταίο μπορεί να ελαττωθεί από τον χρήστη, αλλά ποτέ να αυξηθεί. Δεύτερον, τα περισσότερα όρια πόρων εφαρμόζονται ανά διεργασία σε ένα συγκεκριμένο χρήστη, όχι στον χρήστη συνολικά. Σημειώστε, όμως, ότι αυτές οι διαφορές είναι υποχρεωτικές από τον συγκεκριμένο χειρισμό των ορίων, όχι από την υλοποίηση του πλαισίου των δυνατοτήτων σύνδεσης (δηλαδή, δεν είναι όντως μια ειδική περίπτωση των δυνατοτήτων σύνδεσης).

Και έτσι, χωρίς πρόσθετη φασαρία, παρακάτω είναι τα πιο συχνά χρησιμοποιούμενα όρια πόρων (τα υπόλοιπα, μαζί με όλες τις άλλες δυνατότητες σύνδεσης, μπορείτε να τα βρείτε στο login.conf(5)).

`coredumpsize`

  Το όριο στο μέγεθος ενός αρχείου core που δημιουργείται από ένα πρόγραμμα, είναι για προφανείς λόγους, εξαρτώμενο από άλλα όρια της χρήσης του δίσκου (π.χ., `filesize`, ή μερίδια δίσκου). Παρ' όλα αυτά, χρησιμοποιείται συχνά σαν μία λιγότερο αυστηρή μέθοδο ελέγχου της κατανάλωσης χώρου του δίσκου: αφού οι χρήστες δεν δημιουργούν αρχεία core από μόνοι τους, και συχνά δεν τα διαγράφουν, ορίζοντας το coredumpsize μπορεί να τους γλυτώσει από πρόωρο τέλος αποθηκευτικού χώρου, αν για παράδειγμα καταρρεύσει ένα μεγάλο πρόγραμμα (όπως π.χ. το emacs).

`cputime`

  Αυτό είναι το μέγιστο ποσό χρόνου της CPU που μπορεί να καταναλώσει ένας χρήστης ή μια διεργασία. Διεργασίες που υπερβαίνουν αυτό το όριο θα τερματιστούν από τον πυρήνα.

  > Σημείωση: Αυτό είναι ένα όριο στον χρόνο της CPU που καταναλώνεται, όχι στο ποσοστό της CPU όπως εμφανίζεται σε κάποια πεδία από τις top(1) και ps(1). Όριο στο ποσοστό, μέχρι τη στιγμή που γράφονται αυτές οι γραμμές, δεν είναι δυνατό, και μάλλον θα είναι άχρηστο: ένας μεταγλωττιστής--πιθανότατα μια έγκυρη εργασία-- μπορεί εύκολα να χρησιμοποιήσει σχεδόν το 100% μιας CPU για κάποιο χρόνο.

`filesize`

  Αυτό είναι το μέγιστο μέγεθος ενός αρχείου που μπορεί να κατέχει ένας χρήστης. Σε αντίθεση με τα μερίδια δίσκου, αυτό το όριο επιβάλλεται σε κάθε αρχείο χωριστά, όχι στο σύνολο όλων των αρχείων που κατέχει ένας χρήστης.

`maxproc`

  Αυτό είναι ο μέγιστος αριθμός διεργασιών που μπορεί να εκτελεί ένας χρήστης. Περιλαμβάνει με τον ίδιο τρόπο διεργασίες τόσο παρασκηνίου όσο και προσκηνίου. Για προφανείς λόγους, δεν μπορεί να είναι μεγαλύτερος από το όριο του συστήματος που ορίζεται από το `kern.maxproc` sysctl(8). Επίσης σημειώστε ότι θέτοντας πολύ μικρή τιμή, μπορεί να παρεμποδίσετε την παραγωγικότητα ενός χρήστη: είναι συχνά χρήσιμο να συνδέεται κάποιος πολλαπλές φορές ή να εκτελεί διοχετεύσεις (pipelines). Κάποιες εργασίες, όπως η μεταγλώττιση ενός μεγάλου προγράμματος, δημιουργούν επίσης πολλές διεργασίες (π.χ. make(1), cc(1), και άλλοι ενδιάμεσοι προεπεξεργαστές).

`memorylocked`

  Αυτό είναι το μέγιστο ποσό μνήμης που μπορεί να ζητήσει μια διεργασία να κλειδωθεί στην κύρια μνήμη (π.χ., βλέπε mlock(2)). Κάποια κρίσιμα προγράμματα του συστήματος, όπως το amd(8), κλειδώνουν στην κύρια μνήμη έτσι ώστε στην περίπτωση που αντιμετατεθούν, δεν συνεισφέρουν στην επιβάρυνση του συστήματος σε περίπτωση προβλήματος.

`memoryuse`

  Αυτό είναι το μέγιστο μέγεθος μνήμης που μπορεί μια διεργασία να καταναλώσει σε κάθε χρονική στιγμή. Περιλαμβάνει συνολικά την κύρια μνήμη και την χρήση της αντιμετάθεσης (swap). Δεν πρόκειται για κάποιο συνολικό όριο για τον περιορισμό της κατανάλωσης της μνήμης, αλλά είναι μια καλή αρχή.

`openfiles`

  Αυτός είναι ο μέγιστος αριθμός αρχείων που μπορεί να έχει ανοικτά μια διεργασία. Στο FreeBSD, τα αρχεία επίσης χρησιμοποιούνται για να απεικονίσουν υποδοχές (sockets) και κανάλια IPC. Προσέξτε λοιπόν να μην θέσετε αυτό το όριο πολύ χαμηλά. Το συνολικό όριο του συστήματος καθορίζεται από το `kern.maxfiles` sysctl(8).

`sbsize`

  Αυτό είναι το όριο της μνήμης δικτύου, και άρα των mbufs, που μπορεί να καταναλώσει ένας χρήστης. Ξεκίνησε ως απάντηση σε μια παλιά DoS επίθεση η οποία δημιουργούσε πολλά sockets, αλλά μπορεί να χρησιμοποιηθεί γενικά για τον περιορισμό των επικοινωνιών δικτύου.

`stacksize`

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

Υπάρχουν μερικά ακόμα πράγματα που πρέπει να θυμάστε όταν θέτετε όρια σε πόρους. Παρακάτω είναι μερικές γενικές συμβουλές, προτάσεις, και διάφορα σχόλια.

- Οι διεργασίες που ξεκινούν στην εκκίνηση του συστήματος από το `/etc/rc` εκχωρούνται στην κλάση σύνδεσης `daemon`.

- Αν και το `/etc/login.conf` που έρχεται με το σύστημα είναι μια καλή πηγή λογικών τιμών για τα περισσότερα όρια, μόνο εσείς, ο διαχειριστής, μπορεί να ξέρετε τι είναι κατάλληλο για το σύστημα σας. Θέτοντας ένα όριο πολύ ψηλά μπορεί να διευκολύνετε την κατάχρηση του συστήματος σας, ενώ θέτοντας το πολύ χαμηλά μπορεί να περιορίσετε την παραγωγικότητα.

- Στους χρήστες του X Window System (X11) θα πρέπει μάλλον να παραχωρηθούν περισσότεροι πόροι από ότι σε άλλους χρήστες. Το X11 από μόνο του καταναλώνει πολλούς πόρους, αλλά επίσης ενθαρρύνει τους χρήστες να τρέχουν περισσότερα προγράμματα ταυτόχρονα.

- Θυμηθείτε ότι πολλά όρια εφαρμόζονται σε κάθε διεργασία χωριστά, όχι στον χρήστη συνολικά. Για παράδειγμα, θέτοντας `openfiles` σε 50 σημαίνει ότι κάθε διεργασία που εκτελεί ο χρήστης μπορεί να ανοίξει έως 50 αρχεία. Έτσι, ο συνολικός αριθμός αρχείων που μπορεί να ανοίξει ο χρήστης είναι η τιμή του `openfiles` πολλαπλασιαζόμενη με την τιμή του `maxproc`. Αυτό επίσης ισχύει για την κατανάλωση μνήμης.

Για περισσότερες πληροφορίες στα όρια πόρων και τις κλάσεις σύνδεσης και των δυνατοτήτων γενικά, παρακαλούμε συμβουλευτείτε τις σχετικές σελίδες του εγχειριδίου: cap_mkdb(1), getrlimit(2), login.conf(5).

Προηγ | Αρχή | Επόμενο
Τροποποιώντας Λογαριασμούς | Πάνω | Ομάδες

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

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