slapo-accesslog - наложение slapd ведения журнала доступа.
ОБЗОР
/usr/local/etc/openldap/slapd.conf
ОПИСАНИЕ
Наложение ведения журнала доступа может быть использовано для сбора информации о всех обращениях
к заданной базе данных в другой базе данных. Это позволяет изучать действия, производимые с
заданной базой данных, с помощью обычных LDAP-запросов, вместо просмотра простых локальных
текстовых log-файлов. С помощью параметров конфигурации можно настроить подмножества типов операций
для помещения в журнал, а также автоматическое удаление старых записей из базы данных журнала.
Записи журнала строятся на объектных классах и атрибутах из набора схемы данных audit (смотрите ниже),
чтобы их можно было просматривать в читабельном варианте как в виде LDIF, так и в неоформленном виде.
КОНФИГУРАЦИЯ
Приводимые параметры
slapd.conf
применяются к наложению ведения журнала доступа. Они должны указываться после директивы
overlay.
logdb <suffix>
Указывает суффикс базы данных, которая будет использоваться для хранения записей журнала. Определение
указываемой базы данных должно также присутствовать в конфигурации. Настройки контроля доступа базы
данных журнала должны предотвращать общий доступ к ней. Корневую запись (суффикс) базы данных
журнала наложение создаст автоматически. Записи журнала будут создаваться как непосредственные
дочерние записи по отношению к корневой записи.
logops <operations>
Указывает, сведения об операциях какого типа заносить в журнал. Корректные типы операций: abandon,
add, bind, compare, delete, extended, modify, modrdn, search и unbind.
Также имеются псевдонимы для общепринятых наборов операций:
writes
add, delete, modify, modrdn
reads
compare, search
session
abandon, bind, unbind
all
все операции
logbase <operations> <baseDN>
Указывает набор операций, сведения о которых будут помещаться в журнал, если эти операции выполняются
над записями из определённого поддерева базы данных. Типы операций те же, что и для директивы
logops,
в качестве разделителя для них используется символ вертикальной черты '|'.
logold <filter>
Указывает фильтр для поиска совпадений среди записей, над которыми выполняются операции
Delete или Modify. Если запись соответствует фильтру, старое содержимое записи помещается
в журнал вместе с текущим запросом.
logoldattr <attr> ...
Указывает список атрибутов, старое содержимое которых будет всегда помещаться в журнал при запросах
Modify и ModRDN. Обычно в журнал помещается только содержимое тех атрибутов, которые были реально
изменены; по умолчанию для запросов ModRDN старые атрибуты в журнал не помещаются.
logpurge <age> <interval>
Указывает максимальный возраст записей журнала, которые будут храниться в базе данных, а также
как часто будет выполняться сканирование базы данных для поиска устаревших записей. Оба аргумента
age
и
interval
указываются как период времени в днях, часах, минутах и секундах. Формат промежутка времени:
[ddd+]hh:mm[:ss], где часы и минуты являются обязательными полями, а дни и секунды - опциональными.
Все числовые поля, за исключением поля дней, которое может состоять из произвольного количества цифр,
но не больше пяти, должны состоять ровно из двух цифр. Например,
logpurge 2+00:00 1+00:00
говорит о том, что база данных журнала должна будет сканироваться в поисках устаревших записей
каждый день, при этом записи старше двух дней будут удалены. Если механизм манипуляции данными
базы данных журнала поддерживает упорядоченное индексирование атрибутов с синтаксисом generalizedTime,
определение индекса eq для атрибута
reqStart
существенно повысит производительность операции удаления.
logsuccess TRUE | FALSE
Если этот параметр установлен в TRUE, то записи журнала будут генерироваться только для успешно
выполненных запросов, то есть запросов, в ответ на которые был возвращён результирующий код 0
(LDAP_SUCCESS). Если этот параметр установлен в FALSE, то записи журнала будут генерироваться
для всех запросов, независимо от того, были ли они выполнены успешно, или нет.
Значение по умолчанию - FALSE.
Наложение
accesslog
использует описанный далее набор схемы данных "audit", разработанный специально для баз данных
accesslog,
и не предназначенный для использования где-либо ещё. Также следует отметить, что работа над этим набором схемы
ещё не окончена,
так что в него ещё могут быть внесены изменения. Данный набор схемы загружается автоматически наложением
accesslog.
Набор включает несколько объектных классов и связанных с ними типов атрибутов, описанных ниже.
Основной объектный класс -
auditObject,
от которого наследуются два дополнительных объектных класса
auditReadObject
и
auditWriteObject.
От этих классов далее наследуются объектные классы для каждого типа операций LDAP. Такая иерархия
объектных классов разработана для обеспечения гибкого и эффективного поиска по журналу как
по конкретным типам операций, так и по более обобщённой классификации. Определение объектного класса
auditObject:
( 1.3.6.1.4.1.4203.666.11.5.2.1
NAME 'auditObject'
DESC 'OpenLDAP request auditing'
SUP top STRUCTURAL
MUST ( reqStart $ reqType $ reqSession )
MAY ( reqDN $ reqAuthzID $ reqControls $ reqRespControls $
reqEnd $ reqResult $ reqMessage $ reqReferral ) )
Имейте ввиду, что все OID, используемые в наборе схемы данных журналирования, в настоящий момент
принадлежат ветке OpenLDAP Experimental. Ожидается, что в будущем они будут перемещены в ветку Standard.
Обзор типов атрибутов:
reqStart
и
reqEnd
предназначены для хранения времени начала и конца операции, соответственно.
Они используют синтаксис generalizedTime. Атрибут
reqStart
также используется для формирования RDN каждой записи журнала.
Атрибут
reqType
- это простая строка, содержащая тип операции, сведения о которой сохраняются в журнал, например
add,
delete,
search
и т.д. Для расширенных операций тип также включает OID расширенной операции, например
extended(1.1.1.1).
Атрибут
reqSession
- это идентификатор, форма которого зависит от реализации, общий для всех операций в рамках одной
сессии LDAP. В настоящее время это внутренний идентификатор соединения slapd,
сохраняющийся в виде десятичного числа.
Атрибут
reqDN
- это уникальное имя distinguishedName целевой записи операции. Например, для запроса Bind это
Bind DN, для запроса Add это DN добавляемой записи, для запроса Search это DN базы поиска.
Атрибут
reqAuthzID
- это уникальное имя distinguishedName пользователя, выполняющего операцию. Обычно это имя, которое
связывается с сессией в её начале посредством выполнения запроса Bind (если он выполнялся),
однако оно может быть изменено при различных условиях.
В атрибутах
reqControls
и
reqRespControls
содержатся любые элементы управления, посылаемые клиентом при запросе и возвращаемые сервером в
ответе, соответственно. Значения атрибутов представляют собой неинтерпретируемую строку октетов.
Атрибут
reqResult
- это цифровой результирующий код LDAP для выполненной операции, который отражает либо её успешное
завершение, либо код конкретной ошибки LDAP. Код ошибки может сопровождаться текстовым сообщением,
которое помещается в атрибут
reqMessage.
Атрибут
reqReferral
содержит любые отсылки, которые были возвращены с результатом запроса.
В объектных классах, специфичных для операций, определяются дополнительные атрибуты,
в которых помещаются параметры, связанные с конкретной операцией:
( 1.3.6.1.4.1.4203.666.11.5.2.4
NAME 'auditAbandon'
DESC 'Abandon operation'
SUP auditObject STRUCTURAL
MUST reqId )
Для операции
Abandon
атрибут
reqId
содержит идентификатор сообщения того запроса, от выполнения которого требовалось отказаться.
( 1.3.6.1.4.1.4203.666.11.5.2.5
NAME 'auditAdd'
DESC 'Add operation'
SUP auditWriteObject STRUCTURAL
MUST reqMod )
Объектный класс операции
Add
наследуется от класса
auditWriteObject.
Классы операций Add и Modify очень похожи. В атрибут
reqMod
помещаются все атрибуты оригинальной добавляемой записи (в случае операции Modify - все атрибуты,
модификация которых была произведена). Формат значений атрибута
reqMod:
attribute:<+|-|=|#> [ value]
Здесь знак '+' указывает на добавление значения (add), знак '-' - на удаление (delete),
знак '=' - на замену (replace), а знак '#' - на инкремент (increment).
Для операции Add все значения в атрибуте reqMod будут иметь знак '+'.
( 1.3.6.1.4.1.4203.666.11.5.2.6
NAME 'auditBind'
DESC 'Bind operation'
SUP auditObject STRUCTURAL
MUST ( reqVersion $ reqMethod ) )
Объектный класс операции
Bind
включает атрибут
reqVersion,
в котором содержится версия протокола LDAP, указанная в запросе Bind, а также атрибут
reqMethod,
в котором содержится метод Bind, используемый в запросе Bind. В качестве метода может быть строка
SIMPLE
для подсоединений LDAP Simple Bind, либо
SASL(<mech>)
для подсоединений SASL Bind. Обратите внимание, что если данное наложение настроено не на
глобальном уровне, в журнал попадут только подсоединения Simple Bind, в которых используются
DN из текущей базы данных.
( 1.3.6.1.4.1.4203.666.11.5.2.7
NAME 'auditCompare'
DESC 'Compare operation'
SUP auditObject STRUCTURAL
MUST reqAssertion )
Для операции
Compare
атрибут
reqAssertion
содержит утверждение значения атрибута (Attribute Value Assertion), используемое в запросе Compare.
( 1.3.6.1.4.1.4203.666.11.5.2.8
NAME 'auditDelete'
DESC 'Delete operation'
SUP auditWriteObject STRUCTURAL
MAY reqOld )
Для операции
Delete
не требуется дополнительных параметров. Однако, опциональный атрибут
reqOld
может использоваться для сохранения содержимого записи перед её удалением. Формат значений атрибута
reqOld:
attribute: value
Атрибут
reqOld
присутствует, только если удаляемая запись соответствует фильтру в параметре конфигурации
logold.
( 1.3.6.1.4.1.4203.666.11.5.2.9
NAME 'auditModify'
DESC 'Modify operation'
SUP auditWriteObject STRUCTURAL
MAY reqOld MUST reqMod )
Запись операции
Modify
содержит описание произведённых модификаций в атрибуте
reqMod,
формат значений которого уже описан ранее в пояснениях к объектному классу операции Add. Опционально
в этой записи может сохраняться предыдущее содержимое модифицированных атрибутов в атрибуте
reqOld,
формат значений которого уже описан выше в пояснениях к объектному классу операции Delete. Атрибут
reqOld
присутствует, только если модифицируемая запись соответствует фильтру в параметре конфигурации
logold.
( 1.3.6.1.4.1.4203.666.11.5.2.10
NAME 'auditModRDN'
DESC 'ModRDN operation'
SUP auditWriteObject STRUCTURAL
MUST ( reqNewRDN $ reqDeleteOldRDN )
MAY ( reqNewSuperior $ reqOld ) )
Объектный класс операции
ModRDN
использует атрибут
reqNewRDN
для сохранения нового RDN запроса. Атрибут
reqDeleteOldRDN
- это логическое значение (синтаксис Boolean); если оно установлено в
TRUE,
старое RDN было удалено из записи, а если в
FALSE,
старое RDN было сохранено. В атрибуте
reqNewSuperior
сохраняется DN новой родительской записи, если таковая была указана в запросе. Атрибут
reqOld
присутствует, только если модифицируемая запись соответствует фильтру в параметре конфигурации
logold
и содержит атрибуты из списка в параметре конфигурации
logoldattr.
Объектный класс операции
Search
использует атрибут
reqScope
для хранения диапазона оригинального поискового запроса и использует значения,
определённые для формата LDAP URL, например,
base,
one,
sub
или
subord.
Атрибут
reqDerefAliases
принимает одно из значений
never,
finding,
searching
или
always,
означающих, каким образом во время поиска будут обрабатываться псевдонимы. Атрибут
reqAttrsOnly
- это логическое значение (синтаксис Boolean); если оно установлено в
TRUE,
запрашивались только имена атрибутов, а если в
FALSE,
атрибуты запрашивались вместе с их значениями. Атрибут
reqFilter
содержит фильтр, использовавшийся в поисковом запросе. В атрибуте
reqAttr
перечисляются запрашиваемые атрибуты, если таковые указывались при запросе. Атрибут
reqEntries
- целое число, означающее количество записей, которые были возвращены на данный поисковый запрос.
Атрибуты
reqSizeLimit
и
reqTimeLimit
показывают, какие ограничения были запрошены клиентом для данной операции поиска.
( 1.3.6.1.4.1.4203.666.11.5.2.12
NAME 'auditExtended'
DESC 'Extended operation'
SUP auditObject STRUCTURAL
MAY reqData )
Объектный класс операции
Extended
представляет расширенную операцию LDAP. Как было сказано выше, в атрибут
reqType
родительского класса включается актуальный OID операции. Если с запросом предоставлялась какая-либо
дополнительная информация, она будет помещена в атрибут
reqData
как неинтерпретируемая строка октетов.
ПРИМЕЧАНИЯ
Журнал доступа, реализуемый данным наложением, может использоваться для различных других задач,
например, в качестве журнала изменений (ChangeLog) для механизма репликации,
а также для ведения журналов в целях безопасности или аудита.