Перейти к основному содержимому

🔐 Безопасность

Введение​

Безопасность — главный приоритет Semaphore UI. Автоматизируете ли вы критически важные инфраструктурные задачи или управляете доступом команды к чувствительным системам, Semaphore UI изначально спроектирован для надёжной и безопасной работы. В этом разделе описано, как Semaphore обеспечивает безопасность и что следует учитывать при развёртывании в production.

Аутентификация и авторизация​

Semaphore поддерживает безопасную аутентификацию и гибкие механизмы авторизации:

  • Способы входа:

    • Имя пользователя и пароль
      Способ по умолчанию, использующий учётные данные из базы данных Semaphore. Пароли никогда не хранятся в открытом виде; они хешируются алгоритмом Argon2id (см. Хеширование паролей).

    • LDAP
      Позволяет интегрироваться с корпоративными службами каталогов. Поддерживает фильтрацию пользователей и групп, а также защищённые соединения через LDAPS.

    • OpenID Connect (OIDC)
      Обеспечивает единый вход с провайдерами идентификации, такими как Google, Azure AD или Keycloak. Поддерживает пользовательские claim-ы и сопоставление групп.

  • Двухфакторная аутентификация (2FA)
    Доступна двухфакторная аутентификация на основе TOTP, и её рекомендуется включить всем пользователям. Она включается для каждого пользователя и поддерживает необязательные коды восстановления. См. параметры конфигурации mfa.totp.enabled и mfa.totp.allow_recovery.

  • Управление доступом на основе ролей
    Пользователям можно назначать разные роли, например Admin, Maintainer или Viewer, ограничивая доступ в соответствии с зоной ответственности.

  • Управление сеансами
    Сеансы защищены безопасными HTTP-куками. Истечение срока сеанса и механизмы выхода сводят время экспозиции к минимуму.

Хеширование паролей​

Начиная с v2.20

Хеширование паролей алгоритмом Argon2id доступно начиная с Semaphore 2.20. Более ранние версии используют bcrypt.

Пароли локальных пользователей хешируются алгоритмом Argon2id, который OWASP рекомендует для хранения паролей. Semaphore использует минимальные параметры стойкости, рекомендованные OWASP:

ПараметрЗначение
Память19 МиБ (m=19456)
Итерации2 (t=2)
Параллелизм1 (p=1)
Соль16 случайных байт на пароль
Длина хеша32 байта

Хеши хранятся в стандартном формате строки PHC, например $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>, поэтому параметры, использованные для каждого хеша, записываются вместе с ним.

Это относится ко всем способам задания пароля: через веб-интерфейс, через API и через команды CLI semaphore user add, semaphore user change-by-login и semaphore setup.

Обновление с версий до 2.20. В выпусках до 2.20 пароли хешировались с помощью bcrypt. Отдельный шаг миграции не требуется:

  • Существующие хеши bcrypt по-прежнему принимаются при входе, поэтому после обновления все пользователи продолжают работать.
  • При первом успешном входе пароль прозрачно перехешируется алгоритмом Argon2id, а хеш bcrypt заменяется.
  • Если в будущем выпуске параметры Argon2id в Semaphore будут усилены, хеши, созданные со старыми параметрами, обновятся тем же способом при следующем входе.

Поскольку перехеширование происходит только при входе, у пользователей, которые больше никогда не войдут, сохранится хеш bcrypt. Чтобы принудительно обновить такие учётные записи, сбросьте их пароль командой semaphore user change-by-login --password ... или через интерфейс администратора.

примечание

Коды восстановления для двухфакторной аутентификации не являются паролями пользователей и продолжают использовать bcrypt.

Секреты и учётные данные​

Безопасное управление секретами — ключевая возможность:

  • Зашифрованное хранилище ключей
    Учётные данные и секретные переменные шифруются при хранении с помощью AES.

  • Изоляция окружения
    Секреты передаются заданиям только во время выполнения и не попадают напрямую в окружение контейнера.

  • SSH-ключи и токены
    Пользователи сами отвечают за загрузку корректных SSH-ключей и токенов. Они шифруются и используются только при выполнении задач.

  • Интеграция с HashiCorp Vault (Pro)
    Секреты могут храниться во внешнем экземпляре Vault. Хранилище выбирается для каждого секрета при его создании или изменении.

Шифрование данных​

Чувствительные данные хранятся в базе данных в зашифрованном виде. Чтобы включить шифрование ключей доступа, задайте в файле конфигурации параметр access_key_encryption. Его нужно сгенерировать командой:

head -c32 /dev/urandom | base64

Выполнение недоверенного кода и playbook​

Semaphore выполняет заданные пользователем playbook и команды, что может быть рискованно:

  • Изоляция выполнения
    По умолчанию задача — это обычный процесс на сервере Semaphore, с его файловой системой и сетевым доступом. Изоляция включается отдельно: передайте задачу раннеру с исполнителем docker или k8s, и для каждой задачи создаётся новый контейнер или Pod, который удаляется после завершения.

  • Минимальные привилегии
    В исполнителях Docker и Kubernetes вы сами выбираете образ, сеть и сервисный аккаунт, поэтому задача получает только то, что ей нужно.

  • Выполнение в chroot
    Semaphore может выполнять задачи внутри chroot-окружения, дополнительно изолируя среду выполнения от хост-системы.

  • Пользователь процесса задачи
    Задачи могут выполняться от имени выделенного системного пользователя без прав root (например, semaphore), чтобы снизить последствия возможных эксплойтов. Это необязательно и настраивается в соответствии с политиками системы.

Безопасное развёртывание​

Чтобы развернуть Semaphore безопасно:

  • Используйте HTTPS
    Semaphore поддерживает HTTPS как через встроенную поддержку TLS, так и через обратный прокси, например Nginx. В production настоятельно рекомендуется включить HTTPS.

    Чтобы включить встроенную поддержку HTTPS, добавьте следующий блок в config.json:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • Работайте за межсетевым экраном
    Ограничьте доступ к интерфейсу Semaphore и базе данных только доверенными IP-адресами.

  • Безопасность базы данных
    Используйте надёжные пароли и разрешайте доступ к базе данных только для Semaphore.

Обновления и управление патчами​

Обновления безопасности публикуются регулярно:

  • Обновляйтесь
    Всегда используйте последний стабильный выпуск.

  • Список изменений
    Перед обновлением просматривайте изменения на GitHub.

  • Автоматические обновления
    При использовании Docker рассмотрите автоматизацию регулярных обновлений через конвейеры.

Сообщение об уязвимостях​

Нашли уязвимость? Помогите нам сохранить безопасность Semaphore:

  • Ответственное раскрытие
    Напишите нам на [email protected].

Целевые сроки устранения уязвимостей​

Мы стремимся устранять полученные сообщения об уязвимостях в следующие сроки:

  • Критические: в течение 30 дней
  • Высокие: в течение 60 дней
  • Средние: в течение 90 дней
  • Низкие: по возможности, обычно в течение 180 дней

Для активно эксплуатируемых проблем, затрагивающих последние стабильные выпуски, могут выпускаться внеочередные патчи.

Инструменты анализа безопасности кода​

Мы используем CodeQL, Codacy, Snyk и Renovate для анализа кодовой базы и зависимостей, а также для автоматизации обновления зависимостей.

  • Без публичных эксплойтов
    Не публикуйте информацию об уязвимостях до выхода исправления.

  • Благодарности
    Исследователи безопасности по желанию могут быть упомянуты в примечаниях к выпуску.