Κεφάλαιο 14. Χρήστες και Βασική Διαχείριση Λογαριασμών

14.1. Σύνοψη

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

Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε:

  • Τις διαφορές ανάμεσα στα διάφορα είδη λογαριασμών χρηστών σε ένα σύστημα FreeBSD.

  • Πως να προσθέσετε λογαριασμούς χρηστών.

  • Πως να διαγράψετε λογαριασμούς χρηστών.

  • Πως να αλλάξετε τις λεπτομέρειες ενός λογαριασμού, όπως το πλήρες όνομα του χρήστη, ή το προτιμώμενο κέλυφος (shell).

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

  • Πως να χρησιμοποιήσετε ομάδες για να κάνετε ευκολότερη τη διαχείριση των λογαριασμών.

Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:

14.2. Εισαγωγή

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

Κάθε λογαριασμός σε ένα σύστημα FreeBSD έχει συγκεκριμένες πληροφορίες που σχετίζονται με αυτόν ώστε να αναγνωρίζεται από το σύστημα.

Όνομα χρήστη

Το όνομα χρήστη είναι αυτό που θα γραφεί στην προτροπή login:. Τα ονόματα χρηστών πρέπει να είναι μοναδικά για τον υπολογιστή, δεν μπορείτε να έχετε δύο χρήστες με το ίδιο όνομα χρήστη. Υπάρχει ένας αριθμός κανόνων για την δημιουργία έγκυρων ονομάτων χρηστών, που τεκμηριώνονται στο passwd(5). Συνήθως θα χρησιμοποιείτε ονόματα χρηστών που περιέχουν οκτώ ή λιγότερους όλους μικρούς χαρακτήρες.

Κωδικός

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

User ID (UID)

Το UID είναι ένας αριθμός, κατά παράδοση από το 0 έως το 65535 , που χρησιμοποιείται για την μοναδική αναγνώριση του χρήστη στο σύστημα. Εσωτερικά, το FreeBSD χρησιμοποιεί το UID για να αναγνωρίσει χρήστες-οποιεσδήποτε εντολές του FreeBSD που σας επιτρέπουν να ορίσετε ένα όνομα χρήστη θα το μετατρέψουν στο UID πριν το χρησιμοποιήσουν. Αυτό σημαίνει ότι μπορείτε να έχετε πολλούς λογαριασμούς με διαφορετικά ονόματα χρήστη αλλά το ίδιο UID. Όσο αφορά το FreeBSD, αυτοί οι λογαριασμοί είναι ένας χρήστης. Είναι απίθανο να χρειαστεί ποτέ να κάνετε κάτι τέτοιο.

Group ID (GID)

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

Κλάσεις σύνδεσης

Οι κλάσεις σύνδεσης (login classes) είναι μια επέκταση στον μηχανισμό των ομάδων που παρέχουν πρόσθετη ευελιξία όταν προσαρμόζουμε το σύστημα σε διαφορετικούς χρήστες.

Χρόνος αλλαγής κωδικού

Εξ' ορισμού το FreeBSD δεν επιβάλλει στους χρήστες να αλλάζουν περιοδικά τον κωδικό τους. Μπορείτε να το επιβάλετε αυτό σε μια ανά χρήστη βάση, αναγκάζοντας κάποιους ή όλους τους χρήστες να αλλάζουν τον κωδικό τους αφού έχει περάσει ένα συγκεκριμένο χρονικό διάστημα.

Χρόνος λήξης λογαριασμών

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

Πραγματικό όνομα χρήστη

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

Προσωπικός κατάλογος

Ο προσωπικός κατάλογος δείχνει την πλήρη διαδρομή προς ένα κατάλογο του συστήματος. Αυτός είναι και ο αρχικός κατάλογος του χρήστη, κάθε φορά που συνδέεται στο σύστημα. Μια κοινή σύμβαση είναι να μπαίνουν οι προσωπικοί κατάλογοι χρηστών στο /home/username ή στο /usr/home/username. Ο χρήστης θα αποθηκεύει τα προσωπικά του αρχεία και τους καταλόγους που δημιουργεί, μέσα στον προσωπικό του κατάλογο.

Κέλυφος χρήστη

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

Υπάρχουν τρεις κύριοι τύποι λογαριασμών: ο υπερχρήστης (superuser), οι χρήστες συστήματος, και οι λογαριασμοί χρηστών. Ο λογαριασμός υπερχρήστη, συνήθως ονομάζεται root, χρησιμοποιείται για τη διαχείριση του συστήματος χωρίς περιορισμούς στα προνόμια. Οι χρήστες συστήματος τρέχουν υπηρεσίες. Τέλος, οι λογαριασμοί χρηστών χρησιμοποιούνται από πραγματικούς ανθρώπους, που συνδέονται, διαβάζουν mail, και ούτω καθεξής.

14.3. Ο Λογαριασμός Υπερχρήστη

Ο λογαριασμός υπερχρήστη, συνήθως καλείται root, είναι προρυθμισμένος για να διευκολύνεται η διαχείριση του συστήματος, και δεν θα πρέπει να χρησιμοποιείται για καθημερινές εργασίες όπως αποστολή και λήψη mail, γενική εξερεύνηση του συστήματος, ή προγραμματισμό.

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

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

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

14.4. Λογαριασμοί Συστήματος

Οι χρήστες συστήματος είναι αυτοί που χρησιμοποιούνται για να τρέχουν υπηρεσίες όπως το DNS, mail, web servers, και ούτω καθεξής. Ο λόγος για αυτό είναι η ασφάλεια: αν όλες οι υπηρεσίες έτρεχαν με δικαιώματα υπερχρήστη, θα λειτουργούσαν χωρίς περιορισμούς.

Παραδείγματα από χρήστες συστήματος είναι οι daemon, operator, bind (για το Domain Name Service), news, και www.

Ο nobody είναι ο γενικός, χωρίς προνόμια, χρήστης συστήματος. Ωστόσο, είναι σημαντικό να έχετε κατά νου ότι όσο περισσότερες υπηρεσίες χρησιμοποιούν τον nobody, τόσο περισσότερα αρχεία και διεργασίες θα συσχετιστούν με αυτόν, και έτσι τόσο περισσότερο προνομιούχος γίνεται αυτός ο χρήστης.

14.5. Λογαριασμοί Χρηστών

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

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

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

14.6. Τροποποιώντας Λογαριασμούς

Υπάρχει μια ποικιλία από διαφορετικές εντολές διαθέσιμες στο περιβάλλον UNIX® για να χειριστείτε λογαριασμούς χρηστών. Οι πιο κοινές εντολές συνοψίζονται παρακάτω, ακολουθούμενες από λεπτομερή παραδείγματα της χρήσης τους.

ΕντολήΠεριγραφή

adduser(8)

Η προτεινόμενη εφαρμογή γραμμής εντολών για την προσθήκη νέων χρηστών.

rmuser(8)

Η προτεινόμενη εφαρμογή γραμμής εντολών για την διαγραφή χρηστών.

chpass(1)

Ένα ευέλικτο εργαλείο για την αλλαγή πληροφοριών της βάσης δεδομένων των χρηστών.

passwd(1)

Το απλό εργαλείο γραμμής εντολών για την αλλαγή των κωδικών των χρηστών.

pw(8)

Ένα δυνατό και ευέλικτο εργαλείο για την αλλαγή όλων των ρυθμίσεων των λογαριασμών των χρηστών.

14.6.1. adduser

Το adduser(8) είναι ένα απλό πρόγραμμα για να προσθέτετε νέους χρήστες. Δημιουργεί εγγραφές στα αρχεία συστήματος passwd και group. Δημιουργεί επίσης έναν προσωπικό κατάλογο για τον νέο χρήστη, αντιγράφει εκεί τα εξ' ορισμού αρχεία ρυθμίσεων ("dotfiles") από το /usr/shared/skel, και μπορεί προαιρετικά να στείλει ένα μήνυμα καλωσορίσματος στον νέο χρήστη.

Παράδειγμα 1. Προσθέτοντας Ένα Χρήστη στο FreeBSD
# adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
#

Ο κωδικός που πληκτρολογείτε δεν φαίνεται, ούτε εμφανίζονται αστερίσκοι. Φροντίστε να μην γράψετε λάθος τον κωδικό.

14.6.2. rmuser

Μπορείτε να χρησιμοποιήσετε το rmuser(8) για να διαγράψετε εντελώς έναν χρήστη από το σύστημα. Η rmuser(8) εκτελεί τα παρακάτω βήματα:

  1. Διαγράφει την εγγραφή crontab(1) του χρήστη (αν υπάρχει).

  2. Διαγράφει όποια εργασία at(1) ανήκει στον χρήστη.

  3. Τερματίζει όλες τις διεργασίες που ανήκουν στον χρήστη.

  4. Διαγράφει τον χρήστη από το τοπικό αρχείο κωδικών του συστήματος.

  5. Διαγράφει τον προσωπικό κατάλογο του χρήστη (αν ανήκει στον χρήστη).

  6. Διαγράφει τα εισερχόμενα αρχεία mail που ανήκουν στον χρήστη από το /var/mail.

  7. Διαγράφει όλα τα αρχεία που ανήκουν στον χρήστη από τις προσωρινές περιοχές αποθήκευσης όπως το /tmp.

  8. Τέλος, διαγράφει το όνομα χρήστη από όλες τις ομάδες στις οποίες ανήκει στο /etc/group.

    Αν κατά τη διαγραφή του χρήστη, υπάρχει ομάδα με το όνομα του η οποία δεν περιέχει άλλα μέλη, η ομάδα αυτή διαγράφεται, Η συμπεριφορά αυτή είναι συμπληρωματική με την αντίστοιχη της adduser(8), που δημιουργεί ομάδα με το όνομα του χρήστη κατά τη δημιουργία του λογαριασμού.

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

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

Παράδειγμα 2. rmuser Διαδραστική Διαγραφή Λογαριασμού
# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done.
Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
#

14.6.3. chpass

Το chpass(1) αλλάζει πληροφορίες της βάσης δεδομένων του χρήστη όπως κωδικούς, κελύφη, και προσωπικές πληροφορίες.

Μόνο διαχειριστές του συστήματος, όπως ο υπερχρήστης, μπορεί να αλλάζει τις πληροφορίες άλλων χρηστών καθώς και τους κωδικούς με το chpass(1).

Όταν δεν δίνονται επιλογές, εκτός από ένα προαιρετικό όνομα χρήστη, το chpass(1) εμφανίζει έναν συντάκτη που περιέχει τις πληροφορίες του χρήστη. Όταν ο χρήστης βγει από τον συντάκτη, η βάση δεδομένων χρηστών ενημερώνεται με τις νέες πληροφορίες.

Κατά την έξοδο από τον συντάκτη, αν δεν είστε ο υπερχρήστης, θα ερωτηθείτε για τον κωδικό σας.

Παράδειγμα 3. Διαδραστική chpass από τον Υπερχρήστη
#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

Ο κανονικός χρήστης μπορεί να αλλάξει μόνο ένα μικρό υποσύνολο από αυτές τις πληροφορίες, και μόνο για τον εαυτό του.

Παράδειγμα 4. Διαδραστική chpass από Κανονικό Χρήστη
#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

Οι chfn(1) και chsh(1) είναι απλά σύνδεσμοι στην chpass(1), όπως είναι και οι ypchpass(1), ypchfn(1), και ypchsh(1). Η υποστήριξη NIS είναι αυτόματη, έτσι δεν είναι απαραίτητο να καθορίσετε το yp πριν την εντολή. Αν αυτό σας μπερδεύει, μην ανησυχείτε, το NIS θα καλυφθεί στο Εξυπηρετητές Δικτύου.

14.6.4. passwd

Το passwd(1) είναι ο συνήθης τρόπος να αλλάξετε το δικό σας κωδικό σαν χρήστης, ή τον κωδικό άλλου χρήστη σαν υπερχρήστης.

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

Παράδειγμα 5. Αλλάζοντας τον Κωδικό σας
% passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done
Παράδειγμα 6. Αλλάζοντας τον Κωδικό άλλου Χρήστη ως Υπερχρήστης
# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done

Όσο για τις chpass(1), yppasswd(1) είναι απλά σύνδεσμοι στην passwd(1), έτσι το NIS λειτουργεί με οποιαδήποτε εντολή.

14.6.5. pw

Η pw(8) είναι μια λειτουργία της γραμμής εντολών για δημιουργία, διαγραφή, αλλαγή, και εμφάνιση χρηστών και ομάδων. Λειτουργεί ως front end για τα αρχεία χρηστών και ομάδων του συστήματος. Η pw(8) έχει ένα πολύ δυνατό σύνολο επιλογών γραμμής εντολών που την καθιστούν κατάλληλη για χρήση σε δέσμες εντολών (scripts) κελυφών, αλλά στους νέους χρήστες ίσως φανεί περισσότερο περίπλοκη από ότι οι άλλες εντολές που παρουσιάζονται εδώ.

14.7. Περιορίζοντας Χρήστες

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

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

Τα άλλα όρια πόρων περιλαμβάνουν τρόπους για περιορισμό χρήσης της 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).

14.8. Ομάδες

Μία ομάδα είναι απλά μία λίστα χρηστών. Οι ομάδες αναγνωρίζονται από το όνομά τους και το GID (Group ID). Στο FreeBSD (και στα περισσότερα άλλα όμοια UNIX® συστήματα), οι δύο παράγοντες που ο πυρήνας χρησιμοποιεί για να αποφασίσει αν μία διεργασία επιτρέπεται να κάνει κάτι είναι το ID του χρήστη της και η λίστα με τις ομάδες που ανήκει. Σε αντίθεση με το ID του χρήστη, μια διεργασία έχει μια λίστα με τις ομάδες που σχετίζονται με αυτήν. Μπορεί να ακούσετε κάποια πράγματα να αναφέρονται στο "group ID" ενός χρήστη ή μιας διεργασίας. Τις περισσότερες φορές, αυτό σημαίνει απλά την πρώτη ομάδα της λίστας.

Η αντιστοίχηση του ονόματος της ομάδας στο ID της ομάδας βρίσκεται στο /etc/group. Αυτό είναι ένα αρχείο απλού κειμένου με τέσσερα πεδία χωρισμένα με κόμματα. Το πρώτο πεδίο είναι το όνομα της ομάδας, το δεύτερο είναι ο κρυπτογραφημένος κωδικός, το τρίτο το ID της ομάδας, και το τέταρτο η λίστα των μελών, χωρισμένη με κόμματα. Μπορείτε να την επεξεργαστείτε άφοβα με το χέρι (θεωρώντας, φυσικά, ότι δεν κάνετε συντακτικά λάθη!). Για μια πιο ολοκληρωμένη περιγραφή της σύνταξης, δείτε την σελίδα manual group(5).

Αν δεν θέλετε να επεξεργαστείτε το /etc/group με το χέρι, μπορείτε να χρησιμοποιήσετε την pw(8) εντολή για να προσθέσετε και να επεξεργαστείτε ομάδες. Για παράδειγμα, για να προσθέσετε μια ομάδα που λέγεται teamtwo και μετά να επιβεβαιώσετε ότι υπάρχει, μπορείτε να χρησιμοποιήσετε:

Παράδειγμα 7. Προσθέτοντας μια Ομάδα Χρησιμοποιώντας το pw(8)
# pw groupadd teamtwo
# pw groupshow teamtwo
teamtwo:*:1100:

Ο αριθμός 1100 παραπάνω είναι το ID της ομάδας teamtwo. Αυτή την στιγμή, η teamtwo δεν έχει μέλη, και γι’αυτό είναι μάλλον άχρηστη. Ας το αλλάξουμε αυτό προσκαλώντας τον jru στην ομάδα teamtwo.

Παράδειγμα 8. Καθορισμός της Λίστας Μελών μιας Ομάδας με Χρήση του pw(8)
# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
teamtwo:*:1100:jru

Η παράμετρος στην επιλογή -M είναι μια λίστα χρηστών που πρόκειται να γίνουν μέλη της ομάδας, χωρισμένη με κόμματα. Από τα προηγούμενα τμήματα, γνωρίζουμε ότι και το αρχείο κωδικών (password file) περιέχει επίσης μια ομάδα για κάθε χρήστη. Ο χρήστης εισάγεται αυτόματα (από το σύστημα) ως μέλος της ομάδας αυτής. Ο χρήστης δεν θα εμφανίζεται ως μέλος της αρχικής αυτής ομάδας όταν χρησιμοποιείται η επιλογή groupshow με την pw(8), αλλά θα εμφανίζεται όταν η πληροφορία αναζητείται μέσω της id(1) ή παρόμοιου εργαλείου. Με άλλα λόγια, η pw(8) χειρίζεται μόνο το αρχείο /etc/group, και δεν θα προσπαθήσει ποτέ να διαβάσει πρόσθετα δεδομένα από το /etc/passwd.

Παράδειγμα 9. Προσθήκη Νέου Μέλους στην Ομάδα με Χρήση της pw(8)
# pw groupmod teamtwo -m db
# pw groupshow teamtwo
teamtwo:*:1100:jru,db

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

Παράδειγμα 10. Χρησιμοποιώντας την id(1) για Προσδιορισμό Μελών μιας Ομάδας
% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)

Όπως μπορείτε να δείτε, ο jru είναι μέλος των ομάδων jru και teamtwo.

Για περισσότερες πληροφορίες σχετικά με την pw(8), δείτε την σελίδα manual, και για περισσότερες πληροφορίες σχετικά με την μορφοποίηση του /etc/group, συμβουλευτείτε την σελίδα manual group(5).


Last modified on: 11 Δεκεμβρίου 2021 by Sergio Carlavilla Delgado