// Tutorial //

Установка и обеспечение безопасности Redis в Ubuntu 20.04 [Краткое руководство]

Published on May 19, 2020
Default avatar
By Mark Drake
Manager, Developer Education
Русский
Установка и обеспечение безопасности Redis в Ubuntu 20.04 [Краткое руководство]

Введение

Redis — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом кратком руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 20.04.

Предварительные требования

Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с пользователем без прав root с привилегиями sudo и брандмауэром с конфигурацией ufw. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04​​​.

Шаг 1 — Установка и настройка Redis

Начните с обновления кэша локальных пакетов apt:

  1. sudo apt update

Затем установите Redis. Для этого введите следующее:

  1. sudo apt install redis-server

Далее откройте файл конфигурации Redis в любом текстовом редакторе:

  1. sudo nano /etc/redis/redis.conf

Внутри файла найдите директиву supervised, которая позволяет декларировать систему инициализации для управления Redis как службой. Поскольку вы работаете в Ubuntu, которая использует систему инициализации systemd, измените значение с no на systemd:

/etc/redis/redis.conf
. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

Сохраните файл и закройте его после завершения. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

Перезапустите службу Redis, чтобы изменения в файле конфигурации вступили в силу:

  1. sudo systemctl restart redis.service

Чтобы убедиться, что Redis работает правильно, подключитесь к серверу с помощью клиента командной строки Redis redis-cli:

  1. redis-cli

В появившемся диалоговом окне протестируйте подключение с помощью команды ping:

  1. ping
Output
PONG

Данный вывод подтверждает, что подключение сервера активно. Затем проверьте, что вы можете задать ключи:

  1. set test "It's working!"
Output
OK

Запросите значение с помощью следующей команды:

  1. get test

Если все работает корректно, вы получите сохраненное значение:

Output
"It's working!"

Убедившись, что вы можете получить значение, закройте диалоговое окно Redis и вернитесь в командную строку:

  1. exit

Шаг 2 — Настройка пароля Redis

Вы можете настроить пароль Redis непосредственно в файле конфигурации Redis /etc/redis/redis.conf. Откройте этот файл еще раз в предпочитаемом редакторе:

  1. sudo nano /etc/redis/redis.conf

Прокрутите содержимое файла до раздела SECURITY и найдите следующую закомментированную директиву:

/etc/redis/redis.conf
. . .
# requirepass foobared
. . .

Раскомментируйте ее, удалив символ #, и измените foobared на безопасный пароль:

/etc/redis/redis.conf
. . .
requirepass your_redis_password
. . .

После установки пароля сохраните и закройте файл, а потом перезапустите Redis:

  1. sudo systemctl restart redis.service

Чтобы проверить, работает ли пароль, откройте клиент Redis:

  1. redis-cli

Ниже показана последовательность команд, используемых для проверки работы пароля Redis. Первая команда пытается задать ключ для значения перед аутентификацией:

  1. set key1 10

Это не сработает, потому что вы не выполнили аутентификацию, поэтому Redis возвращает ошибку:

Output
(error) NOAUTH Authentication required.

Следующая команда выполняет аутентификацию с паролем, указанным в файле конфигурации Redis:

  1. auth your_redis_password

Redis принимает пароль:

Output
OK

После этого запуск предыдущей команды будет успешным:

  1. set key1 10
Output
OK

get key1 запрашивает в Redis значение нового ключа.

  1. get key1
Output
"10"

Подтвердив, что вы можете выполнять команды в клиенте Redis после аутентификации, вы можете закрыть redis-cli:

  1. quit

Шаг 3 — Переименование опасных команд

Другой элемент безопасности, встроенные в Redis, подразумевает переименование или полное удаление определенных команд, которые считаются опасными. Список команд, которые считаются опасными, включает: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF,BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG. Деактивировав или переименовав эти и другие команды, вы можете помешать несанкционированным пользователям изменить, уничтожить или стереть ваши данные каким-либо иным способом.

Чтобы переименовать или отключить команды Redis, откройте файл конфигурации еще раз:

  1. sudo nano /etc/redis/redis.conf

Предупреждение. Следующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу redis.io/commands.

Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:

/etc/redis/redis.conf
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .

Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:

/etc/redis/redis.conf
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

Сохраните изменения и закройте файл.

После переименования команды примените изменения, перезапустив Redis:

  1. sudo systemctl restart redis.service

Чтобы протестировать новую команду, откройте командную строку Redis:

  1. redis-cli

Затем выполните аутентификацию:

  1. auth your_redis_password
Output
OK

Если вы переименовали команду CONFIG в ASC12_CONFIG, как в предыдущем примере, попробуйте использовать первоначальную команду CONFIG. Команда не будет выполнена, потому что вы переименовали ее:

  1. config get requirepass
Output
(error) ERR unknown command `config`, with args beginning with:

Вызов переименованной команды будет успешным. Регистр не имеет значения:

  1. asc12_config get requirepass
Output
1) "requirepass" 2) "your_redis_password"

Заключение

С помощью этого краткого обучающего руководства вы установили и настроили Redis, убедились, что ваша установка Redis работает корректно, а также использовали встроенные функции безопасности, чтобы сделать ее менее уязвимой к атакам злоумышленников.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar
Manager, Developer Education

Technical Writer @ DigitalOcean

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment
Leave a comment...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click here to Sign up and get $200 of credit to try our products over 60 days!