Как читать логи при ошибке аутентификации: системные журналы, прокси и сервисы входа | AdminWiki

Как читать логи при ошибке аутентификации: системные журналы, прокси и сервисы входа

30 августа 2026 9 мин. чтения
Содержание статьи

Ошибка аутентификации может возникать на любом участке цепочки: клиент, reverse proxy, приложение, системная аутентификация или внешний провайдер входа. Чтобы не просматривать журналы хаотично, начните с фиксации контекста: точное время события, имя пользователя, URL входа, IP-адрес клиента, HTTP-метод, статус ответа, request ID или trace ID, user agent и текст сообщения об ошибке. Затем последовательно проверяйте источники логов от внешнего симптома к первоисточнику сбоя.

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

Что проверить в первые 10 минут при ошибке аутентификации

Зафиксируйте минимальный набор данных для одной попытки входа. Это снизит риск поиска по слишком широкому диапазону логов и сформирует точку отсчета для корреляции событий.

Минимальный набор данных для одной попытки входа

Соберите следующие поля:

  • Время события с часовым поясом (например, 2026-08-30T14:23:05+03:00).
  • URL или endpoint входа (например, /login, /oauth/callback).
  • Имя учетной записи без секретов (только логин, без пароля).
  • IP-адрес клиента.
  • HTTP-метод (GET, POST).
  • Статус ответа (401, 403, 500 и т.д.).
  • Request ID или trace ID, если они передаются.
  • User agent браузера или клиента.
  • Текст сообщения об ошибке (например, "Invalid credentials", "Token expired").

Эти данные позволяют искать событие в разных журналах и связывать записи.

Порядок просмотра источников логов

Проверяйте источники в следующей последовательности:

  1. Браузер или API-клиент: сообщение об ошибке, код ответа, возможно, сетевые заголовки.
  2. Reverse proxy (Nginx, HAProxy): access log и error log для входящего запроса.
  3. Приложение: application log, audit log, структурированные JSON-логи.
  4. Системная аутентификация: journald, auth.log, secure, логи SSH, PAM.
  5. Внешний сервис входа (IdP): журнал провайдера, если доступен.

Отсутствие записи на следующем уровне помогает локализовать участок цепочки. Например, если запрос есть в access log proxy, но отсутствует в логе приложения, проблема между proxy и приложением.

Как восстановить цепочку событий по времени и идентификаторам

Связывайте записи из разных компонентов и отличайте первичную причину от последствий. Учитывайте расхождения между часами и форматом журналов.

Временные метки, часовые пояса и синхронизация времени

Проверьте формат времени и часовой пояс на клиенте, proxy, приложении и сервере идентификации. Неверная синхронизация времени приводит к ошибочной корреляции событий. Для токенов, подписей и протоколов SSO критично, чтобы часы были синхронизированы, иначе токен может быть отклонен из-за расхождения времени.

Приведите все временные метки к одному часовому поясу, лучше к UTC. Используйте команды типа date -u для проверки времени на сервере.

Request ID, trace ID и признаки одной попытки входа

Используйте идентификаторы запроса для поиска вместо ненадежного поиска только по имени пользователя или IP-адресу. Если request ID отсутствует, сочетайте временной интервал, endpoint, IP, user agent и upstream-ответ.

Убедитесь, что proxy передает в приложение заголовки X-Request-ID или аналогичные, чтобы можно было связать записи. В Nginx можно настроить:

proxy_set_header X-Request-ID $request_id;

Сообщение о неуспешной сессии в приложении может появиться после исходной ошибки proxy или IdP, поэтому важно строить временную линию.

Системные журналы при ошибке авторизации: что искать на сервере

Системные журналы содержат записи о локальных учетных записях, PAM, SSH и ограничениях ОС. Разделите их по типу сервиса и способу инициализации: systemd journal, файлы auth.log или secure, журналы SSH, PAM и системных сервисов.

Локальная учетная запись, PAM и SSH

Ищите сообщения о неверном пароле, неизвестном пользователе, заблокированной учетной записи, запрете входа, отказе PAM-модуля и превышении лимита попыток. Примеры записей:

  • Неверный пароль: Failed password for user from IP port 22 ssh2
  • Неизвестный пользователь: Invalid user admin from IP
  • Заблокированная учетная запись: Account locked due to 5 failed logins
  • Отказ PAM: pam_unix(sshd:auth): authentication failure

Чтобы проверить, дошел ли запрос до системной аутентификации, просмотрите журнал соответствующего сервиса (например, sshd) и PAM.

Как фильтровать системные журналы по времени и сервису

Для systemd journal используйте фильтры по unit, процессу, PID, диапазону времени, имени пользователя и уровню сообщения. Примеры:

journalctl -u sshd --since "2026-08-30 14:20:00" --until "2026-08-30 14:25:00"
journalctl _UID=1000 --since today
journalctl -p err --since "1 hour ago"

Для файлов auth.log или secure используйте grep с временным окном:

grep "Aug 30 14:2" /var/log/auth.log

Поиск по слову failed без контекста часто смешивает разные попытки и сервисы, поэтому добавляйте фильтры.

Логи приложения: где находится причина отказа

После того как запрос прошел proxy, проверьте внутреннюю обработку учетных данных, сессии и токенов. Различайте ошибку проверки пароля, отсутствующую сессию, некорректный токен, истекший срок действия, неподдерживаемый алгоритм и внутреннее исключение.

Проверка учетных данных и сессии

Ищите записи для этапов credential check, создания сессии, установки cookie, проверки CSRF и обновления токена. Сопоставьте успешную и неуспешную попытки в одинаковых условиях. Например, для веб-приложения на Python с Flask логи могут содержать:

INFO: User 'alice' authenticated successfully
WARNING: Failed login attempt for user 'bob' from 192.168.1.10

Если после успешной проверки пароля не создается сессия, проблема может быть в хранилище сессий или cookie.

Конфигурация и уровень детализации логирования

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

Reverse proxy: как отличить отказ proxy от ошибки приложения

Пользователь видит ошибку входа, но запрос мог не дойти до приложения или был изменен промежуточным сервером. Сравнивайте access log и error log proxy с логом приложения.

Коды 401, 403 и 5xx в контексте аутентификации

Код 401 обычно указывает на отсутствие или непринятие аутентификационных данных. Код 403 - на запрет доступа при распознанном запросе или субъекте. Код 5xx - на сбой обработки на proxy, upstream или сервисном уровне.

Для каждого случая проверяйте соответствующий лог:

  • 401: проверьте, передается ли заголовок Authorization, корректны ли учетные данные, смотрите лог приложения.
  • 403: проверьте правила доступа, ACL, роли, смотрите лог приложения и proxy.
  • 5xx: проверьте error log proxy, доступность upstream, смотрите лог приложения.

Ошибки передачи контекста входа между клиентом, proxy и приложением часто связаны с заголовками. Проверьте:

  • Host: должен совпадать с ожидаемым приложением.
  • X-Forwarded-Proto: должен быть https, если используется TLS на proxy.
  • X-Forwarded-For: для определения реального IP клиента.
  • Authorization: не должен быть потерян или искажен.
  • Cookie: должны передаваться без изменений.
  • Callback или redirect URI: должен точно совпадать с зарегистрированным в IdP.

Неправильная схема HTTP/HTTPS, потерянная cookie или неверный upstream приводят к циклу редиректов или отказу в сессии. В Nginx проверьте конфигурацию:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

TLS и сертификаты на границе proxy

Сбой проверки сертификата отделите от ошибки учетных данных. Признаки: истекший, неподходящий или недоверенный сертификат, ошибки цепочки доверия, несовпадение имени, проблемы с TLS между proxy и upstream.

Ищите подтверждение в error log proxy, журнале TLS-клиента и логе сервиса. Пример ошибки в Nginx:

SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate)

Внешний провайдер входа: диагностика OIDC, OAuth 2.0 и SAML

Если локальная инфраструктура доступна, но вход через IdP завершается ошибкой или возвращает пользователя обратно на страницу входа, проверьте этапы: перенаправление, callback, обмен кода, проверка токена или assertion, сопоставление пользователя и групп.

Ошибки redirect URI, client ID и callback

Проверьте точное совпадение схемы, домена, порта и пути callback между зарегистрированной конфигурацией IdP и фактическим URL, который формирует приложение за proxy. Убедитесь, что внешний URL определен корректно и нет подмены Host или X-Forwarded-Proto.

Срок действия токена и рассинхронизация времени

Если учетные данные верны, но токен отклоняется, проверьте issued-at, expiration, not-before, часовой пояс и синхронизацию часов на приложении, proxy и IdP. Не включайте в публикацию полные токены и секреты клиента.

Недоступность IdP и ошибки обмена токена

Ищите timeout, DNS-ошибки, ошибки TLS, отказ соединения, HTTP 4xx или 5xx от endpoint токена и сообщения о недоступности discovery или metadata. Сопоставьте время сбоя с журналом провайдера.

Как классифицировать причину по коду и сопутствующему сообщению

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

Наблюдаемый кодХарактерное сообщениеУровень возникновенияЧто уже исключеноСледующая проверкаВероятное исправление
401Invalid credentialsПриложение или IdPСеть, proxyЛог приложения, проверка пароляСброс пароля, проверка политики
403Access deniedProxy или приложениеУчетные данныеACL, роли, правилаНастройка прав
500Internal Server ErrorПриложениеProxyЛог приложения, исключенияИсправление кода
502Bad GatewayProxyКлиентДоступность upstreamПерезапуск сервиса
TLS errorCertificate expiredProxy или upstreamУчетные данныеСрок действия сертификатаОбновление сертификата

Неверные учетные данные и заблокированная учетная запись

Сопоставьте сообщения проверки пароля, lockout, expired password, unknown user и превышение лимита попыток с системным или IdP-журналом. Проверьте проблему на одной учетной записи без массового сброса настроек.

Отказ в доступе после успешной аутентификации

Разграничьте authentication и authorization. Проверьте группы, роли, claims, ACL, allow/deny-правила proxy и политики приложения. Признаки: 403 и сообщения о недостаточных правах.

Сбой сервиса или промежуточного уровня

Сопоставьте timeout, connection refused, upstream unavailable, gateway error, TLS handshake failure и ошибки зависимости с состоянием сервиса, DNS, сети, сертификатов и лимитов ресурсов.

Практический сценарий: от сообщения об ошибке к подтвержденной причине

Рассмотрим сквозной сценарий: пользователь получает отказ при SSO, proxy возвращает ответ, приложение фиксирует callback, а IdP сообщает причину.

Какие гипотезы проверять в первую очередь

Начните с доступности endpoint и точного времени, затем проверьте HTTP-код, наличие записи в proxy и приложении, параметры callback, TLS и только после этого углубляйтесь в бизнес-правила и редкие ошибки.

Как подтвердить исправление повторной попыткой

Проверьте новую попытку с тестовой учетной записью, наличие успешных записей на каждом уровне, создание сессии или выдачу токена, корректный доступ к защищенному ресурсу и отсутствие повторных ошибок в смежных журналах.

Итоговый чек-лист диагностики и безопасной эскалации

Используйте чек-лист для повторного применения и определите, какие данные передавать разработчику или провайдеру без нарушения безопасности.

Когда локальная диагностика завершена

Эскалируйте после проверки локального времени, сети, TLS, proxy, приложения и корректности конфигурации, если IdP или upstream возвращает подтвержденную ошибку либо остается недоступным.

Шаблон записи результата расследования

Сохраните воспроизводимость и сократите время повторного разбора похожих инцидентов. Заполните поля:

  • Дата и часовой пояс
  • Затронутый сервис
  • Сценарий входа
  • Пользователь или тестовая учетная запись
  • Request ID
  • Коды на каждом уровне
  • Найденная первичная причина
  • Исправление
  • Результат контрольной попытки
  • Необходимые профилактические действия

При обращении к разработчику или провайдеру приложите обезличенные строки логов, версии компонентов, временной диапазон, request ID, код ответа и схему взаимодействия. Исключите пароли, токены, cookie, client secret и персональные данные.

Для углубленного анализа логов Nginx и Apache используйте готовые команды grep и awk. При ошибках 401 и 403 в стеке Nginx + Docker + Kubernetes поможет пошаговый алгоритм диагностики. Для настройки мониторинга ключевых метрик Nginx обратитесь к шпаргалке по метрикам.

Поделиться:
Сохранить гайд? В закладки браузера