Администрирование групповых управляемых служебных учетных записей (gMSA)

В Эллес реализована поддержка базовой функциональности по работе с групповыми управляемыми служебными учетными записями (Group Managed Service Account, gMSA).

В текущей версии функциональность gMSA доступна при работе контроллеров Эллес в составе домена, развернутого с помощью Microsoft Active Directory Domain Services.

Общие сведения

Учетные записи gMSA позволяют запускать службы на серверах в домене Эллес с аутентификацией по протоколу Kerberos без необходимости управлять паролями вручную.

Поддержка gMSA обеспечивает:

  • формирование и смену паролей для учетных записей gMSA в автоматическом режиме;

  • дополнительную защиту от несанкционированного изменения учетной записи, от имени которой запускается служба, а также от несанкционированного доступа к паролю такой учетной записи;

  • автоматическую синхронизацию паролей между машинами — участниками домена;

  • возможность делегировать управление учетными записями администраторам домена;

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

Полноценная поддержка gMSA доступна в доменах и лесах с функциональным уровнем 2012 и выше.

Принцип работы

Чтобы контроллеры домена начали формировать пароли для учетных записей gMSA, должен быть сгенерирован корневой ключ (root key). Данный ключ сохраняется в контейнере CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=domain,DC=name службы каталогов и реплицируется на все контроллеры домена.

Корневой ключ представляет собой объект класса msKds-ProvRootKey с ассиметричным ключом; длина открытой (msKds-PublicKeyLength) и закрытой (msKds-PrivateKeyLength) части ассиметричного ключа используется для создания секретов с помощью алгоритма симметричного шифрования.

Объекты gMSA имеют класс msDS-GroupManagedServiceAccount и хранятся в партиции по умолчанию службы каталогов и реплицируются на все контроллеры домена.

Работа с объектами gMSA в службе каталогов определяется следующими атрибутами:

  • msDS-GroupMSAMembership — используется для проверки того, что запрашивающая пароль к gMSA машина — участник домена имеет на это право;

  • msDS-ManagedPasswordId — идентификатор текущего пароля для gMSA;

  • msDS-ManagedPasswordPreviousId — идентификатор предыдущей версии пароля;

  • msDS-ManagedPasswordInterval — интервал автоматической смены пароля;

  • msDS-ManagedPassword — поле типа BLOB для пароля.

    Атрибут принадлежит к типу constructed и его значение вычисляется каждый раз при запросе на его чтение. Любой контроллер домена с правом на запись может вычислить значение этого атрибута, и значение это всегда будет одинаково.

За генерацию паролей для gMSA и их синхронизацию между серверами в домене отвечает служба распространения ключей (Key Distribution Service, KDS). Данная служба реализует криптографические функции для получения пароля на основе криптографических материалов, включающих в себя корневой ключ.

Также служба KDS выполняет смену пароля по запросу контроллера домена, чем обеспечивается дополнительная безопасность. Период ротации ключей по умолчанию он составляет 30 дней.

Ключи и пароли распространяются по серверам домена по протоколу Kerberos.

Машины — участники домена, на которых запускаются службы от имени gMSA, проходят аутентификацию Kerberos на контроллерах домена Эллес с помощью пароля gMSA, получают билеты Kerberos TGT (Ticket-Granting Ticket), а затем используют TGT для запроса сервисных билетов Kerberos.

Поддержка в Эллес

Эллес предоставляет:

  • инструменты для работы с корневыми ключами;

  • инструменты для работы с учетными записями gMSA;

  • инструменты для управления разрешениями на использование (чтение пароля) учетной записи gMSA;

  • возможность выполнения операций с паролями не только с использованием локальной БД службы каталогов (sam.ldb), но и посредством аутентификации на удаленном сервере (опция -H ldap://DC-NAME), включая:

    • получение текущего и предыдущего паролей учетной записи gMSA;

    • получение билета Kerberos TGT для учетной записи gMSA с возможностью сохранения в локальном кэше.

Процесс настройки

В общем случае процесс настройки учетной записи gMSA в домене Эллес состоит из следующих шагов:

  1. Создание и настройка корневого ключа (см. раздел «Создание корневого ключа»).

    При создании домена Эллес с помощью подкоманды samba-tool domain provision корневой ключ создается автоматически.
  2. Создание и настройка учетной записи gMSA (см. раздел «Создание учетной записи gMSA»).

  3. Настройка списка учетных записей машин — участников домена, на которых будет доступна для использования gMSA (см. раздел «Выдача разрешения на использование (чтение пароля) учетной записи gMSA»).

  4. Настройка запуска служб на машинах — участниках домена от имени учетной записи gMSA.

Операции с корневыми ключами

Для работы с корневыми ключами с помощью утилиты samba-tool используется группа подкоманд domain kds root-key.

Операции доступны пользователям с правами администратора домена (член группы Domain Admins) или администратора предприятия (член группы Enterprise Admins).

Создание корневого ключа

Формат вызова:

samba-tool domain kds root-key create [-H <URL>] [options]

При создании ключу присваивается уникальный идентификатор (GUID), который должен в дальнейшем использоваться для работы с ним.

По умолчанию время начала периода действия корневого ключа совпадает с временем его создания. Существует возможность задать начало периода действия с помощью параметра --use-start-time.

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

При создании домена Эллес с помощью подкоманды samba-tool domain provision корневой ключ создается автоматически.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --json — вывод результатов выполнения операции в формате JSON;

  • --use-start-time — начало использования корневого ключа в формате ISO 8601 YYYY-MM-DD HH:MM:SS, в формате временной метки LDAP YYYYmmddHHMMSS.0Z или в виде строкового значения now (ключ доступен для использования на целевом контроллере сразу после создания);

  • -v|--verbose — вывод детальной информации.

Примеры

Пример создания корневого ключа:

samba-tool domain kds root-key create
created root key 52c454a8-9e1d-0b4b-3e1a-75b360333e85, usable from 2024-07-09T20:32:30.989180+00:00 (about now)

Пример создания корневого ключа с выводом детальной информации в формате JSON:

samba-tool domain kds root-key create \
   --json \
   -v
{
  "cn": "0bab54e8-ca8b-6b09-05a6-25df7b3fba84",
  "dn": "CN=0bab54e8-ca8b-6b09-05a6-25df7b3fba84,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
  "message": "created root key 0bab54e8-ca8b-6b09-05a6-25df7b3fba84, usable from 2024-07-09T20:35:20.560902+00:00 (about now)\n",
  "msKds-CreateTime": "2024-07-09T20:35:20.560902+00:00",
  "msKds-DomainID": "CN=DC01,OU=Domain Controllers,DC=samdom,DC=example,DC=com",
  "msKds-KDFAlgorithmID": "SP800_108_CTR_HMAC",
  "msKds-KDFParam": "00000000010000000e000000000000005300480041003500310032000000",
  "msKds-PrivateKeyLength": 256,
  "msKds-PublicKeyLength": 2048,
  "msKds-SecretAgreementAlgorithmID": "DH",
  "msKds-UseStartTime": "2024-07-09T20:35:20.560902+00:00",
  "msKds-Version": 1,
  "name": "0bab54e8-ca8b-6b09-05a6-25df7b3fba84",
  "objectGUID": "c637f7ac-0144-4a67-8f86-6f3e6eac6a7d",
  "whenChanged": "20240709203520.0Z",
  "whenCreated": "20240709203520.0Z"
}

Пример создания корневого ключа с заданием начала периода действия:

samba-tool domain kds root-key create \
   --json \
   --use-start-time='2024-07-10 10:00:00'
{
  "dn": "CN=11840b9f-451a-a4b1-0a4f-eb01bd957aa1,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
  "message": "created root key 11840b9f-451a-a4b1-0a4f-eb01bd957aa1, usable from 2024-07-10T07:00:00+00:00 (about 10 hours in the FUTURE)",
  "msKds-CreateTime": "133650311471620020",
  "msKds-UseStartTime": "133650684000000000",
  "name": "11840b9f-451a-a4b1-0a4f-eb01bd957aa1",
  "status": "OK"
}

Удаление корневого ключа

Формат вызова:

samba-tool domain kds root-key delete [-H <URL>] [options]

В качестве имени корневого ключа в параметре --name ожидается GUID, присвоенный ему при создании. Для получения GUID доступных корневых ключей используйте подкоманду samba-tool domain kds root-key list.

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

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — GUID удаляемого корневого ключа (обязательный);

  • --json — вывод результатов выполнения операции в формате JSON.

Примеры

Пример удаления корневого ключа:

  • получение GUID:

    samba-tool domain kds root-key list \
       --json
    [
      {
        "dn": "CN=11840b9f-451a-a4b1-0a4f-eb01bd957aa1,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
        "msKds-CreateTime": "2024-07-09T20:39:07.162002+00:00",
        "msKds-UseStartTime": "2024-07-10T07:00:00+00:00",
        "name": "11840b9f-451a-a4b1-0a4f-eb01bd957aa1"
      }
    ]
  • удаление корневого ключа:

    samba-tool domain kds root-key delete \
       --name=11840b9f-451a-a4b1-0a4f-eb01bd957aa1
    deleted root key 11840b9f-451a-a4b1-0a4f-eb01bd957aa1

Получение информации о корневом ключе

Формат вызова:

samba-tool domain kds root-key view [-H <URL>] [options]

В качестве имени корневого ключа в параметре --name ожидается GUID, присвоенный ему при создании. Для получения GUID доступных корневых ключей используйте подкоманду samba-tool domain kds root-key list.

Для получения информации о последнем созданном ключе без указания его GUID может использоваться параметр --latest.

В базовом варианте вызова подкоманды в выводе содержатся следующие основные атрибуты корневого ключа:

  • cn — относительное доменное имя (GUID) ключа;

  • dn — уникальное доменное имя ключа;

  • msKds-CreateTime — время создания ключа;

  • msKds-DomainID — полное доменное имя сервера, на котором был создан ключ;

  • msKds-KDFAlgorithmID — идентификатор криптографического алгоритма (по умолчанию — SP800_108_CTR_HMAC);

  • msKds-KDFParam — параметры для алгоритма наследования ключа;

  • msKds-PrivateKeyLength — длина закрытой части ключа (по умолчанию — 256);

  • msKds-PublicKeyLength — длина открытой части ключа (по умолчанию — 2048);

  • msKds-SecretAgreementAlgorithmID — алгоритм совместной генерации общего секретного ключа (по умолчанию — DH);

  • msKds-UseStartTime — начало периода действия ключа;

  • msKds-Version — версия ключа (по умолчанию — 1);

  • name — GUID ключа;

  • objectGUID — GUID объекта;

  • whenChanged — время последнего изменения;

  • whenCreated — время создания.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — GUID удаляемого корневого ключа (обязательный, если не передается --latest);

  • --latest — получение информации о последнем созданном корневом ключе без указания его GUID (обязательный, если не передается --name);

  • --show-secrets — добавление в вывод секретов;

  • --json — вывод результатов выполнения операции в формате JSON;

  • -v|--verbose — вывод детальной информации.

Примеры

Пример получения детальной информации о последнем созданном корневом ключе в формате JSON:

samba-tool domain kds root-key view \
   --latest \
   --show-secrets \
   --json \
   -v
{
  "cn": "0bab54e8-ca8b-6b09-05a6-25df7b3fba84",
  "distinguishedName": "CN=0bab54e8-ca8b-6b09-05a6-25df7b3fba84,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
  "dn": "CN=0bab54e8-ca8b-6b09-05a6-25df7b3fba84,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
  "instanceType": "4",
  "msKds-CreateTime": "2024-07-09T20:35:20.560902+00:00",
  "msKds-DomainID": "CN=DC01,OU=Domain Controllers,DC=samdom,DC=example,DC=com",
  "msKds-KDFAlgorithmID": "SP800_108_CTR_HMAC",
  "msKds-KDFParam": "00000000010000000e000000000000005300480041003500310032000000",
  "msKds-PrivateKeyLength": 256,
  "msKds-PublicKeyLength": 2048,
  "msKds-RootKeyData": "847e4120e425ef00e5ee118c75bef973981d9db849718b14ca9020c2ec66665e1bf6f3498223286670a39f272b16c733b8be012d6ffbfe45062e7598a6a65a3e",
  "msKds-SecretAgreementAlgorithmID": "DH",
  "msKds-SecretAgreementParam": "0c0200004448504d0001000087a8e61db4b6663cffbbd19c651959998ceef608660dd0f25d2ceed4435e3b00e00df8f1d61957d4faf7df4561b2aa3016c3d91134096faa3bf4296d830e9a7c209e0c6497517abd5a8a9d306bcf67ed91f9e6725b4758c022e0b1ef4275bf7b6c5bfc11d45f9088b941f54eb1e59bb8bc39a0bf12307f5c4fdb70c581b23f76b63acae1caa6b7902d52526735488a0ef13c6d9a51bfa4ab3ad8347796524d8ef6a167b5a41825d967e144e5140564251ccacb83e6b486f6b3ca3f7971506026c0b857f689962856ded4010abd0be621c3a3960a54e710c375f26375d7014103a4b54330c198af126116d2276e11715f693877fad7ef09cadb094ae91e1a15973fb32c9b73134d0b2e77506660edbd484ca7b18f21ef205407f4793a1a0ba12510dbc15077be463fff4fed4aac0bb555be3a6c1b0c6b47b1bc3773bf7e8c6f62901228f8c28cbb18a55ae31341000a650196f931c77a57f2ddf463e5e9ec144b777de62aaab8a8628ac376d282d6ed3864e67982428ebc831d14348f6f2f9193b5045af2767164e1dfc967c1fb3f2e55a4bd1bffe83b9c80d052b985d182ea0adb2a3b7313d3fe14c8484b1e052588b9b7d2bbd2df016199ecd06e1557cd0915b3353bbb64e0ec377fd028370df92b52c7891428cdc67eb6184b523d1db246c32f63078490f00ef8d647d148d47954515e2327cfef98c582664b4c0f6cc41659",
  "msKds-UseStartTime": "2024-07-09T20:35:20.560902+00:00",
  "msKds-Version": 1,
  "name": "0bab54e8-ca8b-6b09-05a6-25df7b3fba84",
  "objectCategory": "CN=ms-Kds-Prov-RootKey,CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com",
  "objectClass": [
    "top",
    "msKds-ProvRootKey"
  ],
  "objectGUID": "c637f7ac-0144-4a67-8f86-6f3e6eac6a7d",
  "showInAdvancedViewOnly": "TRUE",
  "uSNChanged": "5024",
  "uSNCreated": "5024",
  "whenChanged": "20240709203520.0Z",
  "whenCreated": "20240709203520.0Z"
}

Получение списка корневых ключей в домене

Формат вызова:

samba-tool domain kds root-key list [-H <URL>] [options]

В базовом варианте вызова подкоманды в выводе содержатся следующие основные атрибуты каждого корневого ключа:

  • dn — уникальное доменное имя ключа;

  • msKds-CreateTime — время создания ключа;

  • msKds-UseStartTime — начало периода действия ключа;

  • name — GUID ключа.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --show-secrets — добавление в вывод секретов;

  • --json — вывод результатов выполнения операции в формате JSON;

  • -v|--verbose — вывод детальной информации.

Примеры

Получение списка корневых ключей в домене в формате JSON:

samba-tool domain kds root-key list \
   --json
[
  {
    "dn": "CN=0bab54e8-ca8b-6b09-05a6-25df7b3fba84,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
    "msKds-CreateTime": "2024-07-09T20:35:20.560902+00:00",
    "msKds-UseStartTime": "2024-07-09T20:35:20.560902+00:00",
    "name": "0bab54e8-ca8b-6b09-05a6-25df7b3fba84"
  },
  {
    "dn": "CN=c730bd98-53ec-942d-7507-ecc02e4828ff,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=samdom,DC=example,DC=com",
    "msKds-CreateTime": "2024-07-09T20:34:59.444824+00:00",
    "msKds-UseStartTime": "2024-07-09T20:34:59.444824+00:00",
    "name": "c730bd98-53ec-942d-7507-ecc02e4828ff"
  }
]

Операции с учетными записями gMSA

Для работы с учетными записями gMSA с помощью утилиты samba-tool используется группа подкоманд service-account.

Операции доступны пользователям с правами администратора домена (член группы Domain Admins) или администратора предприятия (член группы Enterprise Admins).

Создание учетной записи gMSA

Формат вызова:

samba-tool service-account create -H <URL> [options]

При вызове ожидаются имя учетной записи gMSA в параметре --name и полное доменное имя учетной записи в параметре --dns-host-name.

Например, если gMSA с именем --name=gmsaServiceName создается в домене samdom.example.com, то --dns-host-name=gmsaServiceName.samdom.example.com.

При необходимости также могут быть заданы дополнительные параметры — разрешения в виде строки SDDL, периодичность смены пароля и один или несколько идентификаторов экземпляров сервисов (SPN) для использования вместе с создаваемой учетной записью gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный);

  • --dns-host-name — полное доменное имя учетной записи gMSA (обязательный);

  • --group-msa-membership — значение атрибута msDS-GroupMSAMembership в виде строки на языке определения дескрипторов безопасности (SDDL), определяющей разрешения на использование учетной записи gMSA;

  • --managed-password-interval — периодичность смены пароля в днях (по умолчанию — 30 дней);

    Задает значение атрибута msDS-ManagedPasswordInterval. После создания значение доступно только для просмотра. Изменение невозможно.
  • --service-principal-names — список идентификаторов экземпляров сервисов (SPN) через запятую без пробелов для использования вместе с создаваемой учетной записью gMSA.

    См. подробнее о работе с SPN в разделе «Администрирование SPN».

Примеры

Пример создания учетной записи gMSA:

samba-tool service-account create \
   --name=GMSA1 \
   --dns-host-name=gmsa1.samdom.example.com
Created group managed service account: GMSA1

Пример создания учетной записи gMSA с указанием интервала обновления пароля и значения для атрибута msDS-GroupMSAMembership:

samba-tool service-account create \
   --name=GMSA2 \
   --dns-host-name=gmsa2.samdom.example.com \
   --managed-password-interval=25 \
   --group-msa-membership="O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2100)"
Created group managed service account: GMSA2

Пример создания учетной записи gMSA с указанием списка SPN:

samba-tool service-account create \
   --name=GMSA3 \
   --dns-host-name=gmsa3.samdom.example.com \
   --service-principal-names=HTTP/webserver1.samdom.example.com,HTTP/webserver2.samdom.example.com
Created group managed service account: GMSA3

Изменение учетной записи gMSA

Формат вызова:

samba-tool service-account modify -H <URL> [options]

При вызове ожидается имя учетной записи в параметре --name.

Изменение интервала обновления пароля (значение атрибута msDS-ManagedPasswordInterval) после создания невозможно.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный);

  • --dns-host-name — полное доменное имя учетной записи gMSA;

  • --group-msa-membership — значение атрибута msDS-GroupMSAMembership в виде строки на языке определения дескрипторов безопасности (SDDL), определяющей разрешения на использование учетной записи gMSA.

Примеры

Пример изменения значения атрибута msDS-GroupMSAMembership учетной записи gMSA:

samba-tool service-account modify \
   --name=GMSA1 \
   --group-msa-membership="O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2100)"
Modified group managed service account: GMSA1

Удаление учетной записи gMSA

Формат вызова:

samba-tool service-account delete -H <URL> [options]

При вызове ожидается имя учетной записи gMSA в параметре --name.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный).

Примеры

Пример удаления учетной записи gMSA:

samba-tool service-account delete \
   --name=GMSA3
Deleted group managed service account: GMSA3

Получение информации об учетной записи gMSA

Формат вызова:

samba-tool service-account view -H <URL> [options]

При вызове ожидается имя учетной записи gMSA в параметре --name.

В выводе подкоманды содержатся следующие базовые атрибуты учетной записи gMSA:

  • name — имя учетной записи;

  • cn — относительное доменное имя учетной записи;

  • dn — уникальное доменное имя учетной записи;

  • sAMAccountName — имя учетной записи SAM (значение name с символом $ в конце);

  • dNSHostName — полное доменное имя учетной записи;

  • msDS-GroupMSAMembership — строка на языке определения дескрипторов безопасности (SDDL), определяющая разрешения на использование учетной записи gMSA;

  • msDS-ManagedPasswordInterval — интервал автоматической смены пароля учетной записи;

  • msDS-SupportedEncryptionTypes — поддерживаемые типы шифрования (по умолчанию — 28, что соответствует RC4, AES 128, AES 256);

  • pwdLastSet — время последнего изменения пароля.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный).

Примеры

Пример получения информации об учетной записи gMSA:

samba-tool service-account view \
   --name=GMSA2
{
  "badPasswordTime": "1601-01-01T00:00:00+00:00",
  "badPwdCount": 0,
  "cn": "GMSA2",
  "codePage": 0,
  "countryCode": 0,
  "dNSHostName": "gmsa2.samdom.example.com",
  "distinguishedName": "CN=GMSA2,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
  "dn": "CN=GMSA2,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
  "instanceType": 4,
  "lastLogoff": "1601-01-01T00:00:00+00:00",
  "lastLogon": "1601-01-01T00:00:00+00:00",
  "logonCount": 0,
  "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2100)",
  "msDS-ManagedPasswordInterval": 20,
  "msDS-SupportedEncryptionTypes": 28,
  "name": "GMSA2",
  "objectCategory": "CN=ms-DS-Group-Managed-Service-Account,CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com",
  "objectClass": [
    "top",
    "person",
    "organizationalPerson",
    "user",
    "computer",
    "msDS-GroupManagedServiceAccount"
  ],
  "objectGUID": "ff08b2bd-e05d-46b9-ac03-f0b62869ad3c",
  "objectSid": "S-1-5-21-1159061634-2679507100-403793082-2119",
  "primaryGroupID": 515,
  "pwdLastSet": "1601-01-01T00:00:00+00:00",
  "sAMAccountName": "GMSA2$",
  "sAMAccountType": 805306369,
  "userAccountControl": 4096
}

Просмотр списка учетных записей gMSA

Формат вызова:

samba-tool service-account list -H <URL> [options]

По умолчанию подкоманды выводит список имен учетных записей gMSA в домене в формате sAMAccountName.

Для получения полного списка атрибутов для каждой учетной записи необходимо использовать ключ --json.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --json — вывод результатов выполнения операции в формате JSON.

Примеры

Пример получения списка имен учетных записей gMSA в домене:

samba-tool service-account list
GMSA1$
GMSA2$

Пример получения полного перечня атрибутов учетных записей gMSA в домене:

samba-tool service-account list \
   --json
{
  "GMSA1$": {
    "badPasswordTime": "1601-01-01T00:00:00+00:00",
    "badPwdCount": 0,
    "cn": "GMSA1",
    "codePage": 0,
    "countryCode": 0,
    "dNSHostName": "gmsa1.samdom.example.com",
    "distinguishedName": "CN=GMSA1,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
    "dn": "CN=GMSA1,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
    "instanceType": 4,
    "lastLogoff": "1601-01-01T00:00:00+00:00",
    "lastLogon": "1601-01-01T00:00:00+00:00",
    "logonCount": 0,
    "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2100)",
    "msDS-ManagedPasswordInterval": 30,
    "msDS-SupportedEncryptionTypes": 28,
    "name": "GMSA1",
    "objectCategory": "CN=ms-DS-Group-Managed-Service-Account,CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com",
    "objectClass": [
      "top",
      "person",
      "organizationalPerson",
      "user",
      "computer",
      "msDS-GroupManagedServiceAccount"
    ],
    "objectGUID": "458bfe6a-e412-42ca-9fd4-742d5077df2a",
    "objectSid": "S-1-5-21-1159061634-2679507100-403793082-2118",
    "primaryGroupID": 515,
    "pwdLastSet": "1601-01-01T00:00:00+00:00",
    "sAMAccountName": "GMSA1$",
    "sAMAccountType": 805306369,
    "userAccountControl": 4096
  },
  "GMSA2$": {
    "badPasswordTime": "1601-01-01T00:00:00+00:00",
    "badPwdCount": 0,
    "cn": "GMSA2",
    "codePage": 0,
    "countryCode": 0,
    "dNSHostName": "gmsa2.samdom.example.com",
    "distinguishedName": "CN=GMSA2,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
    "dn": "CN=GMSA2,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
    "instanceType": 4,
    "lastLogoff": "1601-01-01T00:00:00+00:00",
    "lastLogon": "1601-01-01T00:00:00+00:00",
    "logonCount": 0,
    "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2100)",
    "msDS-ManagedPasswordInterval": 20,
    "msDS-SupportedEncryptionTypes": 28,
    "name": "GMSA2",
    "objectCategory": "CN=ms-DS-Group-Managed-Service-Account,CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com",
    "objectClass": [
      "top",
      "person",
      "organizationalPerson",
      "user",
      "computer",
      "msDS-GroupManagedServiceAccount"
    ],
    "objectGUID": "ff08b2bd-e05d-46b9-ac03-f0b62869ad3c",
    "objectSid": "S-1-5-21-1159061634-2679507100-403793082-2119",
    "primaryGroupID": 515,
    "pwdLastSet": "1601-01-01T00:00:00+00:00",
    "sAMAccountName": "GMSA2$",
    "sAMAccountType": 805306369,
    "userAccountControl": 4096
  }
}

Выдача разрешения на использование (чтение пароля) учетной записи gMSA

Формат вызова:

samba-tool service-account group-msa-membership add -H <URL> [options]

При вызове ожидается имя учетной записи gMSA в параметре --name и sAMAccountName или уникальное доменное имя (DN-имя) субъекта протокола Kerberos, который будет использовать gMSA, в параметре --principal.

Подкоманда добавляет разрешения для указанного субъекта в значение атрибута msDS-GroupMSAMembership учетной записи gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный);

  • --principal — sAMAccountName или уникальное доменное имя (DN-имя) субъекта протокола Kerberos, который будет использовать gMSA (обязательный).

Примеры

Пример добавления разрешений для учетной записи сервера в атрибут msDS-GroupMSAMembership учетной записи gMSA:

samba-tool service-account group-msa-membership add \
   --name=GMSA1 \
   --principal=Server1$
Trustee 'Server1$' is now allowed to show managed passwords for: GMSA1$

Проверка изменения значения атрибута msDS-GroupMSAMembership (по SID объекта):

samba-tool service-account view \
   --name=GMSA1 \
   | grep msDS-GroupMSAMembership
  "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-2121)",

Отзыв разрешения на использование (чтение пароля) учетной записи gMSA

Формат вызова:

samba-tool service-account group-msa-membership remove -H <URL> [options]

При вызове ожидается имя учетной записи gMSA в параметре --name и sAMAccountName или уникальное доменное имя (DN-имя) субъекта протокола Kerberos, который больше не должен иметь доступ к паролю учетной записи gMSA, в параметре --principal.

Подкоманда удаляет разрешения для указанного субъекта из значения атрибута msDS-GroupMSAMembership учетной записи gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный);

  • --principal — sAMAccountName или уникальное доменное имя (DN-имя) субъекта протокола Kerberos, который будет использовать gMSA (обязательный).

Примеры

Пример удаления разрешений для учетной записи сервера из атрибута msDS-GroupMSAMembership учетной записи gMSA:

samba-tool service-account group-msa-membership remove \
   --name=GMSA1 \
   --principal=Server1$
Trustee 'Server1$' removed access to show managed passwords for: GMSA1$

Проверка изменения значения атрибута msDS-GroupMSAMembership (по SID объекта):

samba-tool service-account view \
   --name=GMSA1 \
   | grep msDS-GroupMSAMembership
  "msDS-GroupMSAMembership": "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1159061634-2679507100-403793082-500)",

Просмотр списка разрешений на использование (чтение пароля) учетной записи gMSA

Формат вызова:

samba-tool service-account group-msa-membership list -H <URL> [options]

В выводе подкоманды содержится список уникальных доменных имен (DN) субъектов протокола Kerberos, имеющих разрешения на использование (чтение пароля) учетной записи gMSA.

Параметры

Параметры вызова:

  • -H URL|--URL=URL — URL сервера LDAP; может содержать указание на протокол, имя хоста и номер порта;

  • --name — имя учетной записи gMSA (обязательный);

  • --json — вывод результатов выполнения операции в формате JSON.

Примеры

Пример получения списка субъектов протокола Kerberos, имеющих разрешения на использование учетной записи gMSA:

samba-tool service-account group-msa-membership show \
   --name=GMSA1
{
  "dn": "CN=GMSA1,CN=Managed Service Accounts,DC=samdom,DC=example,DC=com",
  "trustees": [
    "CN=Administrator,CN=Users,DC=samdom,DC=example,DC=com",
    "CN=Server1,CN=Computers,DC=samdom,DC=example,DC=com"
  ]
}

Пример настройки gMSA средствами Эллес

В качестве примера рассмотрим настройку учетной записи gMSA на контроллере Эллес, введенном в домен, который изначально был развернут с помощью Microsoft Active Directory Domain Services.

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

Выполняется следующая последовательность шагов по настройке от имени доменного пользователя Administrator с необходимыми правами:

  1. Проверка наличия корневого ключа.

    Данный пример основан на допущении, что ключ был создан на другом контроллере в домене и был добавлен на текущий контроллер Эллес в результате репликации:

    samba-tool domain kds root-key list
    1 root key found.
    
    name f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
       created        2024-07-11T18:25:35.290512+00:00 (about 22 minutes ago)
       usable from    2024-07-11T08:20:35.290512+00:00 (about 10 hours ago)
       dn             CN=f1acc9a9-bf7f-4413-e2ee-c288f6ad236f,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=gmsaexample,DC=net
  2. Просмотр содержимого ключа.

    Для проверки параметров ключа можно просмотреть его содержимое:

    samba-tool domain kds root-key view \
       --name=f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
    name f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
       created        2024-07-11T18:25:35.290512+00:00 (about 22 minutes ago)
       usable from    2024-07-11T08:20:35.290512+00:00 (about 10 hours ago)
       dn             CN=f1acc9a9-bf7f-4413-e2ee-c288f6ad236f,CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=gmsaexample,DC=net
       cn             f1acc9a9-bf7f-4413-e2ee-c288f6ad236f
       whenCreated    20240711182535.0Z
       whenChanged    20240711182535.0Z
       objectGUID     824f85dd-a7e9-488b-9cac-40f00fc5c1a1
       msKds-KDFAlgorithmID SP800_108_CTR_HMAC
       msKds-KDFParam 00000000010000000e000000000000005300480041003500310032000000
       msKds-SecretAgreementAlgorithmID DH
       msKds-PublicKeyLength 2048
       msKds-PrivateKeyLength 256
       msKds-Version  1
       msKds-DomainID CN=AL-R-DC1,OU=Domain Controllers,DC=gmsaexample,DC=net
  3. Создание доменной группы.

    Для удобства администрирования состава машин — участников домена, которые будут иметь доступ к паролю учетной записи gMSA, создаются:

    • подразделение:

      samba-tool ou add 'OU=GMSAS'
      Added ou "OU=GMSAS,DC=gmsaexample,DC=net"
    • доменная группа:

      samba-tool group add GMSA1 \
         --groupou="OU=GMSAS" \
         --group-scope=Global
      Added group GMSA1
  4. Добавление в группу машин — участников домена.

    Добавленные в группу рабочие станции и серверы будут иметь доступ к паролю учетной записи gMSA:

    samba-tool group addmembers GMSA1 al-r-dc1$,win-cl1$,win-r-dc1$
    Added members to group GMSA1

    Проверка состава группы:

    samba-tool group show GMSA1
    dn: CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net
    objectClass: top
    objectClass: group
    cn: GMSA1
    instanceType: 4
    whenCreated: 20240711180023.0Z
    uSNCreated: 3967
    name: GMSA1
    objectGUID: 3158ea1f-dc51-4b77-be6e-09f8a6ea4fbd
    objectSid: S-1-5-21-280994483-2379122998-3972094575-1601
    sAMAccountName: GMSA1
    sAMAccountType: 268435456
    groupType: -2147483646
    objectCategory: CN=Group,CN=Schema,CN=Configuration,DC=gmsaexample,DC=net
    member: CN=WIN-R-DC1,OU=Domain Controllers,DC=gmsaexample,DC=net
    member: CN=WIN-CL1,CN=Computers,DC=gmsaexample,DC=net
    member: CN=AL-R-DC1,OU=Domain Controllers,DC=gmsaexample,DC=net
    whenChanged: 20240711180436.0Z
    uSNChanged: 3968
    distinguishedName: CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net
  5. Создание групповой управляемой служебной учетной записи (gMSA).

    Создается учетная запись gMSA:

    samba-tool service-account create \
       --name=gmsaSrvc1 \
       --dns-host-name=gmsaSrvc1.gmsaexample.net
    Created group managed service account: gmsaSrvc1

    Созданная запись привязывается к группе GMSA1:

    samba-tool service-account group-msa-membership add \
       --name=gmsaSrvc1 \
       --principal='CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net'
    Trustee 'CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net' is now allowed to show managed passwords for: gmsaSrvc1

    Проверка разрешений, заданных для созданной учетной записи gMSA:

    samba-tool service-account group-msa-membership show \
       --name=gmsaSrvc1 \
       --json
    {
      "dn": "CN=gmsaSrvc1,CN=Managed Service Accounts,DC=gmsaexample,DC=net",
      "trustees": [
        "CN=Administrator,CN=Users,DC=gmsaexample,DC=net",
        "CN=GMSA1,OU=GMSAS,DC=gmsaexample,DC=net"
      ]
    }

Далее созданная учетная запись gMSA может использоваться для выполнения различных задач на добавленных в группу машинах — участниках домена.