Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

sudo και ελάχιστα δικαιώματα

Ενότητα 3: Χρήστες, δικαιώματα και sudo · Χρόνος ανάγνωσης: 11 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να εργάζεστε ως απλός χρήστης με sudo, να προσθέτετε έναν διαχειριστή με ασφάλεια, να αλλάζετε τις ρυθμίσεις του sudo χωρίς να κλειδώνετε τον εαυτό σας έξω και να εξηγείτε γιατί τα ελάχιστα δικαιώματα προστατεύουν τον server σας.

Βασικές έννοιες: sudo, ομάδα sudo, ομάδα wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, κλείδωμα του root, αρχείο καταγραφής του sudo, ελάχιστα δικαιώματα (least privilege), χρήστης υπηρεσίας

Γιατί να μην εργάζεστε απλώς ως root;

Μετά την εγκατάσταση συχνά συνδέεστε ως root. Είναι βολικό: όλα επιτρέπονται. Αυτό όμως είναι ακριβώς το πρόβλημα:

  • Ένα τυπογραφικό λάθος αρκεί. Η εντολή rm -rf / home/anna/oud (προσέξτε το κενό μετά την πρώτη κάθετο) ως root σβήνει ολόκληρο τον server σας. Ως απλός χρήστης λαμβάνετε ένα μήνυμα σφάλματος.
  • Όλα εκτελούνται ως root. Ένα script που επικολλάτε από το internet, ένα πρόγραμμα που δοκιμάζετε: όλα αποκτούν πλήρη δικαιώματα.
  • Κανένα ίχνος. Αν τρία άτομα εργάζονται ως root, κανείς δεν ξέρει εκ των υστέρων ποιος έκανε τι.
  • Το root είναι το όνομα που δοκιμάζει κάθε επιτιθέμενος. Καλύτερα να απενεργοποιήσετε εντελώς τη σύνδεση ως root (μάθημα 2.2), αλλά αυτό είναι δυνατό μόνο όταν έχετε άλλον δρόμο προς τα δικαιώματα διαχείρισης.

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

anna@web1:~$ apt update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
anna@web1:~$ sudo apt update
[sudo] password for anna:
Hit:1 http://deb.debian.org/debian trixie InRelease
...

(Το Ubuntu χρησιμοποιεί από την έκδοση 25.10 από προεπιλογή το sudo-rs, μια νέα υλοποίηση του sudo. Για όλα όσα περιγράφει αυτό το μάθημα λειτουργεί με τον ίδιο τρόπο.)

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

Δημιουργία διαχειριστή

Στο Debian και στο Ubuntu, όλα τα μέλη της ομάδας sudo μπορούν να εκτελούν τα πάντα μέσω sudo. Αυτό ορίζεται στο /etc/sudoers:

%sudo   ALL=(ALL:ALL) ALL

Διαβάστε το ως εξής: τα μέλη της ομάδας sudo (%) μπορούν σε όλα τα μηχανήματα (ALL), ως οποιοσδήποτε χρήστης και ομάδα ((ALL:ALL)), να εκτελούν οποιαδήποτε εντολή (ALL).

Η προσθήκη διαχειριστή γίνεται λοιπόν σε δύο βήματα, ως root:

root@web1:~# adduser anna
root@web1:~# adduser anna sudo

Στη συνέχεια τοποθετήστε το δημόσιο κλειδί της Anna στο /home/anna/.ssh/authorized_keys με τον σωστό κάτοχο και τα σωστά δικαιώματα:

root@web1:~# mkdir -p /home/anna/.ssh
root@web1:~# cp /root/.ssh/authorized_keys /home/anna/.ssh/
root@web1:~# chown -R anna:anna /home/anna/.ssh
root@web1:~# chmod 700 /home/anna/.ssh
root@web1:~# chmod 600 /home/anna/.ssh/authorized_keys

Μην ξεχάσετε το chown: αν το αρχείο αντιγραφεί από τον root, ανήκει στον root, και τότε η Anna δεν μπορεί να συνδεθεί με το κλειδί της.

Δοκιμάστε τώρα σε ένα δεύτερο παράθυρο, ενώ η συνεδρία root παραμένει ανοιχτή:

anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$ sudo -l
[sudo] password for anna:
User anna may run the following commands on web1:
    (ALL : ALL) ALL
anna@web1:~$ sudo whoami
root

Μόνο όταν αυτό λειτουργεί, ορίζετε στις ρυθμίσεις SSH PermitRootLogin no (μάθημα 2.2). Από εκεί και πέρα συνδέεστε πάντα ως Anna.

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

Αλλαγή ρυθμίσεων του sudo: πάντα με visudo

Ένα σφάλμα στο /etc/sudoers μπορεί να σημαίνει ότι το sudo δεν λειτουργεί πλέον καθόλου. Αν ούτε ο root μπορεί να συνδεθεί, έχετε κολλήσει. Γι' αυτό δεν επεξεργάζεστε ποτέ τις ρυθμίσεις του sudo με έναν συνηθισμένο editor, αλλά με το visudo. Αυτό ανοίγει ένα προσωρινό αντίγραφο και ελέγχει το περιεχόμενο πριν το αποθηκεύσει:

root@web1:~# visudo -f /etc/sudoers.d/backup

Όπως και με το SSH, προτιμήστε ένα δικό σας αρχείο στο /etc/sudoers.d/ αντί για το κύριο αρχείο. Προσέξτε δύο κανόνες αυτού του φακέλου:

  • Τα αρχεία των οποίων το όνομα περιέχει τελεία ή τελειώνει σε ~ παραλείπονται. Επομένως το backup.conf δεν λειτουργεί, ενώ το backup λειτουργεί. Ο σκοπός είναι να αγνοούνται τα αντίγραφα των editors, αλλά αυτό ξαφνιάζει πολλούς.
  • Το αρχείο πρέπει να ανήκει στον root και να μην είναι εγγράψιμο από άλλους (το 440 είναι σύνηθες· το visudo το φροντίζει).

Αν θέλετε να ελέγξετε ένα υπάρχον αρχείο χωρίς να το επεξεργαστείτε: το visudo -c ελέγχει τα πάντα.

NOPASSWD: βολικό, αλλά να ξέρετε τι κάνετε

Με το NOPASSWD το sudo δεν ζητά πλέον κωδικό πρόσβασης:

anna ALL=(ALL:ALL) NOPASSWD: ALL

Ορισμένα images VPS το ορίζουν αυτό για τον προεπιλεγμένο χρήστη, ώστε μετά τη σύνδεση με κλειδί να είστε αμέσως διαχειριστής. Ελέγξτε με το sudo -l τι ισχύει στη δική σας περίπτωση. Η συνέπεια: όποιος έχει το κλειδί της Anna είναι αμέσως root. Δεν υπάρχει πλέον δεύτερη κλειδαριά. Για έναν προσωπικό server μπορείτε να το επιλέξετε, αλλά κάντε το συνειδητά.

Πολύ καλύτερο είναι το NOPASSWD μόνο για μία συγκεκριμένη εντολή, για παράδειγμα για ένα script αντιγράφων ασφαλείας που πρέπει να εκτελείται αυτόματα:

backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backup

Ο χρήστης backup μπορεί τότε να εκτελεί ακριβώς αυτό το ένα script ως root, χωρίς κωδικό πρόσβασης, και τίποτε άλλο. Δύο παγίδες:

  • Χρησιμοποιείτε πάντα την πλήρη διαδρομή. Με σκέτο maak-backup κάποιος μπορεί να βάλει ένα δικό του πρόγραμμα με αυτό το όνομα στην αρχή της διαδρομής αναζήτησής του.
  • Το ίδιο το script δεν πρέπει να είναι εγγράψιμο από αυτόν τον χρήστη. Διαφορετικά μπορεί να το τροποποιήσει και να εκτελέσει αυθαίρετες εντολές ως root. Το ίδιο ισχύει για εντολές που μπορούν οι ίδιες να ανοίξουν shell, όπως ένας editor (vim, nano) ή το less: όποιος μπορεί να τις εκκινήσει μέσω sudo, μπορεί να ανοίξει μέσα από το πρόγραμμα ένα shell root. Μην επιτρέπετε ποτέ τέτοιες εντολές μεμονωμένα μέσω sudo.

Τι καταγράφεται

Κάθε φορά που κάποιος χρησιμοποιεί το sudo, προστίθεται μια γραμμή στο journal (και σε συστήματα με rsyslog επίσης στο /var/log/auth.log):

anna@web1:~$ sudo journalctl _COMM=sudo --since today
Nov 09 10:31:02 web1 sudo[2214]:     anna : TTY=pts/0 ; PWD=/home/anna ; USER=root ; COMMAND=/usr/bin/apt update

Βλέπετε ποιος, πού, ως ποιος και ποια εντολή. Αυτός είναι ένας από τους λόγους να μην εργάζονται πολλά άτομα ως root. Αποτυχημένες προσπάθειες sudo ("incorrect password attempts") από έναν λογαριασμό που δεν είναι ο δικός σας αποτελούν σήμα κινδύνου.

Ελάχιστα δικαιώματα σε ευρύτερη κλίμακα

Το sudo είναι μία εφαρμογή μιας γενικής αρχής: των ελάχιστων δικαιωμάτων (least privilege). Κάθε χρήστης και κάθε υπηρεσία λαμβάνει ακριβώς τα δικαιώματα που χρειάζεται, και όχι περισσότερα. Σε έναν server αυτό σημαίνει, μεταξύ άλλων:

  • εργάζεστε ως απλός χρήστης και χρησιμοποιείτε το sudo μόνο όταν χρειάζεται·
  • κάθε υπηρεσία εκτελείται με δικό της χρήστη χωρίς shell (μάθημα 3.1), όχι ως root·
  • μια web εφαρμογή λαμβάνει έναν χρήστη βάσης δεδομένων που μπορεί να χρησιμοποιεί μόνο τη δική του βάση, όχι τον διαχειριστή του server βάσεων δεδομένων·
  • ένα script αντιγράφων ασφαλείας επιτρέπεται να εκτελεί μόνο τη μία εντολή που χρειάζεται (NOPASSWD με πλήρη διαδρομή)·
  • ένας συνάδελφος που απλώς ενημερώνει τον ιστότοπο λαμβάνει δικαίωμα εγγραφής στο /var/www/example.com μέσω μιας ομάδας, όχι sudo.

Η ιδέα: αν κάτι πάει στραβά (ένα κενό ασφαλείας σε ένα plugin, ένα κλεμμένο κλειδί), η ζημιά περιορίζεται σε αυτόν τον έναν χρήστη ή την υπηρεσία. Αυτό επανέρχεται συνεχώς στις αρχές του CIS και στο μάθημα για το hardening (10.1).

Στο AlmaLinux και στο Rocky Linux

Εκεί η ομάδα διαχειριστών ονομάζεται wheel αντί για sudo: usermod -aG wheel anna. Η γραμμή στο /etc/sudoers είναι %wheel ALL=(ALL) ALL. Το visudo και το /etc/sudoers.d λειτουργούν με τον ίδιο τρόπο. Τα μηνύματα του sudo βρίσκονται εκεί επίσης στο /var/log/secure.

Σύνοψη

  • Εργάζεστε ως απλός χρήστης και χρησιμοποιείτε το sudo για διαχείριση· το sudo ζητά τον δικό σας κωδικό πρόσβασης και καταγράφει κάθε εντολή.
  • Δημιουργία διαχειριστή: adduser anna, adduser anna sudo (wheel σε συστήματα τύπου RHEL), κλειδί με σωστό κάτοχο και δικαιώματα, δοκιμή σε δεύτερο παράθυρο και μόνο τότε απενεργοποίηση της σύνδεσης root.
  • Επεξεργάζεστε τους κανόνες του sudo μόνο με visudo, κατά προτίμηση σε ένα δικό σας αρχείο στο /etc/sudoers.d/ χωρίς τελεία στο όνομα.
  • Το NOPASSWD για όλα αφαιρεί μια κλειδαριά· χρησιμοποιήστε το καλύτερα μόνο για μία εντολή με πλήρη διαδρομή, την οποία ο χρήστης δεν μπορεί να τροποποιήσει.
  • Ελάχιστα δικαιώματα: κάθε χρήστης και υπηρεσία λαμβάνει ακριβώς ό,τι χρειάζεται, ώστε ένα σφάλμα ή κενό ασφαλείας να παραμένει μικρό.

Κουίζ

1. Ποιον κωδικό πρόσβασης ζητά από προεπιλογή το sudo όταν η Anna πληκτρολογεί sudo apt update;



2. Δημιουργείτε το αρχείο /etc/sudoers.d/backup.conf με έναν έγκυρο κανόνα, αλλά δεν λειτουργεί. Γιατί;



3. Γιατί επεξεργάζεστε τους κανόνες του sudo με το visudo;



4. Ποιος κανόνας δίνει σε έναν χρήστη αντιγράφων ασφαλείας τον μικρότερο κίνδυνο;



5. Με ποια σειρά απενεργοποιείτε τη σύνδεση root χωρίς να κλειδώσετε τον εαυτό σας έξω;



Άσκηση

Άσκηση O3.2: Ένας διαχειριστής με sudo. Δημιουργήστε στον server σας έναν απλό διαχειριστή (για παράδειγμα anna), τοποθετήστε σωστά το κλειδί σας, δοκιμάστε τη σύνδεση και το sudo -l σε ένα δεύτερο παράθυρο και στη συνέχεια απενεργοποιήστε τη σύνδεση root μέσω SSH (PermitRootLogin no). Σημειώστε τα βήματα, επικολλήστε την έξοδο του id (μόνο όνομα και ομάδες) και απαντήστε στις ερωτήσεις: ποιος κανόνας δίνει δικαιώματα στον διαχειριστή σας, υπάρχει κάπου NOPASSWD, και πώς μπαίνετε αν ξεχάσετε τον κωδικό πρόσβασής σας;

Άσκηση O3.2: Ένας διαχειριστής με sudo

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




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

Για περαιτέρω μελέτη

Τα βήματα σε αυτά τα άρθρα ισχύουν για τα VPS της WebOké· σε άλλους παρόχους λειτουργεί με παρόμοιο τρόπο.

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…