Manager, Developer Education
Une version précédente de ce tutoriel a été rédigée par Justin Ellingwood
Redis est une base de données de valeurs-clés en mémoire renomée pour sa flexibilité, ses performances et son vaste support linguistique. Ce tutoriel est conçu pour vous apprendre à installer, configurer et sécuriser Redis sur un serveur Ubuntu 20.04.
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.
Nous utiliserons le gestionnaire de packages APT pour installer redis à partir des référentiels Ubuntu officiels. À ce jour, la version disponible dans les référentiels par défaut est 5.0.7.
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
Cette opération permettra le téléchargement et l’installation de Redis et de ses dépendances. Suite à cela, vous devez effectuer un changement de configuration important dans le fichier de configuration Redis, qui a été automatiquement généré lors de l’installation.
Ouvrez ce nouveau fichier avec votre éditeur de texte préféré :
- sudo nano /etc/redis/redis.conf
Dans le fichier, trouvez la directive supervised
. Cette directive vous permet de déclarer un système init qui gérera Redis en tant que service et vous donnera plus de contrôle sur son fonctionnement. La directive supervised
est configurée sur no
par défaut. Etant donné vous exécutez Ubuntu, qui utilise le système init systemd, remplacez cette valeur par systemd
:
. . .
# 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
. . .
À ce stade, c’est la seule modification que vous devez apporter au fichier de configuration Redis. Vous pouvez donc le sauvegarder et le fermer une fois l’opération terminée. 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
Ainsi, vous avez installé et configuré Redis et il fonctionne désormais sur votre machine. Avant de commencer à l’utiliser, cependant, il est prudent de vérifier tout d’abord si Redis fonctionne correctement.
Comme pour tout logiciel nouvellement installé, il est conseillé de vous assurer que Redis fonctionne comme prévu avant d’apporter d’autres modifications à sa configuration. Au cours de cette étape, nous allons passer en revue plusieurs façons de vérifier que Redis fonctionne correctement.
Commencez par vérifier si le service Redis fonctionne :
- sudo systemctl status redis
S’il s’exécute sans erreur, cette commande produira un résultat similaire à ce qui suit :
Output● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 36561 (redis-server)
Tasks: 4 (limit: 2345)
Memory: 1.8M
CGroup: /system.slice/redis-server.service
└─36561 /usr/bin/redis-server 127.0.0.1:6379
. . .
Ici, vous pouvez voir que Redis est en cours d’exécution et est déjà activé. Cela signifie qu’il est configuré pour se lancer à chaque fois que le serveur démarre.
Note : ce paramètre est conseillé pour de nombreux cas usuels d’utilisation de Redis. Si, toutefois, vous préférez lancer Redis manuellement à chaque démarrage de votre serveur, vous pouvez le configurer en utilisant la commande suivante :
- sudo systemctl disable redis
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
OutputPONG
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!"
OutputOK
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
Nous allons procéder à un dernier test en vérifiant si Redis est capable de conserver les données même après avoir été arrêté ou redémarré. Pour ce faire, redémarrez tout d’abord l’instance Redis :
- sudo systemctl restart redis
Ensuite, connectez-vous à nouveau le client de la ligne de commande :
- redis-cli
Puis confirmez que votre valeur de test est encore disponible
- get test
La valeur de votre clé devrait encore être accessible :
Output"It's working!"
Une fois que vous avez terminé, sortez pour aller dans le shell :
- exit
Ainsi, votre installation Redis est entièrement opérationnelle et prête à être utilisée. Cependant, certains de ses paramètres de configuration par défaut ne sont pas sécurisés et donnent la possibilité aux acteurs malveillants d’attaquer et d’accéder à votre serveur et à ses données. Les étapes restantes de ce tutoriel couvrent les méthodes qui vous permettront de minimiser ces vulnérabilités, comme prescrit par le site officiel de Redis. Bien que ces étapes soient facultatives et que Redis fonctionnera malgré tout si vous choisissez de ne pas les suivre, il est fortement recommandé de les respecter afin de renforcer la sécurité de votre système.
Par défaut, Redis n’est accessible qu’à partir de localhost. Cependant, si vous avez installé et configuré Redis en suivant un tutoriel différent de celui-ci, vous avez peut-être mis à jour le fichier de configuration et ainsi autorisé les connexions depuis n’importe où. Cette méthode n’est pas aussi sûre qu’une liaison à localhost.
Pour y remédier, ouvrez le fichier de configuration Redis pour le modifier :
- sudo nano /etc/redis/redis.conf
Localisez cette ligne et assurez-vous qu’elle n’est pas commentée (supprimez le #
s’il existe) :
bind 127.0.0.1 ::1
Une fois que vous avez fini, sauvegardez et fermez le fichier (appuyez sur CTRL + X
, Y
, puis sur ENTER
).
Ensuite, redémarrez le service pour vous assurer que systemd lit bien vos modifications :
- sudo systemctl restart redis
Pour vérifier si cette modification est bien entrée en vigueur, exécutez la commande netstat
suivante :
- sudo netstat -lnp | grep redis
Outputtcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server
tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server
Remarque : il se peut que la commande netstat
ne soit pas disponible par défaut sur votre système. Si tel est le cas, vous pouvez l’installer (avec un certain nombre d’autres outils de mise en réseau pratiques) avec la commande suivante :
- sudo apt install net-tools
Ce résultat montre que le programme redis-server
est lié à localhost (127.0.0.1
) et reflète le changement que vous venez de faire au fichier de configuration. Si vous voyez une autre adresse IP dans cette colonne (0.0.0.0
, par exemple), vérifiez si vous avez bien décommenté la bonne ligne et redémarrez le service Redis à nouveau.
Maintenant que votre installation Redis n’écoute que sur localhost, les acteurs malveillants auront plus de mal à faire des requêtes ou à accéder à votre serveur. Cependant, la configuration actuelle de Redis n’oblige pas les utilisateurs à s’authentifier avant de modifier sa configuration ou aux données qu’il contient. Pour y remédier, Redis vous permet d’exiger que les utilisateurs s’authentifient avec un mot de passe avant de pouvoir apporter des modifications via le client Redis (redis-cli
).
La configuration d’un mot de passe Redis permet d’activer l’une de ses deux fonctions de sécurité intégrées - la commande auth
, qui exige à ce que les clients s’authentifient pour accéder à la base de données. La configuration du mot de passe se fait directement dans le fichier de configuration de Redis, /etc/redis/redis.conf
. Donc, ouvrez à nouveau ce fichier avec votre éditeur préféré :
- 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 :
. . .
# requirepass foobared
. . .
Décommentez-la en supprimant le #
et remplacez foobared
par un mot de passe sécurisé.
Remarque : au-dessus de la directive requirepass
dans le fichier redis.conf
, vous trouverez une mise en garde commentée :
. . .
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
. . .
Il est donc important que la valeur du mot de passe soit très forte et très longue. Plutôt que de créer vous-même un mot de passe, vous pouvez utiliser la commande openssl
qui en générera un au hasard, comme dans l’exemple suivant. En redirigeant le résultat de la première commande vers la deuxième commande openssl
, comme illustré ici, cela supprimera tous les sauts de ligne produits par la première commande :
- openssl rand 60 | openssl base64 -A
Votre résultat devrait ressembler à ce qui suit :
OutputRBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE
Après avoir copié et collé le résultat de cette commande comme nouvelle valeur de requirepass
, vous devriez avoir :
/etc/redis/redis.confrequirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE
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
Vous pouvez voir ci-après une séquence de commandes qui permet de tester le bon fonctionnement du mot de passe Redis. La première commande tente de définir une clé sur une valeur avant l’authentification :
- set key1 10
Cela ne fonctionnera pas car vous ne vous êtes pas authentifié et Redis renvoie donc 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 de Redis :
- auth your_redis_password
Redis valide :
OutputOK
Après cela, la ré-exécution de la commande précédente sera probante :
- set key1 10
OutputOK
get key1
interroge Redis pour obtenir la valeur de la nouvelle clé.
- get key1
Output"10"
Après avoir confirmé que vous étiez en mesure d’exécuter des commandes sur le client Redis suite à l’authentification, vous pouvez quitter redis-cli
:
- quit
Ensuite, nous allons voir comment renommer les commandes Redis qui, si elles sont entrées par erreur ou par un acteur malveillant, pourraient endommager sérieusement votre allons
Redis intègre une autre fonctionnalité de sécurité qui consiste à renommer ou à désactiver complètement certaines commandes considérées comme dangereuses.
Lorsqu’elles sont exécutées par des utilisateurs non autorisés, ces commandes peuvent être utilisées pour reconfigurer, détruire ou effacer vos données. Comme le mot de passe d’authentification, la configuration qui permet de renommer ou désactiver les commandes, se fait dans la même section SECURITY
du fichier /etc/redis/redis.conf
.
Voici certaines des commandes considérées comme dangereuses : FLUSHDB
, FLUSHALL
, KEYS
, PEXPIRE
, DEL
, CONFIG
, SHUTDOWN
, BGREWRITEAOF
, BGSAVE
, SAVE
, SPOP
, SREM
, RENAME
, et DEBUG
. Cette liste n’est pas exhaustive, mais c’est un bon point de départ de renommer ou désactiver toutes les commandes de cette liste pour améliorer la sécurité de votre serveur Redis.
Que vous deviez désactiver ou renommer une commande, cela dépend de vos besoins spécifiques ou de ceux de votre site. Si vous savez que vous n’utiliserez jamais une commande qui pourrait faire l’objet d’un abus, vous pouvez la désactiver. Sinon, il serait peut-être dans votre intérêt de la renommer.
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 amniè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 :
. . .
# 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 :
. . .
# 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
Ensuite, authentifiez-vous :
- auth your_redis_password
OutputOK
Supposons que vous avez renommé la commande CONFIG
par ASC12_CONFIG
, comme dans l’exemple précédent. Tout d’abord, essayez d’utiliser la commande originale 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
Output1) "requirepass"
2) "your_redis_password"
Enfin, vous pouvez quitter redis-cli
- exit
Notez que si vous utilisez déjà la ligne de commande Redis et que vous redémarrez ensuite Redis, vous devrez vous réauthentifier. Sinon, vous obtiendrez l’erreur suivante si vous tapez une commande :
OutputNOAUTH Authentication required.
Concernant la pratique de renommer les commandes, une mise en garde se trouve à la fin de la section SECURITY
dans /etc/redis/redis.conf
qui indique ce qui suit :
. . .
# Please note that changing the name of commands that are logged into the
# AOF file or transmitted to replicas may cause problems.
. . .
Note: Le projet Redis choisit d’utiliser les termes «maître» et «esclave», tandis que DigitalOcean préfère généralement les alternatives «primaire» et «secondaire». Pour éviter toute confusion, nous avons choisi d’utiliser ici les termes utilisés dans la documentation Redis.
Cela signifie que si la commande renommée n’est pas dans le fichier AOF, ou si elle l’est mais que le fichier AOF n’a pas été transmis aux esclaves, il ne devrait pas y avoir de problème.
Donc, gardez cela à l’esprit lorsque vous essayez de renommer des commandes. Le meilleur moment pour renommer une commande est lorsque vous n’utilisez pas la persistance AOF ou juste après l’installation, c’est-à-dire avant le déploiement de votre application utilisant Redis.
Lorsque vous utilisez AOF et que vous traitez une installation maître-esclave, prenez en considération cette réponse qui provient de la page de problème GitHub du projet. Voici une réponse à la question de l’auteur :
Les commandes sont journalisées sur l’AOF et répliquées sur l’esclave de la même manière qu’elles sont envoyées. Donc si vous essayez de rejouer l’AOF sur une instance qui n’est pas renommée de la même manière, vous risquez de rencontrer des incohérences car la commande ne peut pas être exécutée (idem pour les esclaves).
Ainsi, dans des cas comme celui-ci, la meilleure façon de gérer le changement de nom consiste à s’assurer que les commandes renommées sont appliquées à toutes les instances dans les installations maître-esclave.
Dans ce didacticiel, vous avez installé et configuré Redis, vérifié que votre installation Redis fonctionne correctement et utilisé ses fonctionnalités de sécurité intégrées pour le rendre moins vulnérable aux attaques d’acteurs malveillants.
Gardez à l’esprit qu’une fois qu’une personne est connectée à votre serveur, il est très facile de contourner les fonctionnalités de sécurité spécifiques à Redis que nous avons mises en place. Par conséquent, la fonctionnalité de sécurité la plus importante de votre serveur Redis reste votre pare-feu (que vous avez configuré si vous avez suivi le tutoriel Configuration initiale du serveur) qui rend extrêmement difficile pour les acteurs malveillants de franchir cette barrière.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
i have set up a password from your advice with openssl but it doesn’t work too i am using redis-server only because redis isn’t work