Instalé un servidor redis y tengo varios clientes que usan Mysql para sus sitios de WordPress. He configurado redis y funciona bien. Ahora quiero algún tipo de seguridad, como que uno de mis clientes pueda cambiar a otras bases de datos redis y pueda enumerar todas las claves de todos los clientes, quiero evitarlo.
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"
Ya lo he intentado creando una base de datos separada y asignada a cada cliente.
¿Hay alguna manera de evitar que los usuarios enumeren claves o creen usuarios para cada base de datos como en mysql?
Desde Redis 6.0, es compatible LCA. En su caso, puede crear usuarios para diferentes clientes y limitar el control de acceso para cada usuario.
Por ejemplo, puede crear un usuario (con contraseña: Contraseña) llamado ortizfurtque solo tiene acceso a claves que comienzan con s-dev-ortizfurt.:
ACL SETUSER ortizfurt on >passwd ~s-dev-ortizfurt.:* +@all
-
ahora tengo redis 6 en el servidor. He configurado una base de datos específica para un usuario específico que es s-dev-lake-anitax. Las claves actuales son
"s-dev-lake-anitaxkGd:default:is_blog_installed" "s-dev-lake-anitaxkGd:post_meta:1"
y ejecutó el comando ACL SETUSER s-dev-lake-anitax en >123 ~s-dev-lake-anitaxkGd:* +@all producción: (error) ERR Error en el modificador ACL SETUSER ‘~s-dev-lake-anitaxkGd:*’: agregar un patrón después del patrón * (o el indicador ‘allkeys’) no es válido y no tiene ningún efecto. Pruebe ‘resetkeys’ para comenzar con una lista vacía de patrones– wajahat021
3 de diciembre de 2020 a las 14:56
-
Parece que ya agregaste una regla para todas las claves, por ejemplo
ACL SETUSER user on >pass ~* +@all
oACL SETUSER user on >pass allkeys +@all
. En este caso, como dice el mensaje de error, no puede agregar otra regla, ya que esta regla de todas las claves ya cubre otras reglas.– para_pila
4 de diciembre de 2020 a las 0:31
-
AUTH alex secreto
– para_pila
4 de diciembre de 2020 a las 7:52
-
Apoyo totalmente la respuesta de @ for_stack, pero otra forma (mucho más segura, algo más administrativa) es tener una instancia dedicada (Redis) por usuario. Esto puede tener menos sentido en implementaciones pequeñas, pero dado que la sobrecarga del servidor Redis es casi 0, proporciona un camino lucrativo hacia la tenencia múltiple.
– Itamar Haber
4 de diciembre de 2020 a las 16:10
-
@ wajahat021 En primer lugar, no debe usar
KEYS
comando, ya que es un comando lento y podría bloquear Redis. Configura ACL con un patrón de clave, mientras que el comando KEYS no tiene una clave como argumento, por lo que creo que Redis no puede aplicar su regla al comando KEYS.– para_pila
8 de diciembre de 2020 a las 8:28
Según la documentación, aquí redis proporciona un mecanismo de autenticación básico,
Fragmento exacto de la documentación.
Si bien Redis no intenta implementar el control de acceso, proporciona una pequeña capa de autenticación que se activa opcionalmente al editar el archivo redis.conf.
Cuando la capa de autorización está habilitada, Redis rechazará cualquier consulta de clientes no autenticados. Un cliente puede autenticarse enviando el comando AUTH seguido de la contraseña.
Tenga en cuenta que la contraseña estará en texto sin formato en el archivo redis.conf y está sujeta a que la vean personas no autorizadas si tienen acceso a ella.
Además, redis proporciona un mecanismo para cambiar el nombre o deshabilitar un comando específico, fragmento exacto del mismo documento anterior,
es posible deshabilitar los comandos en Redis o cambiarles el nombre a un nombre indescifrable, de modo que los clientes normales se limiten a un conjunto específico de comandos.
Aquí hay algunos consejos de alto nivel sobre cómo asegurar una implementación de redis
- Vincular redis a localhost
- Configure AUTH habilitando requirepass en redis.conf
- Renombrar o deshabilitar comandos peligrosos