Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC и Intel Xeоn
  • Серверы с AMD Ryzen и Intel Core i9
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • GPU
  • Распродажа
  • VPS
    GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • Распродажа
    Маркетплейс
    Colocation
  • Размещение серверов в дата-центре в Москве
  • Обслуживание серверов в других ЦОД
  • Кластеры
    Прокат
    Услуги
  • Аренда сетевого оборудования
  • Защита L3-L4 от DDoS атак
  • IPV4 и IPV6 адреса
  • Администрирование серверов
  • Уровни технической поддержки
  • Мониторинг сервера
  • BYOIP
  • USB диск
  • IP-KVM
  • Трафик
  • Коммутация серверов
  • AI-чат-бот Lite
  • О нас
  • Работа в HOSTKEY
  • Панель управления серверами и API
  • Дата-центры
  • Сеть
  • Тест скорости
  • Специальные предложения
  • Отдел продаж
  • Для реселлеров
  • Гранты для специалистов по Data Science
  • Гранты для научных проектов и стартапов
  • Документация и Частые вопросы
  • Новости
  • Блог
  • Оплата
  • Документы
  • Сообщите о нарушении
  • Looking Glass
  • 21.02.2023

    Создание сервиса Single sign-on с напоминаниями для пользователей

    server one
    HOSTKEY
    Арендуйте выделенные и виртуальные GPU серверы с профессиональными графическими картами NVIDIA RTX A5000 / A4000 в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Автор — Федор Потапов, Windows DevOps компании Hostkey

    Любая современная телекоммуникационная компания сталкивается с необходимостью организовать удобное рабочее пространство не только для пользователей своих услуг, но и для сотрудников. В компании Hostkey часть персонала работает в офисах в России и Нидерландах, а часть — удаленно. Естественно, все работают на тех операционных системах, которые им удобны и привычны, так что и в этом вопросе нет унификации.

    В компаниях с развитой инфраструктурой Microsoft эти вопросы решаются в рамках регулярного использования рабочих станций, почтового сервиса, etc. Если все работают в среде ОС семейства Linux — хорошим решением является FreeIPA. Мы тоже начинали с IPA и рассказывали о нашем опыте интеграции FreeIPA с Active Directory в одной из прошлых статей. Но Single sign-on (SSO) как продукт используется всеми сотрудниками, только часть из которых использует ssh. В итоге веб-сервисы и вендорное оборудование привели к появлению небольшой инфраструктуры Microsoft как довеска к IPA. SSO на первых этапах чаще всего реализовывался через LDAP, мы только-только доросли до SAML и oAuth. Долгое время, до появления этих протоколов в системе авторизации, требовалось решать вопрос регулярной ротации паролей.

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

    Нам необходимо было реализовать процедуру регулярной смены паролей так, чтобы это отрабатывало везде и было удобно для пользователей. В нашей компании используется Python, и изначально мы использовали скрипт, созданный на этом языке программирования, но он был весьма прост и решал только одну задачу — смену пароля, а нам было необходимо также решить задачи многофакторной аутентификации. В итоге мы этот скрипт доработали.

    В основу нашего решения легла сборка — Web UI for changing LDAP password.

    В ней есть два самых важных файла:

    • App.py — одностраничный компактный Python-скрипт, который легко модифицировать под себя.
    • Settings.ini.example — поддержка одновременной смены пароля в нескольких LDAP, указываются параметры LDAP-сервера.

    Этот инструмент позволяет менять пароль на нескольких LDAP-серверах, но есть важный нюанс, не позволяющий использовать готовое решение. В нашей инфраструктуре между серверами AD и FreeIPA (об их взаимодействии мы рассказывали в отдельной статье) отрабатывает служба Password Sync. Оказалось, что иногда Password Sync отрабатывает быстрее Python-скрипта. Из-за этого периодически возникали проблемы при смене пароля пользователями.

    Отметим, что мы меняем пароль только на одном LDAP-сервере, у нас это сервер AD, так как нас больше устроили базовые требования к сложности пароля (администратор должен быть ленив, и, если можно использовать готовый вариант, зачастую на нем и стоит остановиться :) ), например пароль должен содержать, кроме длины и сложности:

    • заглавные буквы;
    • строчные буквы;
    • спецсимволы;
    • цифры.

    Для создания пароля необходимо выполнение хотя бы трех из этих пунктов. Также у AD несколько дополнительных требований, например пароль не должен содержать логин, FreeIPA такого требования не содержит. Таким образом, с небольшой подстройкой политики FreeIPA мы пришли к конструкции, в которой если AD пароль принял, то FreeIPA его тоже примет.

    Скрипт смены пароля можно посмотреть здесь.

    По сути, скрипт работает следующим образом: в конфигурации прописаны два LDAP-сервера, одним из которых является AD. Python в процессе своей работы читает конфигурацию, блок LDAP, первым в конфигурации идет блок без пункта type = ad, Python выполняет пункт verify_mfa, сначала ищет user_dn пользователя на сервере FreeIPA, затем отправляет его на проксирующий LDAP-сервер Multifactor. Далее в конфигурации идет блок с пунктом type = ad, Python идет на соответствующий сервер и выполняет смену пароля (change_password_ad). Если от MULTIFACTOR не придет подтверждения, Python не выполняет второй пункт.

    Практика показывает, что пользователь всегда забывает сменить свой пароль вовремя. Это приводит к лишней и необязательной нагрузке на администраторов, да и самим пользователям доставляет дискомфорт, что не есть хорошо. Решить эту проблему помогла система автоматических напоминаний, которые были добавлены в корпоративный мессенджер (в нашем случае — Rocket.Chat). Например:

    Нами был использован штатный механизм Rocket.Chat — интеграция webHook. URL формируется автоматически, а также указывается чат и от чьего имени осуществляется публикация:

    Затем на сервере AD отрабатывает простой скрипт:

    $BodyTxt1 = 'Срок действия пароля для '# текст сообщения в Rocket.Chat
    $BodyTxt2 = ' заканчивается через '# текст сообщения в Rocket.Chat
    $BodyTxt3 = ' дней. Не забудьте заранее сменить ваш пароль.' # текст сообщения в Rocket.Chat
    $Hook = "https://localhost;8080/hooks/hook_id" #используется Hook, сформированный в Rocket.Chat
    $warnDays = (get-date).adddays(7) # количество дней до истечения пароля
    $2Day = get-date
    $Users = Get-ADUser -SearchBase 'OU=users,OU=ipa,DC=win,DC=hostkey,DC=ru' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, SamAccountName | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress, SamAccountName
    foreach ($user in $users) {
    if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
    $lastdays = ( $user.ExpirationDate -$2Day).days
    $Username = "@"+ $user.SamAccountName
    $Text = $BodyTxt1 + $Username + $BodyTxt2 + $lastdays + $BodyTxt3
    $Payload = @{
    "text"= $Text
    }
    Invoke-RestMethod -Uri $Hook -Body $Payload -Method Post -ErrorAction Stop
    sleep -Milliseconds 300 # задержка позволяет Rocket.Chat обрабатывать сообщения без сбоев
    }
    }

    Этот скрипт помещается в AD и в планировщике задач AD указывается задача на отработку expass.

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

    Арендуйте выделенные и виртуальные GPU серверы с профессиональными графическими картами NVIDIA RTX A5000 / A4000 в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Другие статьи

    07.10.2024

    Список всех кодов состояния HTTP-ответа сервера

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

    01.10.2024

    Устанавливаем Python 3 на VPS и VDS

    Пошаговая инструкция установки Python 3 на VPS и VDS для быстрой и корректной работы.

    27.09.2024

    В чем основные отличия VPS-сервера от VDS?

    VPS или VDS — в чем разница? Узнайте ключевые отличия между этими типами виртуальных серверов и решите, какой вариант подходит именно вам.

    24.09.2024

    Как выбрать сервер для Telegram-бота?

    Нужен надежный сервер для Telegram-бота? Рассказываем как выбрать сервер и как его настроить для стабильной работы и безопасности вашего проекта.

    16.09.2024

    10 советов по Open WebUI, которые помогут в работе с нейросетями

    Наши практические советы помогут вам максимально эффективно использовать Open WebUI, улучшить управление нейросетевыми моделями и ускорить выполнение задач.

    HOSTKEY Выделенные серверы в Европе, России и США Готовые решения и индивидуальные конфигурации серверов на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS-атак и безлимитный соединением на скорости 1 Гбит/с 30
    4.3 48 48
    Upload