Управление ключами SSH: вызовы, боли админов и эволюция подходов

Itnull

Admin
Регистрация
22.05.13
Сообщения
28.596
Реакции
13.198
Веб-сайт
itnull.me
SSH-ключи давно стали стандартом де-факто для аутентификации в мире Linux и DevSecOps. Они надежнее паролей, удобнее в автоматизации и кажутся монументально безопасными. Но ровно до тех пор, пока инфраструктура не разрастается до сотен серверов, а команда — до десятков инженеров.

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

Часть 1. Классический подход и его скрытые угрозы​

Как обычно выглядит управление ключами на ранних этапах? Администратор генерирует пару ключей, копирует публичную часть на сервер в ~/.ssh/authorized_keys, и всё работает.

Однако со временем этот подход порождает критические вызовы:

  • Проблема «бесхозных» ключей (Key Sprawl): Инженеры увольняются, переводятся в другие отделы или просто теряют свои устройства. Удалить их публичные ключи со всех сотен серверов вручную — задача, обреченная на провал. В итоге в системе остаются «дыры» для старого персонала.
  • Отсутствие ротации: Ключи генерируются один раз и живут годами. Если приватный ключ будет скомпрометирован (например, случайно попадет в публичный git-репозиторий), злоумышленник получит перманентный доступ.
  • Слабый аудит: Глядя на лог SSH, вы видите, что зашел пользователь root с определенным отпечатком ключа. Но кому конкретно принадлежал этот ключ в тот момент времени? Выяснить это бывает крайне сложно.
  • Совместное использование (Key Sharing): Практика, когда один ключ «шерится» между членами команды для быстрого доступа, сводит на нет всю концепцию персональной ответственности.

Часть 2. Эволюция подходов: от хаоса к порядку​

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

Этап 1. Централизованное управление конфигурациями (Ansible, SaltStack, Chef)​

Первый логичный шаг — автоматизировать раскатку публичных ключей через CI/CD или системы управления конфигурациями.

  • Как это работает: Все публичные ключи хранятся в одном месте (например, в приватном git-репозитории). Ansible раз в час (или по триггеру) обходит серверы и приводит файлы authorized_keys в актуальное состояние.
  • Плюсы: Увольнять сотрудников стало проще — достаточно удалить ключ из репозитория.
  • Минусы: Ключи все еще статические и бессрочные. Ротация по-прежнему болезненна. Если сервер «выпал» из сети во время наката конфигурации, на нем останутся старые доступы.

Этап 2. Интеграция с каталогами (LDAP / Active Directory)​

Вместо хранения ключей на каждом сервере, SSH-демон настраивается так, чтобы запрашивать публичный ключ из центральной базы данных.

  • Как это работает: Используется директива AuthorizedKeysCommand в sshd_config, которая вызывает скрипт, идущий в LDAP/AD за ключом конкретного пользователя.
  • Плюсы: Мгновенный отзыв прав при блокировке учетной записи в AD.
  • Минусы: Высокая зависимость от доступности контроллера домена. Если сеть «моргнет», легитимный пользователь может не попасть на сервер в критический момент (хотя это частично решается кэшированием). Ключи все еще живут долго.

Этап 3. SSH Сертификаты (OpenSSH Certificates)​

Революционный сдвиг в подходе, который поддерживается самим OpenSSH начиная с версии 5.4, но до сих пор недооценен многими админами.

  • Как это работает: Вместо доверия конкретным ключам, серверы настраиваются на доверие определенному Центру Сертификации (CA). Пользователь перед сессией генерирует краткосрочный ключ и подписывает его у CA. Полученный SSH-сертификат имеет жесткий «срок годности» (например, 8 часов) и содержит список разрешенных серверов и логинов.
  • Плюсы: Серверам больше вообще не нужно знать публичные ключи пользователей! Ключ «протухает» сам, его не нужно отзывать. Отличный аудит.
  • Минусы: Требуется развернуть и поддерживать инфраструктуру CA.

Часть 3. Современный стандарт: Zero Trust и Just-in-Time (JIT) доступ​

Сегодня индустрия движется к концепции Zero Trust (Никому не доверяй). Современные инструменты (такие как HashiCorp Vault, Teleport, Boundary, Bastion-сервисы в облаках) объединили подход с SSH-сертификатами и принципы динамического доступа.

Как выглядит современный пайплайн доступа (Just-in-Time):​

  1. Инженер начинает рабочий день и аутентифицируется в корпоративном IdP (Okta, Keycloak, Azure AD) с обязательным прохождением MFA (двухфакторной аутентификации).
  2. Система выдает инженеру SSH-сертификат, валидный, например, на время его рабочей смены или под конкретную задачу (заявку в Jira).
  3. Инженер подключается к серверу. Сервер мгновенно валидирует сертификат локально через публичный ключ CA.
  4. По истечении времени сертификат превращается в «тыкву». Никаких следов на целевом сервере не остается.
Важный бонус современных систем: Многие из них (например, Teleport) позволяют вести полную видеозапись SSH-сессии (Session Recording). В случае инцидента можно буквально по шагам увидеть, какие команды вводил пользователь.

Резюме: что выбрать?​

  • Если у вас до 10 серверов и 2-3 админа — связки Ansible + Git будет достаточно, но не забывайте про ротацию ключей хотя бы раз в год.
  • Если серверов от 50 до сотен, а команда растет — смотрите в сторону интеграции SSH с LDAP/AD или начинайте внедрять SSH-сертификаты.
  • Если вы строите Enterprise-инфраструктуру, соблюдаете стандарты безопасности (PCI-DSS, ISO 27001) и практикуете DevSecOps — ваш выбор это специализированные PAM/Access-системы (HashiCorp Vault, Teleport) с концепцией короткоживущих сертификатов.
А как вы управляете SSH-ключами в своей инфраструктуре? Пользуетесь ли сертификатами или по старинке раскидываете authorized_keys скриптами? Делитесь опытом в комментариях!
 

Создайте аккаунт или войдите в систему, чтобы комментировать

Вы должны быть зарегистрированным, чтобы оставить комментарий

Создать аккаунт

Создайте аккаунт в нашем сообществе.

Войти

У вас уже есть аккаунт? Войдите здесь.

Назад
Сверху Снизу