Tutorial
Установка и обеспечение безопасности Redis в Ubuntu 20.04 [Краткое руководство]
Введение
Redis — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом кратком руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 20.04.
Предварительные требования
Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с пользователем без прав root с привилегиями sudo
и брандмауэром с конфигурацией ufw
. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04.
Шаг 1 — Установка и настройка Redis
Начните с обновления кэша локальных пакетов apt
:
- sudo apt update
Затем установите Redis. Для этого введите следующее:
- sudo apt install redis-server
Далее откройте файл конфигурации Redis в любом текстовом редакторе:
- sudo nano /etc/redis/redis.conf
Внутри файла найдите директиву supervised
, которая позволяет декларировать систему инициализации для управления Redis как службой. Поскольку вы работаете в Ubuntu, которая использует систему инициализации systemd, измените значение с no
на systemd
:
. . .
# 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, чтобы изменения в файле конфигурации вступили в силу:
- sudo systemctl restart redis.service
Чтобы убедиться, что Redis работает правильно, подключитесь к серверу с помощью клиента командной строки Redis redis-cli
:
- redis-cli
В появившемся диалоговом окне протестируйте подключение с помощью команды ping
:
- ping
OutputPONG
Данный вывод подтверждает, что подключение сервера активно. Затем проверьте, что вы можете задать ключи:
- set test "It's working!"
OutputOK
Запросите значение с помощью следующей команды:
- get test
Если все работает корректно, вы получите сохраненное значение:
Output"It's working!"
Убедившись, что вы можете получить значение, закройте диалоговое окно Redis и вернитесь в командную строку:
- exit
Шаг 2 — Настройка пароля Redis
Вы можете настроить пароль Redis непосредственно в файле конфигурации Redis /etc/redis/redis.conf
. Откройте этот файл еще раз в предпочитаемом редакторе:
- sudo nano /etc/redis/redis.conf
Прокрутите содержимое файла до раздела SECURITY
и найдите следующую закомментированную директиву:
. . .
# requirepass foobared
. . .
Раскомментируйте ее, удалив символ #
, и измените foobared
на безопасный пароль:
. . .
requirepass your_redis_password
. . .
После установки пароля сохраните и закройте файл, а потом перезапустите Redis:
- sudo systemctl restart redis.service
Чтобы проверить, работает ли пароль, откройте клиент Redis:
- redis-cli
Ниже показана последовательность команд, используемых для проверки работы пароля Redis. Первая команда пытается задать ключ для значения перед аутентификацией:
- set key1 10
Это не сработает, потому что вы не выполнили аутентификацию, поэтому Redis возвращает ошибку:
Output(error) NOAUTH Authentication required.
Следующая команда выполняет аутентификацию с паролем, указанным в файле конфигурации Redis:
- auth your_redis_password
Redis принимает пароль:
OutputOK
После этого запуск предыдущей команды будет успешным:
- set key1 10
OutputOK
get key1
запрашивает в Redis значение нового ключа.
- get key1
Output"10"
Подтвердив, что вы можете выполнять команды в клиенте Redis после аутентификации, вы можете закрыть redis-cli
:
- quit
Шаг 3 — Переименование опасных команд
Другой элемент безопасности, встроенные в Redis, подразумевает переименование или полное удаление определенных команд, которые считаются опасными. Список команд, которые считаются опасными, включает: FLUSHDB
, FLUSHALL
, KEYS
, PEXPIRE
, DEL
, CONFIG
, SHUTDOWN
, BGREWRITEAOF
,BGSAVE
, SAVE
, SPOP
, SREM
, RENAME
и DEBUG
. Деактивировав или переименовав эти и другие команды, вы можете помешать несанкционированным пользователям изменить, уничтожить или стереть ваши данные каким-либо иным способом.
Чтобы переименовать или отключить команды Redis, откройте файл конфигурации еще раз:
- sudo nano /etc/redis/redis.conf
Предупреждение. Следующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу redis.io/commands.
Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:
. . .
# 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 ""
. . .
Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .
Сохраните изменения и закройте файл.
После переименования команды примените изменения, перезапустив Redis:
- sudo systemctl restart redis.service
Чтобы протестировать новую команду, откройте командную строку Redis:
- redis-cli
Затем выполните аутентификацию:
- auth your_redis_password
OutputOK
Если вы переименовали команду CONFIG
в ASC12_CONFIG
, как в предыдущем примере, попробуйте использовать первоначальную команду CONFIG
. Команда не будет выполнена, потому что вы переименовали ее:
- config get requirepass
Output(error) ERR unknown command `config`, with args beginning with:
Вызов переименованной команды будет успешным. Регистр не имеет значения:
- asc12_config get requirepass
Output1) "requirepass"
2) "your_redis_password"
Заключение
С помощью этого краткого обучающего руководства вы установили и настроили Redis, убедились, что ваша установка Redis работает корректно, а также использовали встроенные функции безопасности, чтобы сделать ее менее уязвимой к атакам злоумышленников.