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

Ρυθμίσεις 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

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

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

Προβολή

Ασφαλής ρύθμιση του SSH server

Ενότητα 2: SSH και κλειδιά · Χρόνος ανάγνωσης: 12 λεπτά

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

Βασικές έννοιες: sshd, sshd_config, sshd_config.d, μετράει η πρώτη τιμή, PasswordAuthentication, KbdInteractiveAuthentication, PermitRootLogin, AuthenticationMethods, AllowUsers, sshd -t, sshd -T, δεύτερη συνεδρία, cloud-init, ssh.socket

Πρώτα το δίχτυ ασφαλείας

Αυτό το μάθημα κλείνει μια πόρτα από την οποία περνάτε και εσείς οι ίδιοι. Ένα τυπογραφικό λάθος μπορεί να σημαίνει ότι δεν μπορείτε πλέον να συνδεθείτε. Γι' αυτό, πάντα πριν ξεκινήσετε:

  1. Δύο κλειδιά λειτουργούν (μάθημα 2.1) και έχετε ελέγξει σε νέο παράθυρο ότι η σύνδεση με κλειδί επιτυγχάνει.
  2. Ένα snapshot του VPS σας. Στο WebOké το δημιουργείτε στην οθόνη του VPS· σε άλλους παρόχους ονομάζεται επίσης snapshot ή image. Αν κάτι πάει στραβά, το επαναφέρετε.
  3. Γνωρίζετε την κονσόλα του παρόχου σας: από εκεί μπαίνετε χωρίς SSH.
  4. Η τρέχουσα συνεδρία SSH σας μένει ανοιχτή μέχρι το τέλος. Μια ενεργή συνεδρία συνεχίζει να λειτουργεί όταν αλλάζετε τις ρυθμίσεις ή επαναφορτώνετε την υπηρεσία. Δοκιμάζετε κάθε αλλαγή σε δεύτερο παράθυρο.

Πού βρίσκονται οι ρυθμίσεις

Ο SSH server ονομάζεται sshd. Οι ρυθμίσεις του βρίσκονται στο /etc/ssh/sshd_config. Στο Debian και στο Ubuntu, στην αρχή αυτού του αρχείου υπάρχει αυτή η γραμμή:

Include /etc/ssh/sshd_config.d/*.conf

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

Έχει όμως μια συνέπεια που αιφνιδιάζει πολλούς. Στο sshd_config ισχύει: για κάθε ρύθμιση μετράει η πρώτη τιμή που συναντά ο sshd. Οι επόμενες γραμμές με την ίδια ρύθμιση αγνοούνται. Αν γράψετε στο τέλος του sshd_config PasswordAuthentication no, δεν υπερισχύετε λοιπόν ενός αρχείου στο sshd_config.d που λέει yes.

Η παγίδα του cloud-init

Πολλά images VPS ρυθμίζονται κατά την πρώτη εκκίνηση από το cloud-init. Ανάλογα με το πώς έχουν ρυθμιστεί το image και η εγκατάσταση, το cloud-init γράφει ένα αρχείο όπως το /etc/ssh/sshd_config.d/50-cloud-init.conf που περιέχει για παράδειγμα:

PasswordAuthentication yes

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

root@web1:~# grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
/etc/ssh/sshd_config:#PasswordAuthentication yes
/etc/ssh/sshd_config.d/50-cloud-init.conf:PasswordAuthentication yes

Δύο καθαρές λύσεις: αλλάξτε αυτό το αρχείο σε no ή βάλτε τις δικές σας ρυθμίσεις σε ένα αρχείο που έρχεται νωρίτερα στο αλφάβητο, όπως το 00-beveiliging.conf. Ένα αρχείο 99-mijn.conf αντίθετα δεν λειτουργεί, γιατί τότε το cloud-init έχει ήδη υπερισχύσει.

Οι ρυθμίσεις που μετράνε

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

root@web1:~# nano /etc/ssh/sshd_config.d/00-beveiliging.conf

με αυτό το περιεχόμενο:

# Σύνδεση μόνο με κλειδί
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password

Τι σημαίνει κάθε γραμμή;

  • PasswordAuthentication no: ο server δεν δέχεται πλέον κωδικό πρόσβασης. Η προεπιλεγμένη τιμή του OpenSSH είναι yes.
  • KbdInteractiveAuthentication no: το "keyboard-interactive" είναι ένας δεύτερος τρόπος να ζητηθεί κωδικός πρόσβασης, μέσω PAM. Αν το αφήσετε ενεργό, κάποιος μπορεί παρ' όλα αυτά να δοκιμάσει κωδικό πρόσβασης, ακόμη κι αν το PasswordAuthentication είναι no. Σε παλαιότερους οδηγούς αυτή η ρύθμιση ονομάζεται ChallengeResponseAuthentication· από το OpenSSH 8.7 αυτό είναι ένα παρωχημένο εναλλακτικό όνομα για το ίδιο πράγμα. Το Debian το έχει ήδη από προεπιλογή σε no, αλλά γράψτε το ούτως ή άλλως: έτσι είναι σαφές και ισχύει και σε άλλα συστήματα.
  • PermitRootLogin prohibit-password: ο root μπορεί να συνδεθεί, αλλά μόνο με κλειδί. Αυτή είναι η προεπιλογή από το OpenSSH 7.0. Αυστηρότερο είναι το PermitRootLogin no: ο root δεν μπορεί καθόλου να μπει μέσω SSH, συνδέεστε ως κανονικός χρήστης και χρησιμοποιείτε sudo (μάθημα 3.2). Ορίστε no μόνο όταν είστε βέβαιοι ότι η σύνδεση ως αυτός ο χρήστης και το sudo λειτουργούν.

Προαιρετικά, για όσους θέλουν περισσότερα:

AllowUsers anna
AuthenticationMethods publickey

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

Δοκιμή, εφαρμογή, έλεγχος

Πρώτα αφήνετε τον sshd να ελέγξει το αρχείο. Αυτό δεν ξεκινά και δεν αλλάζει τίποτα:

root@web1:~# sshd -t
root@web1:~#

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

root@web1:~# systemctl reload ssh

Στο Debian και στο Ubuntu η υπηρεσία ονομάζεται ssh, στο AlmaLinux και στο Rocky Linux sshd.

Στη συνέχεια ελέγχετε ποια τιμή ισχύει πραγματικά. Το sshd -T εμφανίζει την πλήρη, υπολογισμένη διαμόρφωση, με επεξεργασμένα όλα τα αρχεία Include:

root@web1:~# sshd -T | grep -Ei 'passwordauth|kbdinteractive|permitrootlogin'
permitrootlogin without-password
passwordauthentication no
kbdinteractiveauthentication no

(Το without-password είναι το παλιό όνομα του prohibit-password. Εκδόσεις του OpenSSH πριν από την 10.1, όπως στο Debian 13 και στο Ubuntu 24.04, εμφανίζουν ακόμη το παλιό όνομα· οι νεότερες εμφανίζουν prohibit-password. Σημαίνει το ίδιο.)

Και τώρα το σημαντικότερο: δοκιμάστε σε ένα δεύτερο παράθυρο, ενώ το πρώτο μένει ανοιχτό.

anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$

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

anna@laptop:~$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no anna@192.0.2.10
anna@192.0.2.10: Permission denied (publickey).

Μετά το Permission denied εμφανίζονται σε παρένθεση οι μέθοδοι σύνδεσης που προσφέρει ακόμη ο server. Αν εκεί υπάρχει μόνο publickey, όλα είναι σωστά. Αν υπάρχει και password ή keyboard-interactive, τότε κάπου ισχύει ακόμη άλλη τιμή: ελέγξτε ξανά με sshd -T.

Ακριβώς αυτή τη λίστα ελέγχει και η άσκηση του μαθήματος, από έξω. Ο SSH client σας ρωτά σε κάθε σύνδεση πρώτα ποιες μέθοδοι επιτρέπονται, με ένα αίτημα τύπου "none". Ο server απαντά με τη λίστα, χωρίς να δοκιμαστεί κωδικός πρόσβασης ή κλειδί.

Ubuntu 24.04 και νεότερα: ssh.socket

Στο Ubuntu από την έκδοση 22.10 δεν ακούει ο ίδιος ο sshd στη θύρα 22, αλλά το systemd, μέσω του ssh.socket. Μόνο όταν έρθει μια σύνδεση, το systemd ξεκινά την υπηρεσία SSH. Για τις ρυθμίσεις αυτού του μαθήματος αυτό δεν έχει καμία σημασία: αρκεί systemctl reload ssh ή restart ssh.

Έχει όμως σημασία όταν αλλάζετε τη θύρα ή τη διεύθυνση ακρόασης (Port, ListenAddress). Από το Ubuntu 24.04 το systemd διαβάζει αυτές τις τιμές από το sshd_config, αλλά μόνο μετά από:

root@web1:~# systemctl daemon-reload
root@web1:~# systemctl restart ssh.socket

Αν το ξεχάσετε, ο server συνεχίζει απλώς να ακούει στην παλιά θύρα. Χειρότερα: αν ρυθμίσετε πρώτα το firewall σας σε νέα θύρα και το SSH μείνει στην παλιά, κλειδώνεστε έξω. Ελέγχετε πάντα με ss -tlnp | grep ssh πού ακούει πραγματικά ο server (μάθημα 5.1) και ανοίξτε τη νέα θύρα στο firewall σας πριν κλείσετε την παλιά. Αν μια διαφορετική θύρα έχει νόημα, το διαβάζετε στο μάθημα 2.3.

Αν παρ' όλα αυτά κάτι πάει στραβά

Αν δεν μπορείτε πλέον να συνδεθείτε, ανοίξτε την κονσόλα του παρόχου σας, συνδεθείτε ως root (με τον κωδικό πρόσβασης, γιατί η κονσόλα είναι ένα "πληκτρολόγιο συνδεδεμένο στον server" και όχι SSH) και αναιρέστε το αρχείο σας:

root@web1:~# mv /etc/ssh/sshd_config.d/00-beveiliging.conf /root/
root@web1:~# systemctl reload ssh

Αν ούτε αυτό πετύχει, επαναφέρετε το snapshot. Στο WebOké μπορείτε επίσης να ορίσετε νέο κωδικό πρόσβασης root στην οθόνη του VPS· άλλοι πάροχοι έχουν συχνά παρόμοιο κουμπί ή λειτουργία διάσωσης (rescue).

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

Η υπηρεσία ονομάζεται sshd (systemctl reload sshd). Και εκεί υπάρχει ένα Include /etc/ssh/sshd_config.d/*.conf στην αρχή και το σύστημα παραδίδει δικά του αρχεία σε αυτόν τον φάκελο· ισχύει ο ίδιος κανόνας "μετράει η πρώτη τιμή". Αν αλλάξετε τη θύρα, πρέπει το SELinux να επιτρέπει επίσης αυτή τη θύρα (semanage port -a -t ssh_port_t -p tcp 2222) και το firewalld να την ανοίξει.

Σύνοψη

  • Στο sshd_config μετράει η πρώτη τιμή· τα αρχεία στο sshd_config.d διαβάζονται πρώτα. Βάλτε τις δικές σας ρυθμίσεις σε ένα αρχείο όπως το 00-beveiliging.conf.
  • Ορίστε PasswordAuthentication no και KbdInteractiveAuthentication no· ο root μόνο με κλειδί (prohibit-password) ή καθόλου (no).
  • Ελέγξτε με sshd -t πριν από την επαναφόρτωση και με sshd -T ποια τιμή ισχύει πραγματικά· προσέξτε ένα 50-cloud-init.conf.
  • Δοκιμάστε σε δεύτερο παράθυρο και κρατήστε την πρώτη συνεδρία ανοιχτή. Γνωρίστε την κονσόλα και δημιουργήστε εκ των προτέρων ένα snapshot.
  • Στο Ubuntu 24.04+ μια διαφορετική θύρα απαιτεί systemctl daemon-reload και systemctl restart ssh.socket.

Κουίζ

1. Στο τέλος του /etc/ssh/sshd_config υπάρχει PasswordAuthentication no, αλλά μπορείτε ακόμη να συνδεθείτε με κωδικό πρόσβασης. Ποια είναι η πιθανότερη αιτία;



2. Γιατί ορίζετε εκτός από PasswordAuthentication no και KbdInteractiveAuthentication no;



3. Τι σημαίνει το PermitRootLogin prohibit-password;



4. Με ποια σειρά εργάζεστε με τη μεγαλύτερη ασφάλεια;



5. Στο Ubuntu 24.04 αλλάζετε τη γραμμή Port 22 σε Port 2222 και εκτελείτε systemctl restart ssh. Με ss -tlnp βλέπετε ότι ακούει ακόμη στη 22. Τι ξεχάσατε;



Άσκηση

Άσκηση Z2.2: Η σύνδεση με κωδικό πρόσβασης είναι απενεργοποιημένη. Απενεργοποιήστε τη σύνδεση με κωδικό πρόσβασης και το keyboard-interactive όπως σε αυτό το μάθημα και αφήστε στη συνέχεια το πρόγραμμα να ελέγξει από έξω. Συμπληρώστε τη διεύθυνση IP ή το hostname του server σας, τη θύρα SSH (προεπιλογή 22) και το όνομα χρήστη με το οποίο συνδέεστε εσείς (για παράδειγμα anna, όχι root ή ένα επινοημένο όνομα). Το πρόγραμμα δεν συνδέεται: ρωτά μόνο, όπως κάθε SSH client πριν από τη σύνδεση, ποιες μεθόδους σύνδεσης προσφέρει ο server σας για αυτόν τον χρήστη. Σωστό είναι: μόνο publickey.

Άσκηση Z2.2: Η σύνδεση με κωδικό πρόσβασης είναι απενεργοποιημένη

Δεν συνδεόμαστε και δεν δοκιμάζουμε κανέναν κωδικό πρόσβασης ή κλειδί. Πρώτα δείχνετε ότι ο server σάς ανήκει: πατήστε "Εμφάνιση του κωδικού μου" και τοποθετήστε ένα αρχείο /.well-known/weboke-cursus-<code>.txt που περιέχει μόνο αυτόν τον κωδικό στον web server του hostname σας. Το ανακτούμε απευθείας από κάθε διεύθυνση IP που ελέγχουμε (IPv4 και IPv6 ξεχωριστά)· μια εγγραφή TXT δεν μετράει εδώ. Ο έλεγχος γίνεται από το heavy.webawere.nl (185.158.167.16 και 2a07:ae80:100:0:185:158:167:16), όχι από τον δικό μας web server. Μόνο για συνδεδεμένους εκπαιδευόμενους· έως 6 έλεγχοι ανά ώρα ανά server. Ρωτάμε μόνο ποιες μεθόδους σύνδεσης προσφέρει ο server σας για το όνομα χρήστη σας, όπως κάνει κάθε πρόγραμμα-πελάτης SSH πριν από τη σύνδεση. Συμπληρώστε τον δικό σας χρήστη: ένα άγνωστο όνομα καταγράφεται ως "Invalid user" στο αρχείο καταγραφής σας και μετράει στο fail2ban ως μία απόπειρα.





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

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

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

Μια στιγμή…

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

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

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