Вопрос или проблема
Я хотел бы отключить protected-mode
на моем производственном Redis. Относительно следующей ошибки, которую я получил от другого экземпляра Redis-Sentinel, я мог отключить его в реальном времени, подключившись к Redis с основного компьютера, на котором он работает.
ОТКАЗАНО Redis работает в защищенном режиме, потому что защищенный режим включен, адрес привязки не был указан, клиентам не запрашивается пароль аутентификации. В этом режиме подключения принимаются только с интерфейса обратной связи. Если вы хотите подключиться к Redis с внешних компьютеров, вы можете воспользоваться одним из следующих решений:
1) Просто отключите защищенный режим, отправив команду ‘CONFIG SET protected-mode no’ с интерфейса обратной связи, подключившись к Redis с того же хоста, на котором работает сервер, однако УБЕДИТЕСЬ, что Redis не доступен из интернета, если вы это сделаете. Используйте 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*
(пустой список или набор)
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
Есть ли что-то, что мне нужно проверить или изменить перед этим? Я не смог найти никакой подсказки в документации или в вопросах на GitHub.
Обновление 01
Не удается даже изменить адрес привязки или любой другой параметр конфигурации. Мне нужно сначала включить изменения конфигурации?
127.0.0.1:6379> config set bind "127.0.0.1 11.12.13.14"
(error) ERR Unsupported CONFIG parameter: bind
Оказывается, что текущий запущенный сервер не той же версии, что и бинарный файл, который я установил.
Как воспроизвести это?
Просто подключитесь через redis-cli
к вашему экземпляру redis и введите INFO server
, что вернет кучу информации.
127.0.0.1:6379> INFO 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 работает почти 127 дней и использует redis_version:3.0.7
.
Как это исправить?
Перезапустите сервер и убедитесь, что вы действительно его перезапустили! Например, в большинстве дистрибутивов Linux вы можете сделать это, выполнив следующие команды.
root@svim-redis03 ~ # service redis-server stop
Остановка 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
Как вы можете видеть, экземпляр (идентификатор процесса: 26720) все еще работает. Завершите его с помощью следующей команды.
kill 26720
После того, как вы завершили процесс, проверьте снова с ps -efl |grep redis
, если экземпляр действительно отключен.
Наконец, снова запустите его с помощью
root@svim-redis03 ~ # service redis-server start
Запуск redis-server: redis-server.
Теперь проверьте, работает ли экземпляр с правильной версией.
root@svim-redis03 ~ # redis-cli
127.0.0.1:6379> INFO 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
Процесс переустановки Redis
- Удалить существующую установку Redis
Запустите следующую команду, чтобы полностью удалить Redis вместе с его зависимостями:
sudo apt-get purge --auto-remove redis-server redis
- Завершить все процессы Redis
Используйте команду ниже, чтобы перечислить и завершить все процессы Redis:
ps aux | grep redis
- Настроить адрес привязки
Отредактируйте конфигурационный файл Redis, чтобы указать IP-адреса, на которых вы хотите, чтобы Redis слушал:
sudo nano /etc/redis/redis.conf
Добавьте следующие строки, заменив 127.0.0.1
и 0.0.0.0
на ваши реальные IP-адреса:
bind 127.0.0.1
bind 0.0.0.0
- Установить инструменты Redis
Чтобы установить дополнительные инструменты Redis, выполните:
sudo apt install redis-tools
- Перезапустить службу Redis
Наконец, перезапустите службу Redis, чтобы применить изменения:
sudo systemctl restart redis
Это должно помочь прояснить шаги, связанные с процедурой переустановки Redis!
Ответ или решение
Для отключения режима защиты (protected-mode
) в Redis, важно понимать контекст, условия и версии, поскольку в вашем случае вы столкнулись с ошибкой и неопределенностью. Ниже приведены основные шаги и рекомендации для успешного отключения этого режима, что является важным аспектом настройки Redis, особенно в продуктивной среде.
1. Понимание режима защиты Redis
Режим защиты в Redis предназначен для предотвращения несанкционированного доступа к серверу при отсутствии должной конфигурации. Когда этот режим включен, сервер принимает подключения только с локального интерфейса (127.0.0.1
), что делает его защищенным от удаленных атак. Однако, если у вас настроенные брандмауэры и вы уверены в безопасности вашей сети, вы можете захотеть отключить этот режим.
2. Проверка версии Redis
Сначала убедитесь, что вы подключаетесь к правильной версии Redis. Ваша ошибка при выполнении команды CONFIG SET protected-mode no
указывает на то, что используемая версия не поддерживает данную команду или у вас отсутствует необходимая версия, где эти параметры настроены. Рекомендуется использовать команду:
INFO server
Эта команда позволит вам увидеть текущую запущенную версию Redis. Убедитесь, что это версия 3.2.0 или новее, так как в более ранних версиях могут отсутствовать некоторые параметры конфигурации.
3. Отключение protected-mode
Способ 1: Изменение конфигурационного файла
Если вы хотите отключить режим защиты, проще всего изменить файл конфигурации Redis (redis.conf
). Для этого следуйте следующим шагам:
-
Откройте конфигурационный файл Redis с помощью текстового редактора:
sudo nano /etc/redis/redis.conf
-
Найдите строку с
protected-mode
и измените значение наno
, если оно есть. Если его нет, просто добавьте:protected-mode no
-
Также убедитесь, что параметр
bind
настроен. Он может выглядеть так:bind 127.0.0.1 0.0.0.0
-
Сохраните изменения и закройте редактор.
-
Перезагрузите Redis для применения изменений:
sudo systemctl restart redis
Способ 2: Использование команды CONFIG
Если вы подключены к Redis через командную строку и уверены, что находитесь на сервере, можно отправить команду напрямую:
redis-cli
Затем выполните:
CONFIG SET protected-mode no
Однако, если вы получаете сообщение об ошибке “ERR Unsupported CONFIG parameter: protected-mode”, убедитесь, что версия Redis действительно поддерживает эту настройку.
4. Дополнительные решения
Если вы по-прежнему не можете изменить параметры конфигурации через CONFIG SET
, возможно, у вас запущена другая версия Redis. Проверьте запущенные процессы:
ps -ef | grep redis
Убедитесь, что используемая версия соответствует установленной, и, если необходимо, завершите активные процессы перед перезапуском с новой конфигурацией.
5. Заключение
Отключение режима защиты Redis — важный шаг, который следует осуществлять с осторожностью. Если Redis доступен извне без надлежащей настройки безопасности, это может привести к уязвимостям. Рекомендуется также рассмотреть возможность настройки аутентификации или других мер безопасности, чтобы защитить вашу установку Redis. Ведение журналов и мониторинг подключений также помогут вам поддерживать безопасность вашей инфраструктуры.
Следуя этим шагам, вы сможете успешно отключить режим защиты в Redis и вести его безопасную эксплуатацию в вашей сети.