Введение

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

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

redis illustration for: Предварительные требования

Для выполнения данного руководства вам потребуется сервер 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:

				
					
[label /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, чтобы изменения в файле конфигурации вступили в силу:

				
					
sudo systemctl restart redis.service

				
			

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

				
					
redis-cli

				
			

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

				
					
ping

				
			
				
					
[secondary_label Output]

PONG

				
			

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

				
					
set test "It's working!"

				
			
				
					
[secondary_label Output]

OK

				
			

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

				
					
get test

				
			

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

				
					
[secondary_label Output]

"It's working!"

				
			

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

				
					
exit

				
			

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

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

				
					
sudo nano /etc/redis/redis.conf

				
			

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

				
					
[label /etc/redis/redis.conf]

. . .

# requirepass foobared

. . .

				
			

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

				
					
[label /etc/redis/redis.conf]

. . .

requirepass <^>your_redis_password<^>

. . .

				
			

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

				
					
sudo systemctl restart redis.service

				
			

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

				
					
redis-cli

				
			

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

				
					
set key1 10

				
			

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

				
					
[secondary_label Output]

(error) NOAUTH Authentication required.

				
			

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

				
					
auth <^>your_redis_password<^>

				
			

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

				
					
[secondary_label Output]

OK

				
			

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

				
					
set key1 10

				
			
				
					
[secondary_label Output]

OK

				
			

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

				
					
get key1

				
			
				
					
[secondary_label 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

				
			

[warning]

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

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

				
					
[label /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 ""<^>

. . .

				
			

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

				
					
[label /etc/redis/redis.conf]

. . .

# 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<^>

				
			
				
					
[secondary_label Output]

OK

				
			

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

				
					
config get requirepass

				
			
				
					
[secondary_label Output]

(error) ERR unknown command `config`, with args beginning with:

				
			

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

				
					
asc12_config get requirepass

				
			
				
					
[secondary_label Output]

1) "requirepass"

2) "<^>your_redis_password<^>"

				
			

Заключение

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