Como desativar o 'modo protegido' no Redis?

3

Gostaria de desativar protected-mode na minha produção Redis. Em relação ao seguinte erro que recebi da minha outra instância do Redis-Sentinel, eu poderia desativá-lo ao vivo conectando-me ao Redis a partir da máquina master em que ele roda.

DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions:

1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent.

2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server.

3) If you started the server manually just for testing, restart it with the '--protected-mode no' option.

4) Setup a bind address or an authentication password.

NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

Mas quando me conecto e tento desativá-lo, recebo o erro (error) ERR Unsupported CONFIG parameter: protected-mode .

Não há autenticação configurada ou qualquer outra coisa - toda a segurança é gerenciada por regras de firewall. O redis.conf é quase padrão.

Demo

root@svim-redis03 /etc/redis # redis-cli

127.0.0.1:6379> CONFIG GET protected*
(empty list or set)
127.0.0.1:6379> CONFIG GET bind*
1) "bind"
2) "127.0.0.1"
127.0.0.1:6379> CONFIG SET protected-mode no
(error) ERR Unsupported CONFIG parameter: protected-mode
127.0.0.1:6379> exit

root@svim-redis03 /etc/redis # redis-server --version
Redis server v=3.2.9 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=86450d2ba8219c1e

Existe alguma coisa que eu preciso verificar ou alterar antes? Não encontrei nenhuma dica na documentação ou em Problemas do GitHub .

Atualização 01

Nem é possível alterar o endereço de ligação ou qualquer outro parâmetro de configuração. Preciso habilitar as alterações de configuração primeiro?

127.0.0.1:6379> config set bind "127.0.0.1 11.12.13.14"
(error) ERR Unsupported CONFIG parameter: bind
    
por Thomas Schwärzl 11.07.2017 / 15:14

1 resposta

4

Acontece que o servidor atual em execução não é a mesma versão que o binário que instalei.

Como reproduzir isso?

Simplesmente conecte via redis-cli à sua instância de redis e digite INFO server , que retorna um monte de informações.

127.0.0.1:6379> INFO server
# Server
redis_version:3.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:869e89100d5ea8c2
redis_mode:standalone
os:Linux 4.2.0-35-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.4
process_id:26720
run_id:6645270dd2ac6a7f96caa054f9dbba9e66566755
tcp_port:6379
uptime_in_seconds:10971777
uptime_in_days:126
hz:10
lru_clock:6676576
config_file:/etc/redis/redis.conf

Como você pode ver, esta instância do redis roda quase 127 dias e usa redis_version:3.0.7 .

Como consertar isso?

Reinicie seu servidor e certifique-se de que você o reiniciou de verdade! Por exemplo, com a maioria das distribuições do Linux, você pode fazer isso pressionando os seguintes comandos.

root@svim-redis03 ~ # service redis-server stop
Stopping redis-server: redis-server.

Verifique se está realmente off-line tentando se conectar com redis-cli . Se você ainda puder conectar, a instância ainda estará em execução. Verifique isso procurando por processos de redis ativos.

root@svim-redis03 ~ # ps -efl |grep redis
1 S redis    12418     1  0  80   0 - 10673 ep_pol  2016 ?        05:33:17 /usr/bin/redis-server 127.0.0.1:6381
1 S redis    12442     1  0  80   0 - 11697 ep_pol  2016 ?        05:33:46 /usr/bin/redis-server 127.0.0.1:6382
1 S redis    12453     1  0  80   0 - 10673 ep_pol  2016 ?        05:40:17 /usr/bin/redis-server 127.0.0.1:6383
4 S root     16570 16386  0  80   0 -  2489 wait_w 10:42 pts/7    00:00:00 tail -f /var/log/redis/redis-server-6379.log
0 S root     17064 12637  0  80   0 -  3617 pipe_w 10:47 pts/1    00:00:00 grep --color=auto redis
1 S redis    26720     1  0  80   0 - 453041 ep_pol Mar07 ?       08:37:01 /usr/bin/redis-server 127.0.0.1:6379

Como você pode ver, ainda há a instância (process id: 26720) em execução. Saia com o seguinte comando.

kill 26720

Depois de ter matado o processo, verifique novamente com ps -efl |grep redis se a instância está realmente inativa.

Por fim, inicie novamente com

root@svim-redis03 ~ # service redis-server start
Starting redis-server: redis-server.

Agora, verifique se a instância está sendo executada com a versão correta.

root@svim-redis03 ~ # redis-cli
127.0.0.1:6379> INFO server
# Server
redis_version:3.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:86450d2ba8219c1e
redis_mode:standalone
os:Linux 4.2.0-35-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.4
process_id:17135
run_id:40d6fa2e2b25e8f5b97a3c97ec1bddb8edda0014
tcp_port:6379
uptime_in_seconds:11
uptime_in_days:0
hz:10
lru_clock:6677102
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf
    
por 12.07.2017 / 11:06