Перевести приложение на учётную запись с ограниченными правами

RedisBeginner
Практиковаться сейчас

Введение

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

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

Установить исходное состояние приложения

На этом шаге вы установите обычное поведение в новой среде. Перейдите на вкладку Dashboard. Вход — Ticket 104: password reset, результат пуст, имя пользователя — default. Нажмите Process ticket. Подтвердите появление Processed: Ticket 104: password reset.

Чтобы начать этот шаг, выберите вкладку Dashboard в интерфейсе лабораторной работы.

Перейдите на вкладку Client, чтобы прочитать частную конфигурацию приложения. cat выводит файл. Терминал начинается в /workspace, каталоге конфигурации приложения:

Перед выполнением следующей команды перейдите на вкладку Client.

cat app.json

JSON хранит именованные поля внутри фигурных скобок. username обозначает пользователя Redis, password передаёт секрет аутентификации. Строки заключены в двойные кавычки, поля разделены запятыми. Сейчас пользователь — default, пароль пуст.

Приложение перечитывает файл при каждом запросе и открывает новые соединения Redis. Перезапуск и написание клиента не нужны. Отдельная запись monitor читает monitor:heartbeat; сохраните её работу при изменении стандартной записи. Файл содержит секреты, поэтому он закрытый и публично не выдаётся.

Переключить соединение панели

На этом шаге вы переключите приложение на ограниченный аккаунт. Перейдите на вкладку Client. Замените конфигурацию из двух полей. cat > app.json перенаправляет следующий текст в файл, заменяя старое содержимое. Заключённый в кавычки EOF начинает here-document; вставьте все строки, включая завершающий EOF на отдельной строке. Кавычки предотвращают подстановки оболочки внутри JSON.

Чтобы начать этот шаг, выберите вкладку Client в интерфейсе лабораторной работы.

Перед выполнением следующей команды перейдите на вкладку Client.

cat > app.json <<'EOF'
{"username":"dashboard","password":"Dash-Lab-42"}
EOF

Меняется только конфигурация. В этом свежем снимке аккаунт уже имеет GET/SET для support:*. Перейдите на вкладку Dashboard, обновите страницу, проверьте имя dashboard, затем снова нажмите Process ticket. Оставшегося от старого аккаунта результата недостаточно: новая операция доказывает, что настроенный аккаунт может читать и писать.

Dashboard обрабатывает обращение через отдельный аккаунт dashboard

При WRONGPASS вернитесь на вкладку Client, исправьте реквизиты JSON полным блоком выше, затем перейдите на Dashboard и повторите Process ticket. При NOPERM перейдите на вкладку Cache Server и выполните cache-admin ACL GETUSER dashboard, чтобы изучить шаблон ключей и команды. Полная команда reset из первой работы восстанавливает ошибочно настроенный аккаунт. При повреждённом JSON перейдите на вкладку Client и повторите полный блок конфигурации выше, затем вернитесь на Dashboard для новой попытки.

Не используйте maint как обход: приложению нужна собственная ограниченная запись.

Закрыть широкий вход по умолчанию

На этом шаге вы отключите автоматический путь по умолчанию, сохранив законные аккаунты. Перейдите на вкладку Cache Server. Аккаунт обслуживания для cache-admin остаётся включённым, поэтому администрирование доступно.

Чтобы начать этот шаг, выберите вкладку Cache Server в интерфейсе лабораторной работы.

ACL SETUSER default off запрещает новую аутентификацию стандартным пользователем. Сохраните активное изменение в настроенный файл ACL:

Перед выполнением следующей команды перейдите на вкладку Cache Server.

cache-admin ACL SETUSER default off
cache-admin ACL SAVE

Обе команды возвращают OK. Перейдите на вкладку Client и попробуйте новое соединение без реквизитов:

Перед выполнением следующей команды перейдите на вкладку Client.

redis-cli -h cache-server GET support:ticket

Ожидайте NOAUTH Authentication required. — нужный отказ. Он отличается от NOPERM, означающего нехватку прав аутентифицированной записи. Каждый вызов создаёт новое соединение. Отключение пользователя не гарантирует завершение уже аутентифицированных сеансов; их отзыв вне этой задачи.

Перейдите на вкладку Dashboard, обновите страницу и нажмите Process ticket. Именованный аккаунт должен продолжать работать. Если отключили не тот аккаунт, перейдите на вкладку Cache Server, повторите его правильное правило reset и сохраните снова. Не включайте широкий аккаунт по умолчанию ради сокрытия ошибки конфигурации приложения.

Проверить безопасность и доступность вместе

На этом шаге вы сравните разрешённую работу, запрещённые данные и ненужную команду. Перейдите на вкладку Client. В каждом запросе --askpass вводите Dash-Lab-42.

Чтобы начать этот шаг, выберите вкладку Client в интерфейсе лабораторной работы.

Перед выполнением следующей команды перейдите на вкладку Client.

redis-cli -h cache-server --user dashboard --askpass GET support:result

Обработанный результат поддержки остаётся доступным. Следующая команда намеренно запрашивает чужие финансовые данные:

redis-cli -h cache-server --user dashboard --askpass GET finance:payroll

Ожидайте NOPERM. CONFIG GET читает настройки сервера; даже это административное чтение приложению не нужно. Звёздочка в кавычках запрашивает все имена настроек и должна дойти до Redis без изменений:

redis-cli -h cache-server --user dashboard --askpass CONFIG GET '*'

Ожидайте NOPERM по правам команды. Затем используйте существующую запись мониторинга с паролем Monitor-Lab-42:

redis-cli -h cache-server --user monitor --askpass GET monitor:heartbeat

Ожидайте healthy. Отключение всех аккаунтов или остановка Redis нарушает эту положительную проверку и не является исправлением. Перейдите на вкладку Cache Server. Выведите действующие ACL и сохранённый файл:

Перед выполнением следующей команды перейдите на вкладку Cache Server.

cache-admin ACL LIST
cat /data/users.acl

Сохранённые записи должны совпадать с действующими, включая default off. При различиях повторите cache-admin ACL SAVE. Перейдите на вкладку Dashboard и ещё раз нажмите Process ticket. Реальная доступность вместе со значимыми отказами подтверждает результат; одна зелёная страница не доказывает минимальные привилегии.

Резюме

Вы переключили настоящее приложение на ограниченную запись Redis, отключили новый стандартный доступ, сохранили ACL и проверили запрещённые запросы вместе с бизнес-операциями и мониторингом. Проверки используют новые соединения и не утверждают отзыв существующих сеансов.