Redis είναι μια ισχυρή βάση δεδομένων κλειδιού-τιμής στη μνήμη (in-memory key-value store) που μπορεί να χρησιμοποιηθεί ως διακομιστής βάσης δεδομένων, προσωρινή μνήμη (cache) και μεσολαβητής μηνυμάτων (message broker). Είναι ευρέως γνωστό για τη γρήγορη απόδοσή του, την ευελιξία του και την υποστήριξη μιας μεγάλης ποικιλίας γλωσσών. Είναι δωρεάν λογισμικό ανοιχτού κώδικα γραμμένο στη γλώσσα προγραμματισμού C. Σε αυτόν τον οδηγό, δείτε πώς να εγκαταστήσετε και να ασφαλίσετε το Redis στο Ubuntu 18.04.
Προαπαιτούμενα
Για να ακολουθήσετε αυτόν τον οδηγό, θα πρέπει να προετοιμάσετε μερικά πράγματα εκ των προτέρων. Πρέπει να έχετε έναν διακομιστή Ubuntu 18.04, τον οποίο μπορείτε εύκολα να εγκαταστήσετε ακολουθώντας τον οδηγό μας. Επιπλέον, πρέπει να έχετε έναν μη-root χρήστη με δικαιώματα sudo και ένα βασικό τείχος προστασίας (firewall) ρυθμισμένο. Μπορείτε να το ρυθμίσετε αυτό ακολουθώντας τους οδηγούς μας σχετικά με τη διαμόρφωση του αρχείου Linux sudoers και ρύθμιση ενός UFW σε διακομιστή cloud Ubuntu και Debian.
Τώρα, ας ξεκινήσουμε!
Εγκατάσταση του Redis
Το Redis είναι άμεσα διαθέσιμο από το επίσημο αποθετήριο του Ubuntu repo. Αυτός είναι ο απλούστερος τρόπος εγκατάστασης και ρύθμισής του. Συνιστούμε να ακολουθήσετε αυτήν τη διαδρομή, εκτός εάν υπάρχουν συγκεκριμένοι λόγοι για το αντίθετο. Δεδομένου ότι ο πηγαίος κώδικας του Redis διατίθεται δωρεάν, είναι επίσης δυνατή η μεταγλώττιση του Redis από τον πηγαίο κώδικα. Ωστόσο, δεν το συνιστούμε επειδή είναι πιο δύσκολο να το διαχειριστείτε και να το ενημερώσετε.
Εγκατάσταση του Redis από το αποθετήριο του Ubuntu
Αρχικά, ενημερώστε την τοπική προσωρινή μνήμη πακέτων APT:
|
1 |
sudo apt update |
Στη συνέχεια, εγκαταστήστε το Redis με την ακόλουθη εντολή:
|
1 |
sudo apt install redis-server |
Εγκατάσταση του Redis από τον πηγαίο κώδικα
Το Ubuntu δεν συνοδεύεται από τα εργαλεία μεταγλώττισης και τις απαραίτητες βιβλιοθήκες από προεπιλογή. Η ακόλουθη εντολή θα εγκαταστήσει όλα τα απαραίτητα εργαλεία για τη μεταγλώττιση του Redis:
|
1 |
sudo apt install git build-essential |
Υπάρχουν δύο επιπλέον εξαρτήσεις για τη μεταγλώττιση του Redis. Αυτές οι εξαρτήσεις είναι απαραίτητες για τη μεταγλώττιση του Redis με πρόσθετες δυνατότητες, για παράδειγμα, υποστήριξη TLS, ενσωμάτωση systemd κ.λπ. Για να μεταγλωττίσετε το Redis με υποστήριξη TLS, εγκαταστήστε το πακέτο «libssl-dev». Για να μεταγλωττίσετε το Redis για υποστήριξη systemd, εγκαταστήστε το πακέτο «libsystemd-dev»:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Ο πηγαίος κώδικας του Redis είναι διαθέσιμος στο GitHub. Δείτε τη σελίδα του Redis στο GitHub. Στη συνέχεια, λάβετε τον πηγαίο κώδικα:
|
1 |
git clone https://github.com/redis/redis.git |
Αλλάξτε τον τρέχοντα ενεργό κατάλογο στον κατάλογο του πηγαίου κώδικα του Redis:
|
1 |
cd redis/ |
Μετά από αυτό, εκτελέστε το εργαλείο make για να ξεκινήσει η μεταγλώττιση. Θα μεταγλωττίσει το Redis χωρίς πρόσθετα στοιχεία:
|
1 |
make -j$(nproc) |
Για να ενεργοποιήσετε την υποστήριξη TLS (υποθέτοντας ότι το «libssl-dev» είναι εγκατεστημένο), χρησιμοποιήστε αντ' αυτού την ακόλουθη εντολή:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Για να ενεργοποιήσετε την υποστήριξη για το systemd (υποθέτοντας ότι το «libsystemd-dev» είναι εγκατεστημένο), χρησιμοποιήστε την ακόλουθη εντολή:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Στη συνέχεια, ελέγξτε εάν η μεταγλώττιση ήταν επιτυχής. Σημειώστε ότι μπορεί να απαιτείται ένα επιπλέον πακέτο «tcl-dev» και οι σχετικές εξαρτήσεις για την εκτέλεση της δοκιμής:
|
1 |
make test |
Τέλος, εγκαταστήστε το Redis εκτελώντας την ακόλουθη εντολή:
|
1 |
sudo make install |
Εάν το Redis δημιουργήθηκε χρησιμοποιώντας TLS, τότε η εκτέλεση του διακομιστή θα πρέπει να γίνει με τον ακόλουθο τρόπο:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Ρύθμιση του Redis
Μόλις ολοκληρωθεί η εγκατάσταση, ήρθε η ώρα να ρυθμίσετε το Redis. Ανοίξτε το αρχείο ρυθμίσεων του Redis σε έναν επεξεργαστή κειμένου και μετακινηθείτε προς τα κάτω στην ενότητα «supervised»:
|
1 |
sudo vim /etc/redis/redis.conf |
Αλλάξτε την τιμή του «supervised» σε «systemd». Αυτό θα διασφαλίσει ότι η υπηρεσία Redis θα διαχειρίζεται από το systemd. Για να εφαρμοστούν οι αλλαγές, επανεκκινήστε την υπηρεσία Redis:
|
1 |
sudo systemctl restart redis.service |
Δοκιμή του Redis
Είναι πάντα καλή ιδέα να δοκιμάζετε εάν το Redis λειτουργεί σωστά πριν το χρησιμοποιήσετε περαιτέρω. Ακολουθούν μερικοί τρόποι για να δοκιμάσετε τη συμπεριφορά του Redis. Το πρώτο βήμα είναι να ελέγξετε εάν η υπηρεσία Redis είναι ενεργή και εκτελείται:
|
1 |
sudo systemctl status redis |
Εδώ, το Redis εκτελείται ήδη. Από προεπιλογή, η υπηρεσία Redis θα ξεκινά κατά την εκκίνηση. Εάν η υπηρεσία Redis πρόκειται να εκτελείται χειροκίνητα, τότε απενεργοποιήστε την:
|
1 |
sudo systemctl disable redis |
Η επόμενη δοκιμή είναι ο έλεγχος με χρήση της κονσόλας Redis. Εκκινήστε τον πελάτη γραμμής εντολών του Redis:
|
1 |
redis-cli |
Εκτελέστε την εντολή «ping»:
|
1 |
ping |
Το αποτέλεσμα επιβεβαιώνει ότι η σύνδεση με τον διακομιστή είναι ακόμα ενεργή. Η επόμενη δοκιμή είναι να δούμε αν επιτρέπει τον ορισμό κλειδιών. Δημιουργήστε ένα κλειδί «temp» με την τιμή «hello world»:
|
1 |
set temp “hello world” |
Ανακτήστε την τιμή χρησιμοποιώντας την εντολή «get»:
|
1 |
get temp |
Εάν όλα λειτουργούν καλά μέχρι στιγμής, το Redis θα πρέπει να επιστρέψει την τιμή του κλειδιού χωρίς κανένα πρόβλημα. Κλείστε τον πελάτη γραμμής εντολών του Redis:
|
1 |
exit |
Η τελική δοκιμή είναι να ελέγξετε αν το Redis μπορεί να διατηρήσει τα δεδομένα ακόμα και αν σταματήσει ή επανεκκινηθεί. Επανεκκινήστε την υπηρεσία Redis:
|
1 |
sudo systemctl restart redis |
Εάν λάβετε σφάλμα κατά την εκτέλεση της παραπάνω εντολής, τότε χρησιμοποιήστε την εντολή “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Εκκινήστε τον πελάτη γραμμής εντολών του Redis και ανακτήστε την τιμή του κλειδιού «temp» που δημιουργήσαμε προηγουμένως:
|
1 2 |
redis-cli get temp |
Αυτό ολοκληρώνει τη δοκιμή του Redis. Ο διακομιστής Redis είναι πλέον έτοιμος να χρησιμοποιηθεί για τον επιθυμητό σκοπό.
Ασφάλιση του Redis
Σε αυτό το σημείο, το Redis είναι πλήρως λειτουργικό. Ωστόσο, ορισμένες από τις προεπιλεγμένες ρυθμίσεις του δεν προσφέρουν την καλύτερη ασφάλεια. Εάν δεν ενημερωθούν, οποιοσδήποτε κακόβουλος χρήστης μπορεί να εκμεταλλευτεί την ευκαιρία για να αποκτήσει πρόσβαση στον διακομιστή και στα δεδομένα του. Αυτή η ενότητα θα δείξει πώς να μετριάσετε αυτές τις ευπάθειες. Αν και αυτά τα βήματα είναι προαιρετικά, συνιστάται ανεπιφύλακτα να τα ακολουθήσετε για να ενισχύσετε την ασφάλεια του συστήματος.
Σύνδεση στο localhost
Από προεπιλογή, το Redis είναι προσβάσιμο μόνο από το localhost. Ωστόσο, εάν το Redis έχει ρυθμιστεί σε έναν απομακρυσμένο διακομιστή, τότε η ρύθμιση παραμέτρων πρέπει να ενημερωθεί ώστε να επιτρέπει τη σύνδεση από οπουδήποτε. Ωστόσο, αυτό ενδέχεται να μην είναι τόσο ασφαλές όσο η σύνδεση στο localhost. Για να συνδέσετε ξανά το Redis στο localhost, ανοίξτε το αρχείο ρυθμίσεων του Redis σε έναν επεξεργαστή κειμένου:
|
1 |
sudo vim /etc/redis/redis.conf |
Κυλήστε προς τα κάτω και βρείτε το ακόλουθο. Βεβαιωθείτε ότι δεν είναι σε σχόλιο:
|
1 |
bind 127.0.0.1 ::1 |
Αποθηκεύστε και κλείστε το αρχείο. Στη συνέχεια, επανεκκινήστε την υπηρεσία Redis για να βεβαιωθείτε ότι η αλλαγή θα τεθεί σε ισχύ αμέσως:
|
1 |
sudo systemctl restart redis |
Βεβαιωθείτε ότι η αλλαγή ήταν επιτυχής:
|
1 |
sudo netstat -lnp | grep redis |
Εάν λάβετε σφάλμα όπως ‘netstat: command not found’, τότε χρησιμοποιήστε την εντολή για να εγκαταστήσετε το net-tools “sudo apt-get install net-tools”. Το αποτέλεσμα επαληθεύει ότι το «redis-server» έχει συνδεθεί με επιτυχία στο localhost (127.0.0.1), αντικατοπτρίζοντας την αλλαγή που έγινε πρόσφατα. Εάν υπάρχει οποιαδήποτε άλλη διεύθυνση IP (για παράδειγμα, 0.0.0.0), τότε ελέγξτε ξανά το αρχείο ρυθμίσεων και επανεκκινήστε ξανά τον διακομιστή Redis.
Ρύθμιση κωδικού πρόσβασης Redis
Η ρύθμιση ενός κωδικού πρόσβασης επιτρέπει τη χρήση μιας ενσωματωμένης δυνατότητας ασφαλείας του Redis – της εντολής «AUTH». Απαιτεί από τους πελάτες να ταυτοποιούνται για να αποκτήσουν πρόσβαση στη βάση δεδομένων. Από προεπιλογή, το Redis δεν έχει ρυθμισμένο κωδικό πρόσβασης. Ο κωδικός πρόσβασης πρέπει να δηλωθεί στο αρχείο ρυθμίσεων του Redis. Ανοίξτε το αρχείο ρυθμίσεων σε έναν επεξεργαστή κειμένου:
|
1 |
sudo vim /etc/redis/redis.conf |
Στη συνέχεια, κυλήστε προς τα κάτω στην ακόλουθη γραμμή και αφαιρέστε το σχόλιο:
|
1 |
requirepass foobared |
Μετά την αφαίρεση του σχολίου, το «foobared» θα είναι ο προεπιλεγμένος κωδικός πρόσβασης. Αλλάξτε τον στον κωδικό πρόσβασης της επιλογής σας. Όσον αφορά το Redis, η ισχύς του κωδικού πρόσβασης είναι ένας σημαντικός παράγοντας ανησυχίας. Καθώς το Redis είναι ένας διακομιστής γρήγορης απόδοσης, είναι δυνητικά ευκολότερο να γίνει αντικείμενο εκμετάλλευσης με επιθέσεις brute-force. Αυτός είναι ο λόγος για τον οποίο το αρχείο ρυθμίσεων περιέχει απευθείας την ακόλουθη προειδοποίηση. Ακολουθεί ένα γρήγορο παράδειγμα δημιουργίας ενός πολύ ισχυρού τυχαίου κωδικού πρόσβασης. Θα χρησιμοποιήσουμε την εντολή OpenSSL για να δημιουργήσουμε μια τυχαία συμβολοσειρά:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Μετά τη διαμόρφωση ενός νέου κωδικού πρόσβασης, επανεκκινήστε την υπηρεσία Redis για να τεθούν σε ισχύ οι αλλαγές:
|
1 |
sudo systemctl restart redis.service |
Ήρθε η ώρα να δοκιμάσετε εάν ο κωδικός πρόσβασης εφαρμόστηκε με επιτυχία. Εκκινήστε την κονσόλα γραμμής εντολών του Redis:
|
1 |
redis-cli |
Στη συνέχεια, προσπαθήστε να ορίσετε ένα νέο κλειδί:
|
1 |
set user “cloudsigma” |
Το Redis θα απορρίψει το αίτημα καθώς δεν υπάρχει έλεγχος ταυτότητας για την ενέργεια. Για να εκτελέσει οποιαδήποτε ενέργεια στον διακομιστή, ο χρήστης πρέπει πρώτα να εξουσιοδοτηθεί. Εξουσιοδοτήστε τον χρήστη χρησιμοποιώντας την ακόλουθη εντολή:
|
1 |
auth <κωδικός πρόσβασης> |
Εάν ο κωδικός πρόσβασης ήταν σωστός, το Redis θα επιβεβαιώσει την ενέργεια. Τώρα, το Redis θα επιτρέψει την πρόσβαση στις λειτουργίες του διακομιστή του:
|
1 2 |
set user “cloudsigma” get user |
Προς το παρόν, η εργασία μας με την κονσόλα Redis έχει ολοκληρωθεί. Μπορείτε να κλείσετε την κονσόλα:
|
1 |
exit |
Μετονομασία επικίνδυνων εντολών
Το Redis επιτρέπει τη μετονομασία ή την πλήρη απενεργοποίηση ορισμένων εντολών που θεωρούνται επικίνδυνες. Αυτό είναι ένα άλλο σημαντικό ενσωματωμένο χαρακτηριστικό ασφαλείας του Redis. Γιατί οι εντολές θεωρούνται επικίνδυνες; Εάν εκτελεστούν από μη εξουσιοδοτημένο χρήστη, αυτές οι εντολές μπορούν να αναδιαμορφώσουν, να καταστρέψουν ή να διαγράψουν δεδομένα στον διακομιστή. Είναι κοινή πρακτική η απενεργοποίηση/μετονομασία μιας σειράς επικίνδυνων εντολών του Redis. Σημειώστε ότι η απειλή ασφαλείας μιας εντολής εξαρτάται από την κατάσταση. Για παράδειγμα, ορισμένες από τις ακόλουθες εντολές ενδέχεται να είναι απαραίτητες σε τακτική βάση. Σε τέτοιες περιπτώσεις, η απενεργοποίησή τους δεν συνιστάται. Σε μια τέτοια κατάσταση, η μετονομασία της εντολής μπορεί να αποδειχθεί πιο επωφελής. Ακολουθεί μια γρήγορη λίστα με τις εντολές που θεωρούνται επικίνδυνες. Αυτό είναι ένα καλό σημείο εκκίνησης για την ενίσχυση της ασφάλειας του διακομιστή Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Για να μετονομαστεί ή να απενεργοποιηθεί μια εντολή, πρέπει να δηλωθεί στο αρχείο ρυθμίσεων του Redis. Ανοίξτε το αρχείο ρυθμίσεων του Redis και προσθέστε τις ακόλουθες γραμμές. Εδώ, το “rename-command” χρησιμοποιείται για τη μετονομασία των εντολών σε μια κενή συμβολοσειρά. Προσθέστε όσες καταχωρίσεις είναι απαραίτητο:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Ομοίως, είναι επίσης δυνατή η μετονομασία των εντολών σε διαφορετικό όνομα. Σε ορισμένες περιπτώσεις, αυτό μπορεί να προσφέρει μεγαλύτερη ευελιξία:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Αποθηκεύστε το αρχείο και βγείτε από τον επεξεργαστή κειμένου. Για να τεθούν σε ισχύ οι αλλαγές, επανεκκινήστε την υπηρεσία Redis:
|
1 |
sudo systemctl restart redis.service |
Επαληθεύστε τις αλλαγές. Στη συνέχεια, εκκινήστε την κονσόλα Redis και πιστοποιήστε την πρόσβαση:
|
1 2 |
redis-cli auth <password> |
Ας υποθέσουμε ότι η εντολή “CONFIG” απενεργοποιήθηκε ή μετονομάστηκε. Δοκιμάστε να χρησιμοποιήσετε την ακόλουθη εντολή “CONFIG”. Θα αποτύχει:
|
1 |
config get requirepass |
Εάν η εντολή απενεργοποιήθηκε, τότε δεν είναι δυνατή η πρόσβαση σε αυτήν μέχρι να ενεργοποιηθεί ξανά. Ωστόσο, εάν μετονομάστηκε, τότε χρησιμοποιήστε το νέο ψευδώνυμο:
|
1 |
command_4 get requirepass |
Συμπέρασμα
Αυτός ο οδηγός δείχνει πώς να εγκαταστήσετε, να ασφαλίσετε, να διαμορφώσετε και να επικυρώσετε μια εγκατάσταση Redis. Δείχνει επίσης πώς να χρησιμοποιήσετε τα ενσωματωμένα χαρακτηριστικά ασφαλείας του Redis για να το κάνετε λιγότερο ευάλωτο σε επιθέσεις. Ωστόσο, εάν κάποιος είναι ήδη συνδεδεμένος στον διακομιστή, είναι αρκετά εύκολο να παρακάμψει τα ειδικά χαρακτηριστικά ασφαλείας του Redis. Αυτός είναι ο λόγος για τον οποίο η ύπαρξη ενός τείχους προστασίας για την προστασία της πρόσβασης στον διακομιστή Redis είναι κρίσιμης σημασίας.
Καλή συνέχεια!






Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.