Man Linux: Main Page and Category List


       slapo-accesslog - Access Logging overlay to slapd




       The  Access  Logging  overlay  can  be used to record all accesses to a
       given backend database on another database.  This  allows  all  of  the
       activity  on  a  given  database  to  be  reviewed using arbitrary LDAP
       queries,  instead  of  just  logging  to   local   flat   text   files.
       Configuration options are available for selecting a subset of operation
       types to log, and to automatically prune older  log  records  from  the
       logging database.  Log records are stored with audit schema (see below)
       to assure their readability whether viewed as LDIF or in raw form.


       These slapd.conf options apply to the  Access  Logging  overlay.   They
       should appear after the overlay directive.

       logdb <suffix>
              Specify  the suffix of a database to be used for storing the log
              records.  The specified database must be  defined  elsewhere  in
              the  configuration.   The  access  controls  on the log database
              should prevent general access.  The  suffix  entry  of  the  log
              database  will be created automatically by this overlay. The log
              entries will be generated  as  the  immediate  children  of  the
              suffix entry.

       logops <operations>
              Specify  which  types  of operations to log. The valid operation
              types are abandon, add, bind, compare, delete, extended, modify,
              modrdn,   search,   and  unbind.  Aliases  for  common  sets  of
              operations are also available:

              writes add, delete, modify, modrdn

              reads  compare, search

                     abandon, bind, unbind

              all    all operations

       logold <filter>
              Specify a filter  for  matching  against  Deleted  and  Modified
              entries.  If  the  entry matches the filter, the old contents of
              the entry will be logged along with the current request.

       logoldattr <attr> ...
              Specify a list of  attributes  whose  old  contents  are  always
              logged  in Modify and ModRDN requests. Usually only the contents
              of attributes that were actually modified  will  be  logged;  by
              default no old attributes are logged for ModRDN requests.

       logpurge <age> <interval>
              Specify  the  maximum  age for log entries to be retained in the
              database, and how often to scan the database  for  old  entries.
              Both  the age and interval are specified as a time span in days,
              hours, minutes, and seconds. The time format is [ddd+]hh:mm[:ss]
              i.e., the days and seconds components are optional but hours and
              minutes are required. Except for days, which  can  be  up  to  5
              digits,  each  numeric  field  must  be  exactly two digits. For
                     logpurge 2+00:00 1+00:00
              would specify that the log database should be scanned every  day
              for  old  entries,  and  entries  older  than two days should be
              deleted.  When  using  a  log  database  that  supports  ordered
              indexing  on  generalizedTime attributes, specifying an eq index
              on the reqStart attribute will greatly benefit  the  performance
              of the purge operation.

       logsuccess TRUE | FALSE
              If  set  to  TRUE  then  log  records will only be generated for
              successful requests, i.e., requests that produce a  result  code
              of  0  (LDAP_SUCCESS).   If FALSE, log records are generated for
              all requests whether they succeed or not. The default is  FALSE.


            database bdb
            suffix dc=example,dc=com
            overlay accesslog
            logdb cn=log
            logops writes reads
            logold (objectclass=person)

            database bdb
            suffix cn=log
            index reqStart eq
            access to *
              by dn.base="cn=admin,dc=example,dc=com" read


       The  accesslog  overlay  utilizes  the "audit" schema described herein.
       This schema is specifically designed for accesslog auditing and is  not
       intended  to  be  used  otherwise.   It  is  also noted that the schema
       described here is a work in  progress,  and  hence  subject  to  change
       without notice.  The schema is loaded automatically by the overlay.

       The schema includes a number of object classes and associated attribute
       types as described below.

       There is a basic auditObject class from which two  additional  classes,
       auditReadObject  and  auditWriteObject  are derived. Object classes for
       each type of LDAP operation are further  derived  from  these  classes.
       This object class hierarchy is designed to allow flexible yet efficient
       searches of the log based on either a specific operation type's  class,
       or  on  more general classifications. The definition of the auditObject
       class is as follows:

               NAME 'auditObject'
               DESC 'OpenLDAP request auditing'
               SUP top STRUCTURAL
               MUST ( reqStart $ reqType $ reqSession )
               MAY ( reqDN $ reqAuthzID $ reqControls $ reqRespControls $
                   reqEnd $ reqResult $ reqMessage $ reqReferral ) )

       Note that all of the OIDs used in the logging schema  currently  reside
       under  the  OpenLDAP  Experimental  branch. It is anticipated that they
       will migrate to a Standard branch in the future.

       An overview of the attributes follows: reqStart and reqEnd provide  the
       start   and   end   time  of  the  operation,  respectively.  They  use
       generalizedTime syntax. The reqStart attribute is also used as the  RDN
       for each log entry.

       The  reqType  attribute  is  a  simple  string  containing  the type of
       operation being logged, e.g.  add, delete, search,  etc.  For  extended
       operations,  the  type also includes the OID of the extended operation,
       e.g.  extended(

       The reqSession attribute is an implementation-specific identifier  that
       is  common to all the operations associated with the same LDAP session.
       Currently this is slapd's internal connection ID, stored in decimal.

       The reqDN attribute is the  distinguishedName  of  the  target  of  the
       operation.  E.g.,  for  a Bind request, this is the Bind DN. For an Add
       request, this is the DN of the entry being added. For a Search request,
       this is the base DN of the search.

       The  reqAuthzID  attribute  is  the  distinguishedName of the user that
       performed the operation.  This will usually be the  same  name  as  was
       established  at  the  start of a session by a Bind request (if any) but
       may be altered in various circumstances.

       The reqControls and reqRespControls attributes carry any controls  sent
       by  the  client  on  the  request  and  returned  by  the server in the
       response, respectively. The attribute  values  are  just  uninterpreted
       octet strings.

       The  reqResult  attribute  is  the  numeric  LDAP  result  code  of the
       operation, indicating either success or a particular LDAP  error  code.
       An  error code may be accompanied by a text error message which will be
       recorded in the reqMessage attribute.

       The reqReferral attribute carries any referrals that were returned with
       the result of the request.

       Operation-specific  classes  are  defined with additional attributes to
       carry all of the relevant parameters associated with the operation:

               NAME 'auditAbandon'
               DESC 'Abandon operation'
               SUP auditObject STRUCTURAL
               MUST reqId )

       For the Abandon operation the reqId attribute contains the  message  ID
       of the request that was abandoned.

               NAME 'auditAdd'
               DESC 'Add operation'
               SUP auditWriteObject STRUCTURAL
               MUST reqMod )

       The  Add  class  inherits  from the auditWriteObject class. The Add and
       Modify classes are very similar. The reqMod attribute  carries  all  of
       the attributes of the original entry being added.  (Or in the case of a
       Modify operation, all of the modifications being performed.) The values
       are formatted as
              attribute:<+|-|=|#> [ value]
       Where '+' indicates an Add of a value, '-' for Delete, '=' for Replace,
       and '#' for Increment. In an Add operation, all of  the  reqMod  values
       will have the '+' designator.

               NAME 'auditBind'
               DESC 'Bind operation'
               SUP auditObject STRUCTURAL
               MUST ( reqVersion $ reqMethod ) )

       The  Bind  class  includes  the reqVersion attribute which contains the
       LDAP protocol version specified in the Bind as well  as  the  reqMethod
       attribute which contains the Bind Method used in the Bind. This will be
       the string SIMPLE for LDAP Simple Binds or SASL(<mech>) for SASL Binds.
       Note  that  unless  configured  as  a global overlay, only Simple Binds
       using DNs that reside in the current database will be logged.

               NAME 'auditCompare'
               DESC 'Compare operation'
               SUP auditObject STRUCTURAL
               MUST reqAssertion )

       For the  Compare  operation  the  reqAssertion  attribute  carries  the
       Attribute Value Assertion used in the compare request.

               NAME 'auditDelete'
               DESC 'Delete operation'
               SUP auditWriteObject STRUCTURAL
               MAY reqOld )

       The  Delete  operation needs no further parameters. However, the reqOld
       attribute may optionally be used to record the contents  of  the  entry
       prior to its deletion. The values are formatted as
              attribute: value
       The  reqOld  attribute  is  only  populated  if the entry being deleted
       matches the configured logold filter.

               NAME 'auditModify'
               DESC 'Modify operation'
               SUP auditWriteObject STRUCTURAL
               MAY reqOld MUST reqMod )

       The Modify operation contains a description  of  modifications  in  the
       reqMod  attribute,  which  was  already  described  above  in  the  Add
       operation. It may optionally  contain  the  previous  contents  of  any
       modified  attributes  in the reqOld attribute, using the same format as
       described above for the Delete operation.  The reqOld attribute is only
       populated  if  the  entry  being modified matches the configured logold

               NAME 'auditModRDN'
               DESC 'ModRDN operation'
               SUP auditWriteObject STRUCTURAL
               MUST ( reqNewRDN $ reqDeleteOldRDN )
               MAY ( reqNewSuperior $ reqOld ) )

       The ModRDN class uses the reqNewRDN attribute to carry the new  RDN  of
       the  request.  The reqDeleteOldRDN attribute is a Boolean value showing
       TRUE if the old RDN was deleted from the entry, or FALSE if the old RDN
       was  preserved.  The reqNewSuperior attribute carries the DN of the new
       parent entry if the request  specified  the  new  parent.   The  reqOld
       attribute  is  only  populated  if the entry being modified matches the
       configured logold filter and  contains  attributes  in  the  logoldattr

               NAME 'auditSearch'
               DESC 'Search operation'
               SUP auditReadObject STRUCTURAL
               MUST ( reqScope $ reqDerefAliases $ reqAttrsOnly )
               MAY ( reqFilter $ reqAttr $ reqEntries $ reqSizeLimit $
                     reqTimeLimit ) )

       For  the  Search class the reqScope attribute contains the scope of the
       original search request, using the values specified for  the  LDAP  URL
       format. I.e.  base, one, sub, or subord.  The reqDerefAliases attribute
       is one of never, finding, searching, or always,  denoting  how  aliases
       will  be  processed during the search.  The reqAttrsOnly attribute is a
       Boolean value showing TRUE if only attribute names were  requested,  or
       FALSE  if  attributes  and  their values were requested.  The reqFilter
       attribute carries the filter used in the search request.   The  reqAttr
       attribute  lists  the  requested attributes if specific attributes were
       requested.  The reqEntries attribute is the integer count of  how  many
       entries  were  returned  by  this search request.  The reqSizeLimit and
       reqTimeLimit attributes indicate what  limits  were  requested  on  the
       search operation.

               NAME 'auditExtended'
               DESC 'Extended operation'
               SUP auditObject STRUCTURAL
               MAY reqData )

       The  Extended  class  represents  an  LDAP Extended Operation. As noted
       above, the actual OID of the  operation  is  included  in  the  reqType
       attribute  of  the parent class. If any optional data was provided with
       the request, it will be  contained  in  the  reqData  attribute  as  an
       uninterpreted octet string.


       The Access Log implemented by this overlay may be used for a variety of
       other tasks, e.g. as a ChangeLog for a replication mechanism,  as  well
       as for security/audit logging purposes.


              default slapd configuration file


       slapd.conf(5), slapd-config(5).


       This module was written in 2005 by Howard Chu of Symas Corporation.