Tutorial

Comment installer et sécuriser Redis sur Ubuntu 20.04 [Démarrage rapide]

UbuntuNoSQLRedisQuickstartDatabasesUbuntu 20.04

Introduction

Redis est une base de données de valeurs-clés en mémoire renommée pour sa flexibilité, ses performances et son vaste support linguistique. Ce didacticiel de démarrage rapide est conçu pour vous apprendre à installer, configurer et sécuriser Redis sur un serveur Ubuntu 20.04.

Conditions préalables

Pour suivre ces instructions, vous aurez besoin d'accéder à un serveur Ubuntu 20.04 doté d'un non-root user avec des privilèges sudo et un pare-feu configuré avec ufw. Vous pouvez configurer ceci en suivant notre Guide de configuration initiale du serveur pour Ubuntu 20.04.

Étape 1 — Installation et configuration de Redis

Commencez par mettre à jour votre cache local de package apt :

  • sudo apt update

Installez ensuite Redis en saisissant ce qui suit :

  • sudo apt install redis-server

Ensuite, ouvrez le fichier de configuration Redis avec votre éditeur de texte favori :

  • sudo nano /etc/redis/redis.conf

Dans le fichier, recherchez la directive supervised qui vous permet de déclarer un système init qui gérera Redis en tant que tant Étant donné que vous exécutez Ubuntu, qui utilise le système init systemd, remplacez sa valeur no par systemd :

/etc/redis/redis.conf
. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous avez modifié le fichier avec nano, faites-le en appuyant sur CTRL + X, Y, puis sur ENTER.

Ensuite, redémarrez le service Redis pour valider les modifications que vous avez apportées au fichier de configuration :

  • sudo systemctl restart redis.service

Pour vérifier si Redis fonctionne correctement, connectez-vous au serveur à l'aide de redis-cli, le client de la ligne de commande de Redis :

  • redis-cli

Dans l'invite qui suit, testez la connectivité avec la commande ping :

  • ping
Output
PONG

Ce résultat confirme que la connexion au serveur est active. Ensuite, vérifiez que vous pouvez configurer des clés en exécutant les commandes suivantes :

  • set test "It's working!"
Output
OK

Récupérez la valeur en saisissant :

  • get test

En supposant que tout fonctionne correctement, vous pourrez récupérer la valeur que vous avez sauvegardée :

Output
"It's working!"

Après avoir confirmé que la valeur est récupérable, quittez l'invite Redis pour revenir au shell :

  • exit

Étape 2 — Configuration d'un mot de passe Redis

Vous pouvez configurer un mot de passe Redis directement dans le fichier de configuration de Redis, /etc/redis/redis.conf. Ouvrez à nouveau ce fichier avec votre éditeur favori :

  • sudo nano /etc/redis/redis.conf

Faites défiler l'écran jusqu'à la section SECURITY et recherchez une directive commentée indiquant ce qui suit :

/etc/redis/redis.conf
. . .
# requirepass foobared
. . .

Décommentez-la en supprimant le # et remplacez foobared par un mot de passe sécurisé :

/etc/redis/redis.conf
. . .
requirepass your_redis_password
. . .

Une fois le mot de passe configuré, enregistrez et fermez le fichier, puis redémarrez Redis :

  • sudo systemctl restart redis.service

Pour vérifier si le mot de passe fonctionne, ouvrez le client Redis :

  • redis-cli

Ci-après vous voyez une séquence de commandes qui permet de tester le bon fonctionnement du mot de passe Redis. La première commande essaie de définir une clé sur une valeur avant l'authentification :

  • set key1 10

Cela ne fonctionnera pas si vous ne procédez pas à l'authentification. Redis renverra alors une erreur :

Output
(error) NOAUTH Authentication required.

La commande suivante procède à l'authentification avec le mot de passe spécifié dans le fichier de configuration Redis :

  • auth your_redis_password

Redis valide :

Output
OK

Après cela, la ré-exécution de la commande précédente sera probante :

  • set key1 10
Output
OK

get key1 interroge Redis pour obtenir la valeur de la nouvelle clé.

  • get key1
Output
"10"

Après avoir confirmé que vous êtes en mesure d'exécuter des commandes dans le client Redis suite à l'authentification, vous pouvez quitter ​​redis-cli​​​ ​​​:

  • quit

Étape 3 - Renommer les commandes dangereuses

Redis intègre une autre fonctionnalité de sécurité qui consiste à renommer ou à désactiver complètement certaines commandes considérées comme dangereuses. Voici certaines des commandes considérées comme dangereuses : FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME et DEBUG. En désactivant ou en renommant ces commandes ainsi que d'autres, vous rendez toute reconfiguration, destruction ou suppression de vos données plus difficile aux utilisateurs non autorisés.

Pour renommer ou désactiver les commandes Redis, rouvrez le fichier de configuration :

  • sudo nano /etc/redis/redis.conf

Attention : les étapes suivantes qui vous montrent de quelle manière désactiver et renommer des commandes sont données à titre d'exemple. Vous devez décider de désactiver ou de renommer uniquement les commandes qui ont du sens pour vous. Vous pouvez consulter la liste complète des commandes par vous-même et déterminer de quelle manière elles peuvent être utilisées à mauvais escient sur redis.io/commands.

Pour désactiver une commande, renommez-la simplement dans une chaîne de caractères vide (indiquée par une paire de guillemets sans aucun caractère entre eux), comme illustré ci-dessous :

/etc/redis/redis.conf
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .

Pour renommer une commande, donnez-lui un autre nom comme indiqué dans les exemples ci-dessous. Les commandes renommées doivent être difficiles à deviner pour les autres, mais faciles à retenir pour vous :

/etc/redis/redis.conf
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

Sauvegardez vos modifications et fermez le fichier.

Après avoir renommé une commande, appliquez la modification en redémarrant Redis :

  • sudo systemctl restart redis.service

Pour tester la nouvelle commande, saisissez la ligne de commande Redis :

  • redis-cli

Puis procédez à l'authentification :

  • auth your_redis_password
Output
OK

En supposant que vous avez renommé la commande CONFIG avec ASC12_CONFIG comme dans l'exemple précédent, essayez d'utiliser la commande d'origine CONFIG. L'opération devrait échouer, car vous l'avez renommée :

  • config get requirepass
Output
(error) ERR unknown command `config`, with args beginning with:

Toutefois, en saisissant la commande renommée, cela devrait fonctionner. Elle n'est pas sensible à la casse :

  • asc12_config get requirepass
Output
1) "requirepass" 2) "your_redis_password"

Conclusion

Au cours de ce didacticiel de démarrage rapide, vous avez installé et configuré Redis, vérifié que votre installation Redis fonctionne correctement et utilisé ses fonctions de sécurité intégrées pour le rendre moins vulnérable aux attaques d'utilisateurs malveillants.

Creative Commons License