Redis-Schlüsselsicherheit für mehrere Benutzer

Lesezeit: 4 Minuten

Ich habe einen Redis-Server installiert und mehrere Kunden verwenden MySQL für ihre WordPress-Sites. Ich habe Redis konfiguriert und es funktioniert einwandfrei. Jetzt möchte ich eine Art Sicherheit, wie zum Beispiel, dass einer meiner Clients zu anderen Redis-Datenbanken wechseln und alle Schlüssel aller Clients auflisten kann. Ich möchte dies verhindern.

root@rest: redis-cli
x.x.x.x:6379> KEYS *

 1) "s-dev-ortizfurt.:terms:last_changed"
 2) "s-dev-mayerhaven.:terms:get_terms-8fe839c888a1f5dc584d66e75abe752b-0.12728000 1606912094"
 3) "s-dev-ortizfurt.:post_tag_relationships:1"
 4) "s-dev-mayerhaven.:post_meta:3"
 5) "s-dev-mayerhaven.:comment:last_changed"
 6) "s-dev-mayerhaven.:site-transient:theme_roots"
 7) "s-dev-ortizfurt.:posts:last_changed"
 8) "s-dev-mayerhaven.:redis-cache:metrics"
 9) "s-dev-ortizfurt.:comment:1"
10) "s-dev-mayerhaven.:site-transient:update_plugins"
11) "s-dev-mayerhaven.:options:alloptions"
12) "s-dev-ortizfurt.:posts:3"
13) "s-dev-ortizfurt.:user_meta:1"
14) "s-dev-ortizfurt.:post_meta:1"
15) "s-dev-ortizfurt.:users:1"
16) "s-dev-ortizfurt.:terms:1"
17) "s-dev-mayerhaven.:comment:1"
18) "s-dev-mayerhaven.:terms:1"
19) "s-dev-mayerhaven.:term_meta:1"
20) "s-dev-mayerhaven.:options:can_compress_scripts"
21) "s-dev-ortizfurt.:post_meta:3"
22) "s-dev-mayerhaven.:site-transient:update_core"
23) "s-dev-ortizfurt.:options:notoptions"
24) "s-dev-mayerhaven.:post_format_relationships:1"
25) "s-dev-ortizfurt.:terms:get_terms-6a7e5a5984989e684e977a4689029aeb-0.03989400 1606912075"
26) "s-dev-mayerhaven.:posts:1"
27) "s-dev-ortizfurt.:default:is_blog_installed"
28) "s-dev-ortizfurt.:comment:last_changed"
29) "s-dev-ortizfurt.:site-options:1-notoptions"
30) "s-dev-mayerhaven.:comment:get_comments-a83484ce4441a2d87a90609f886c4a28-0.14044500 1606912094"
31) "s-dev-ortizfurt.:comment_meta:1"
32) "s-dev-mayerhaven.:default:is_blog_installed"
33) "s-dev-ortizfurt.:posts:wp_get_archives-10425ab9cab74a55e05d28aee32fbd7a-0.05052900 1606912075"
34) "s-dev-ortizfurt.:terms:get_terms-fa6fef0e8f76461d0c23f81cca942240-0.03989400 1606912075"
35) "s-dev-mayerhaven.:posts:3"

Ich habe es bereits versucht, indem ich eine separate Datenbank erstellt und jedem Client zugewiesen habe.

Gibt es eine Möglichkeit, Benutzer daran zu hindern, Schlüssel aufzulisten oder Benutzer für jede Datenbank zu erstellen, wie in MySQL?

Seit Redis 6.0 wird es unterstützt ACL. In Ihrem Fall können Sie Benutzer für verschiedene Clients erstellen und die Zugriffskontrolle für jeden Benutzer einschränken.

Sie können beispielsweise einen Benutzer erstellen (mit Passwort: Passwort) genannt Ortizfurtder nur Zugriff auf Schlüssel hat, die mit beginnen s-dev-ortizfurt.:

ACL SETUSER ortizfurt on >passwd ~s-dev-ortizfurt.:* +@all

  • Ich habe jetzt Redis 6 auf dem Server. Ich habe eine bestimmte Datenbank für einen bestimmten Benutzer festgelegt, nämlich die aktuellen Schlüssel von s-dev-lake-anitax "s-dev-lake-anitaxkGd:default:is_blog_installed" "s-dev-lake-anitaxkGd:post_meta:1" und führte den Befehl ACL SETUSER s-dev-lake-anitax auf >123 ~s-dev-lake-anitaxkGd:* +@all aus Ausgang: (Fehler) ERR Fehler im ACL SETUSER-Modifikator „~s-dev-lake-anitaxkGd:*“: Das Hinzufügen eines Musters nach dem *-Muster (oder dem „allkeys“-Flag) ist ungültig und hat keine Auswirkung. Versuchen Sie es mit „resetkeys“, um mit einer leeren Musterliste zu beginnen

    – wajahat021

    3. Dezember 2020 um 14:56 Uhr


  • Es scheint, dass Sie bereits eine Regel für alle Schlüssel hinzugefügt haben, z ACL SETUSER user on >pass ~* +@alloder ACL SETUSER user on >pass allkeys +@all. In diesem Fall können Sie, wie in der Fehlermeldung angegeben, keine weitere Regel hinzufügen, da diese Alle-Schlüssel-Regel bereits andere Regeln abdeckt.

    – for_stack

    4. Dezember 2020 um 0:31

  • AUTH Alex Geheimnis

    – for_stack

    4. Dezember 2020 um 7:52 Uhr

  • Ich unterstütze die Antwort von @for_stack voll und ganz, aber eine andere Möglichkeit (viel sicherer, etwas verwaltungsintensiver) besteht darin, pro Benutzer eine dedizierte (Redis-)Instanz zu haben. Dies mag bei kleinen Bereitstellungen weniger Sinn machen, bietet aber angesichts der Tatsache, dass der Redis-Server-Overhead nahezu Null beträgt, einen lukrativen Weg zur Mandantenfähigkeit.

    – Itamar Haber

    4. Dezember 2020 um 16:10 Uhr

  • @wajahat021 Zunächst einmal sollten Sie es nicht verwenden KEYS Befehl, da es sich um einen langsamen Befehl handelt und möglicherweise Redis blockiert. Sie konfigurieren ACL mit einem Schlüsselmuster, während der KEYS-Befehl keinen Schlüssel als Argument hat. Daher denke ich, dass Redis Ihre Regel nicht auf den KEYS-Befehl anwenden kann.

    – for_stack

    8. Dezember 2020 um 8:28

Gemäß der Dokumentation, Hier Redis bietet einen grundlegenden Authentifizierungsmechanismus.

Genauer Ausschnitt aus der Dokumentation

Während Redis nicht versucht, die Zugriffskontrolle zu implementieren, bietet es eine kleine Authentifizierungsebene, die optional beim Bearbeiten der redis.conf-Datei aktiviert wird.

Wenn die Autorisierungsschicht aktiviert ist, lehnt Redis jede Anfrage durch nicht authentifizierte Clients ab. Ein Client kann sich authentifizieren, indem er den AUTH-Befehl gefolgt vom Passwort sendet.

Bitte beachten Sie, dass das Passwort im Klartext in der Datei redis.conf enthalten ist und von Unbefugten eingesehen werden kann, wenn diese Zugriff darauf haben.

Darüber hinaus bietet Redis einen Mechanismus zum Umbenennen oder Deaktivieren bestimmter Befehle, genauer Ausschnitt aus demselben Dokument oben.

Es ist möglich, Befehle in Redis zu deaktivieren oder in einen nicht zu erratenden Namen umzubenennen, sodass normale Clients auf einen bestimmten Befehlssatz beschränkt sind.

Hier finden Sie einige allgemeine Hinweise zum Sichern einer Redis-Bereitstellung

  • Binden Sie Redis an localhost
  • Konfigurieren Sie AUTH, indem Sie „requirepass“ in redis.conf aktivieren
  • Gefährliche Befehle umbenennen oder deaktivieren

1450860cookie-checkRedis-Schlüsselsicherheit für mehrere Benutzer

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy