Η πρώτη εκτέλεση του Lynis σε καινούριο VPS δίνει συνήθως κάτι γύρω στο 60 και μια μακριά λίστα προτάσεων στην οποία δεν είναι σαφές τι να πιάσετε πρώτο. Τα καλά νέα: το 80 με 85 είναι δουλειά ενός απογεύματος και τα περισσότερα βήματα δεν είναι καλλωπιστικά αλλά αξίζουν πραγματικά. Τα κακά νέα: οι τελευταίοι δεκαπέντε βαθμοί είναι απρόσιτοι σε νοικιασμένη εικονική μηχανή και το κυνήγι τους είναι λάθος.

Τι δείχνει ο δείκτης και τι δεν δείχνει

Ο δείκτης θωράκισης είναι ο λόγος των επιτυχημένων ελέγχων προς το σύνολο, με βάρη — όχι ποσοστό ασφάλειας. Το Lynis τρέχει καμιά τριακοσαριά ελέγχους και παράγει δύο ξεχωριστές λίστες: τα warnings, που μοιάζουν με πραγματικά προβλήματα, και τα suggestions, που είναι πράγματα που θα μπορούσαν να βελτιωθούν. Ξεκινάτε πάντα από τις προειδοποιήσεις· συνήθως είναι μια χούφτα.

Το εκατό δεν υπάρχει: ορισμένες προτάσεις απαιτούν αποφάσεις που παίρνονται κατά την εγκατάσταση του συστήματος (χωριστά διαμερίσματα για /home, /tmp και /var), άλλες χρειάζονται πρόσβαση στον φορτωτή εκκίνησης που ένα VPS δεν έχει, και κάποιες αντιφάσκουν μεταξύ τους. Και η σύγκριση του δείκτη σας με τον ξένο είναι άσκοπη: το Lynis αφαιρεί βαθμούς για ό,τι τρέχει στο μηχάνημα. Κάθε υπηρεσία που τρέχει είναι μία ακόμη ανοιχτή θύρα, η δική της ρύθμιση και μια ντουζίνα νέες προτάσεις — γι' αυτό οι υψηλοί αριθμοί συναντώνται συχνότερα εκεί όπου δεν τρέχει τίποτα εκτός από SSH. Για έναν διακομιστή σε λειτουργία με ιστότοπο, βάση δεδομένων και ταχυδρομείο, το 85 είναι καλό αποτέλεσμα.

Εκτελέστε το ως root

sudo lynis audit system

Χωρίς sudo το Lynis παρακάμπτει κάθε έλεγχο που χρειάζεται αρχεία συστήματος και αναφέρει χαμηλότερο δείκτη — όχι επειδή ο διακομιστής είναι κακός αλλά επειδή οι έλεγχοι ήταν αόρατοι. Η αναφορά γράφεται στο /var/log/lynis-report.dat, το αναγνώσιμο αρχείο στο /var/log/lynis.log.

Κάθε γραμμή της εξόδου ξεκινά με ένα αναγνωριστικό ελέγχου, όπως SSH-7408 ή KRNL-6000. Με αυτό το αναγνωριστικό βρίσκετε και την εξήγηση και τον τρόπο να απενεργοποιήσετε έναν έλεγχο — θυμηθείτε τη μορφή του, όλα τα παρακάτω γυρίζουν γύρω από αυτό.

Τι κινεί πραγματικά τον αριθμό

SSH (SSH-7408). Το βαρύτερο μπλοκ: ένας μόνο έλεγχος εξετάζει μια ντουζίνα παραμέτρους ταυτόχρονα. Μην επεξεργαστείτε ολόκληρο το sshd_config· αφήστε ένα ξεχωριστό αρχείο ώστε μια ενημέρωση πακέτου να μη σβήσει τη δουλειά σας:

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 2
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
TCPKeepAlive no
EOF
sudo sshd -t && sudo systemctl reload ssh

Το sshd -t πριν την επαναφόρτωση της υπηρεσίας είναι υποχρεωτικό: ένα λάθος στη ρύθμιση ενώ η συνεδρία σας είναι ζωντανή θα σας αφήσει απέξω. Και πριν βάλετε PasswordAuthentication no, βεβαιωθείτε ότι το κλειδί δουλεύει πραγματικά — από ένα δεύτερο ανοιχτό τερματικό.

Παράμετροι πυρήνα (KRNL-6000). Ο έλεγχος εξετάζει καμιά εικοσαριά τιμές sysctl. Ένα αρχείο γι' αυτές:

sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sudo sysctl --system

Εργαλεία που λείπουν. Αρκετό μέρος των προτάσεων είναι απλώς «εγκαταστήστε ό,τι δεν υπάρχει»: auditd (καταγραφή συμβάντων συστήματος), aide (ακεραιότητα αρχείων), debsums (ακεραιότητα πακέτων), unattended-upgrades (αυτόματες ενημερώσεις ασφαλείας), sysstat και acct (λογιστική διεργασιών), ένας σαρωτής κακόβουλου λογισμικού. Καθένα κλείνει μία ή δύο προτάσεις, αλλά μην τα εγκαταστήσετε για τους βαθμούς: χωρίς αυτά δεν θα ανασυνθέσετε τίποτα μετά από περιστατικό.

Μικρά πράγματα με καλή σχέση κόπου και ανταμοιβής. umask 027 στο /etc/login.defs· γήρανση κωδικών στο ίδιο αρχείο· τα μηνύματα στα /etc/issue και /etc/issue.net· μεταγλωττιστές αναγνώσιμοι μόνο από τον root (chmod 700 /usr/bin/gcc). Για τα μηνύματα, ειλικρινά: για την ασφάλεια δεν κάνουν τίποτα, είναι νομική τυπικότητα — αλλά δίνουν έναν βαθμό.

Μια παγίδα στο login.defs

Η επεξεργασία του umask με αντικατάσταση γραμμής μέσω sed αφήνει συχνά αρκετές γραμμές UMASK στο αρχείο ταυτόχρονα. Τότε το Lynis δεν μετρά την τιμή και ο έλεγχος AUTH-9328 μένει κόκκινος αν και η ρύθμιση φαίνεται ολοκληρωμένη. Ελέγξτε μετά την επεξεργασία:

grep -c '^UMASK' /etc/login.defs

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

Ψευδώς θετικά και πώς να τα σιγήσετε σωστά

Ορισμένες προειδοποιήσεις δεν αφορούν καθόλου τον δικό σας διακομιστή. Ένα ζωντανό παράδειγμα: στο VPS ενός μεγάλου παρόχου ο έλεγχος PKGS-7388 αναφέρει ότι δεν βρέθηκε αποθετήριο ασφαλείας — απλώς επειδή τα αποθετήρια περιγράφονται σε μορφή deb822 με αναφορά σε αρχείο κατόπτρου και το Lynis ψάχνει τη γνώριμη γραμμή. Οι ενημερώσεις ασφαλείας φτάνουν μια χαρά.

Σιγήστε το όχι διαγράφοντας γραμμές από την αναφορά αλλά με ένα προφίλ. Τα αρχεία προφίλ χρησιμοποιούν την κατάληξη .prf (όχι .prof — εύκολα χάνεται εκεί μισή ώρα) και οι δικοί σας κανόνες πάνε στο /etc/lynis/custom.prf:

skip-test=PKGS-7388
skip-test=KRNL-5788

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

Τι να μην κάνετε

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

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