Настройка динамических объектов

Эллес поддерживает работу с динамическими объектами, включая инструменты управления и настройки времени жизни (TTL) на уровне леса доменов.

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

В Эллес реализован механизм динамических записей каталога, представляющих собой объекты с ограниченным сроком жизни (TTL, Time-To-Live). Значение TTL хранится в атрибуте entryTTL и определяет период существования объекта в каталоге.

При создании или обновлении динамического объекта на основе значения entryTTL вычисляется значение атрибута msDS-Entry-Time-To-Die, задающее абсолютное время истечения срока жизни объекта. С течением времени оставшийся срок жизни объекта автоматически уменьшается; при достижении нуля объект удаляется из каталога без вмешательства администратора.

Клиентские приложения могут продлевать срок жизни объекта, обновляя значение entryTTL, что приводит к пересчету значения msDS-Entry-Time-To-Die, позволяя поддерживать актуальность временных данных.

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

Реализация в Эллес

Динамические объекты создаются с помощью утилиты samba-tool с возможностью указания для них времени жизни (TTL). Значение TTL сохраняется в атрибуте entryTTL, после чего вычисляется соответствующее значение msDS-Entry-Time-To-Die.

Динамические объекты могут создаваться во всех разделах каталога, включая пользовательские, за исключением разделов схемы (Schema) и конфигурации (Configuration).

При создании динамического объекта:

  • если параметр TTL указан явно, используется переданное в нем значение (записывается в атрибут entryTTL);

  • если параметр не указан, применяется значение по умолчанию, определенное параметром DynamicObjectDefaultTTL (хранится в атрибуте msDS-Other-Settings объекта CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=<domain>,DC=<tld>; значение по умолчанию — 86400 секунд, 24 часа);

  • если указанное значение TTL меньше допустимого минимального значения, используется значение параметра DynamicObjectMinTTL (хранится в атрибуте msDS-Other-Settings объекта CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=<domain>,DC=<tld>; значение по умолчанию — 900 секунд, 15 минут).

После создания динамического объекта на основе значения entryTTL вычисляется значение атрибута msDS-Entry-Time-To-Die, которое хранит абсолютное время удаления объекта.

Автоматическое удаление

Для удаления устаревших динамических объектов доработан механизм сборки мусора (garbage collection), выполняющий периодическую очистку каталога.

Динамический объект удаляется, если в момент запуска сборщика мусора (garbage collector):

  • текущее системное время больше или равно значению атрибута msDS-Entry-Time-To-Die;

  • у объекта отсутствуют дочерние объекты.

Если у родительского и дочернего динамического объекта совпадает значение msDS-Entry-Time-To-Die, сначала удаляется дочерний объект, а затем — родительский.

Удаление выполняется полностью, без помещения объекта в корзину каталога и без создания записи в состоянии tombstone.

Механизм сборки мусора запускается независимо на каждом контроллере домена и удаляет динамические объекты при выполнении заданных условий.

Репликация и обработка

Атрибуты динамических объектов, включая entryTTL и msDS-Entry-Time-To-Die, реплицируются между контроллерами домена аналогично атрибутам статических объектов.

Операции работы с каталогом (поиск, чтение, добавление и изменение) поддерживают динамические объекты без каких-либо отличий от статических.

Эллес обеспечивает уникальность имен объектов независимо от их типа. Невозможно создать статический объект с именем, совпадающим с именем существующего динамического объекта, и наоборот.

Ограничения и особенности

В Эллес действуют следующие ограничения:

  • запрещено создавать статические объекты в качестве дочерних объектов динамического объекта;

  • запрещено изменять тип существующего объекта (статический → динамический);

  • при удалении динамического объекта удаляются все ссылки на него из связанных (linked) атрибутов других объектов;

  • ссылки на объект в несвязанных (non-linked) атрибутах сохраняются.

Дополнительно реализован механизм корректировки времени жизни родительских объектов. Если дочерний динамический объект имеет большее значение msDS-Entry-Time-To-Die, чем родительский, значение времени жизни родительского объекта автоматически увеличивается до максимального значения времени жизни потомков плюс одна секунда. Это предотвращает удаление родительского объекта раньше его дочерних объектов.

Работа с динамическими объектами

Управление динамическими объектами осуществляется с помощью:

В примере создается временный пользователь для тестирования доступа к ресурсам.

Пользователь создается как динамический объект и автоматически удаляется по истечении заданного срока жизни:

  1. Создание динамического объекта пользователя со сроком жизни 1 час:

    samba-tool dynamicobject add user TempAccessUser \
        --ttl=3600

    Пользователь TempAccessUser будет автоматически удален из каталога через 3600 секунд.

  2. Проверка того, что созданный пользователь присутствует в списке динамических объектов в каталоге:

    samba-tool dynamicobject list

    Команда выводит DN всех динамических объектов, существующих в каталоге.

  3. Проверка значений атрибутов, связанных со сроком жизни объекта:

    samba-tool dynamicobject show CN=TempAccessUser,CN=Users,DC=<domain>,DC=<tld> \
        --attributes=entryTTL,msDS-Entry-Time-To-Die

    Атрибут entryTTL показывает оставшийся срок жизни объекта, а msDS-Entry-Time-To-Die — момент времени, когда объект будет удален.

  4. Если временный доступ требуется сохранить дольше, можно увеличить значение TTL:

    samba-tool dynamicobject edit CN=TempAccessUser,CN=Users,DC=<domain>,DC=<tld>

    В открывшемся редакторе изменить значение атрибута entryTTL и сохранить изменения.

  5. После изменения TTL можно повторно проверить параметры объекта:

    samba-tool dynamicobject show CN=TempAccessUser,CN=Users,DC=<domain>,DC=<tld> \
        --attributes=entryTTL,msDS-Entry-Time-To-Die
  6. Если требуется немедленно удалить объекты с истекшим сроком жизни, можно запустить очистку вручную:

    sudo samba-tool dynamicobject cleanup

После истечения TTL пользователь TempAccessUser будет автоматически удален механизмом сборки мусора.

Управление настройками срока жизни динамических объектов в лесу

Управление настройками срока жизни динамических объектов осуществляется с помощью следующих подкоманд утилиты samba-tool:

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

    samba-tool dynamicobject ttl defaultttl

    или:

    samba-tool forest dynamicobject defaultttl
  • изменение значения времени жизни динамических объектов по умолчанию:

    samba-tool dynamicobject ttl defaultttl <seconds>

    или:

    samba-tool forest dynamicobject defaultttl <seconds>
  • получение текущего минимального значения времени жизни динамических объектов:

    samba-tool dynamicobject ttl minttl

    или:

    samba-tool forest dynamicobject minttl
  • изменение минимального значения времени жизни динамических объектов:

    samba-tool dynamicobject ttl minttl <seconds>

    или:

    samba-tool forest dynamicobject minttl <seconds>

Допустимый диапазон значений для обоих параметров составляет от 1 до 31557600 секунд (до одного года). При изменении параметров новые значения начинают применяться к создаваемым динамическим объектам.

Настройка периодичности автоматической очистки динамических объектов

Периодичность проверки динамических объектов на истечение срока жизни настраивается с помощью параметра dynamic object:check_deleted_interval в разделе [global] файла конфигурации smb.conf.

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

Пример изменения значения:

[global]
    ...
    dynamic object:check_deleted_interval = 60
    ...