web-dev-qa-db-ja.com

Redisで「保護モード」をオフにする方法は?

無効にしたいprotected-mode私のプロダクションRedisで。他のRedis-Sentinelインスタンスから取得した次のエラーに関して、それが実行されているマスターマシンからRedisに接続することで、それをライブで無効にできます。

DENIED Redisはプロテクトモードで実行されています。プロテクトモードが有効になっていて、バインドアドレスが指定されておらず、クライアントに認証パスワードが要求されていません。このモードでは、ループバックインターフェイスからの接続のみが受け入れられます。外部コンピューターからRedisに接続する場合は、次のソリューションのいずれかを採用できます。

1)サーバーが実行しているのと同じホストからRedisに接続して、ループバックインターフェイスからコマンド「CONFIG SET protected-mode no」を送信してプロテクトモードを無効にします。この変更を永続的にするには、CONFIG REWRITEを使用します。

2)または、Redis構成ファイルを編集し、保護モードオプションを「no」に設定してサーバーを再起動することで、保護モードを無効にすることもできます。

3)テストのためだけにサーバーを手動で起動した場合は、「-protected-mode no」オプションを使用してサーバーを再起動します。

4)バインドアドレスまたは認証パスワードを設定します。

注:サーバーが外部からの接続の受け入れを開始するには、上記のいずれかを実行するだけで済みます。

しかし、接続して無効にしようとすると、エラー(error) ERR Unsupported CONFIG parameter: protected-mode

認証の設定などはありません-すべてのセキュリティはファイアウォールルールによって管理されます。 redis.confがほぼデフォルトです。

デモ

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

以前に確認または変更する必要があるものはありますか? documentation または GitHub issues にヒントが見つかりませんでした。

アップデート01

Bind-addressやその他の設定パラメータを変更することさえ不可能です。最初に設定変更を有効にする必要がありますか?

127.0.0.1:6379> config set bind "127.0.0.1 11.12.13.14"
(error) ERR Unsupported CONFIG parameter: bind
6

現在実行中のサーバーは、インストールしたバイナリと同じバージョンではないことがわかります。

これを再現するには?

単にredis-cliをredisインスタンスに接続し、INFO serverと入力すると、一連の情報が返されます。

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

ご覧のとおり、このredis-instanceは約127日間実行され、redis_version:3.0.7を使用しています。

これを修正するには?

サーバーを再起動し、本当に再起動したことを確認してください!たとえば、ほとんどのLinuxディストリビューションでは、次のコマンドを実行してこれを行うことができます。

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

redis-cliに接続して、オフラインかどうかを確認してください。それでも接続できる場合、インスタンスはまだ実行中です。アクティブなredisプロセスを検索してこれを確認します。

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

ご覧のとおり、まだインスタンス(プロセスID:26720)が実行されています。次のコマンドで終了してください。

kill 26720

プロセスを強制終了した後、インスタンスが本当にダウンしているかどうかをps -efl |grep redisで再度確認します。

最後に再びそれを開始します

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

次に、インスタンスが正しいバージョンで実行されているかどうかを確認します。

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
6