Логирование Эллес

Эллес поддерживает логирование различных событий с целью аудита и расследования инцидентов.

Основным способом управления логированием является настройка конфигурационных параметров в файле smb.conf (полный путь к файлу после установки по умолчанию — /app/inno-samba/etc/smb.conf).

Настройка способов логирования

Одновременно на сервере Эллес может вестись логирование несколькими способами. При этом для каждого из них может быть задан свой уровень логирования.

Для этого служит параметр logging, который задается в разделе [global] файла smb.conf на сервере Эллес в следующем формате:

logging = backend1[:option][@loglevel] backendN[:option][@loglevel]

В приведенной строке с параметром logging:

  • backend — один из доступных способов;

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

    • syslog — запись в системный журнал;

    • file — запись в файл, указанный в параметре log file, либо в стандартные лог-файлы Эллес в каталоге /app/inno-samba/var/, а также в файлы, указанные в параметре log level для различных классов логирования;

    • systemd — запись в журнал (journal) systemd;

    • lttng — трассировка с использованием инструментов фреймворка с открытым исходным кодом LTTng;

    • gpfs — аудит файлов в файловой системе GPFS;

    • ringbuf — запись в кольцевой буфер (ring buffer); для задания размера буфера (по умолчанию — 1 МБ) может использоваться опция size в формате: logging = ringbuf:size=NBYTES;

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

  • [:option] — дополнительные опции, специфичные для указанного способа;

  • [@loglevel] — уровень логирования.

    Данный параметр является необязательным. Если он не установлен для указанного способа логирования, в соответствующий ему канал отправляются все сообщения.
    Уровень логирования, установленный для определенного способа логирования, переопределяет общий уровень логирования, заданный с помощью параметра log level.

Если задан параметр logging, его значение переопределяет значения параметров syslog и syslog only, которые являются устаревшими и не должны использоваться для настройки логирования.

Значение по умолчанию:

logging =

Пример задания параметра:

logging = syslog@1 file

Настройка места размещения, имени и максимального размера лог-файлов

По умолчанию после установки пакета inno-samba логи сохраняются в каталог /app/inno-samba/var/. Общий лог ведется в файле /app/inno-samba/var/log.samba.

Для получения текущего пути к логам, например, используйте команду samba -b | grep LOGFILEBASE или testparm -sv | grep 'log file'.

Для изменения места размещения логов и имени файлов необходимо создать требуемый каталог и указать его в качестве значения параметра log file в разделе [global] файла smb.conf.

Например:

log file = /app/log/inno-samba/inno-samba.log

Также может быть указан отдельный лог-файл для каждого класса логирования (см. «Настройка уровня логирования»).

Для ограничения максимального размера лог-файлов Эллес может использоваться параметр max log size в разделе [global]. Значение параметра задается в килобайтах. При превышении заданного лимита к имени текущего лог-файла добавляется постфикс .old и создается новый файл.

В процессе ротации Эллес перезаписывает архивированный ранее лог-файл. Рекомендуется настроить ротацию лог-файлов с помощью доступных в системе инструментов (см. «Пример настройки ротации лог-файлов»).

Например, чтобы ограничить максимальный размер лог-файла значением 10 МБ, необходимо задать параметр следующим образом:

max log size = 10000

Настройка уровня логирования

Для задания уровня логирования (уровня отладки) служит параметр log level в разделе [global] файла smb.conf.

Уровень задается в виде целого числа в диапазоне от 0 до 10.

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

  • 0 — только критические ошибки;

  • 1 — некритические ошибки;

  • 2 — предупреждения;

  • 3 — информационные сообщения;

  • 4 и выше — различные уровни трассировки.

Оптимальным для получения отладочной информации является уровень 3. Уровни выше 3 предназначены преимущественно для выявления внутренних ошибок Эллес. Их использование может привести к существенному снижению производительности сервера (cм. «Рекомендации по оценке размера дискового пространства для хранения лог-файлов»).

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

Также параметр log level позволяет задавать различные уровни логирования для отдельных классов логирования. При необходимости наряду с уровнем логирования может быть указан файл, в который должна вести запись отладочной информации. Для этого к имени класса логирования добавляется часть @PATH.

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

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

  • установка единого уровня логирования 3 для всех классов отладки:

    log level = 3
  • установка общего уровня логирования 1, а для классов auth и winbind — 3:

    log level = 1 auth:3 winbind:3
  • установка общего уровня логирования 1 и различных уровней логирования для классов отладки с указанием отдельных файлов для ведения записи:

    log level = 1 \
            kerberos:3@/app/log/inno-samba/kerberos.log \
            drs_repl:3@/app/log/inno-samba/drs_repl.log \
            rpc_srv:3@/app/log/inno-samba/rpc_srv.log \
            dns:0

При выполнении команд с помощью утилит, поставляемых с Эллес, используется уровень логирования, установленный параметром log level в smb.conf. Он может быть переопределен с помощью опции -d. Например:

samba-tool drs showrepl -d 3

Классы логирования

В Эллес доступны следующие статические классы логирования: all, tdb, printdrivers, lanman, smb, rpc_parse, rpc_srv, rpc_cli, passdb, sam, auth, winbind, vfs, idmap, quota, acls, locking, msdfs, dmapi, registry, scavenger, dns, ldb, tevent, auth_audit, auth_json_audit, kerberos, drs_repl, smb2, smb2_credits, dsdb_audit, dsdb_json_audit, dsdb_password_audit, dsdb_password_json_audit, dsdb_transaction_audit, dsdb_transaction_json_audit, dsdb_group_audit, dsdb_group_json_audit, ldapsrv.

Некоторые модули при первом использовании регистрируют динамические классы логирования. Например: catia, dfs_samba4, extd_audit, fileid, fruit, full_audit, media_harmony, preopen, recycle, shadow_copy, unityed_media, virusfilter.

Далее приводятся описания некоторых классов логирования с примерами сообщений.

acls

Класс acls предназначен для логирования проверки и изменения прав доступа на основе списков управления доступом (Access Control Lists).

Пример записи
descriptor_prepare_commit: changes: num_processed=0
[2024/08/23 12:09:31.456167,  3, pid=990, effective(0, 0), real(0, 0), class=acls] ../../source4/dsdb/samdb/ldb_modules/descriptor.c:2153

auth_audit, auth_json_audit

Классы auth_audit и auth_json_audit предназначены для логирования информации об аутентификации и авторизации учетных записей, успешных и неуспешных попытках входа в систему, изменениях паролей и изменениях статусов учетных записей.

Записи содержат имя пользователя, IP-адрес клиента, время и результат попытки входа.

Могут использоваться, например, для отслеживания попыток несанкционированного входа.

Пример записи в текстовом формате
[2024/08/23 12:33:52.304398,  3, pid=992, effective(0, 0), real(0, 0), class=auth_audit] ../../auth/auth_log.c:876(log_authentication_event_human_readable)
  Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[elles-dc$@DOMAIN.NAME] at [Fri, 23 Aug 2024 12:33:52.304383 MSK] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:10.29.1.25:53774] became [DOMAIN]\[elles-dc$] [S-1-5-21-3831146672-3998268472-1207887917-1600]. local host [NULL]
Пример записи в JSON
{
  "timestamp": "2024-08-22T19:18:55.053337+0300", "type": "Authentication", "Authentication": {
    "version": {
      "major": 1, "minor": 3
    }

    , "eventId": 4625, "logonId": "924c0b0e405b8a28", "logonType": 3, "status": "NT_STATUS_PROTOCOL_UNREACHABLE", "localAddress": null, "remoteAddress": "ipv4:10.29.0.124:54145", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "ELLES-SMB$@DOMAIN.NAME", "workstation": null, "becameAccount": "ELLES-SMB$", "becameDomain": "DOMAIN", "becameSid": "S-1-5-21-3831146672-3998268472-1207887917-1000", "mappedAccount": "ELLES-SMB$", "mappedDomain": "DOMAIN", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "clientPolicyAccessCheck": null, "serverPolicyAccessCheck": null, "duration": 16954
  }
}

dns

Класс dns предназначен для логирования запросов на поиск и изменение записей DNS.

Пример записи
[2024/08/23 12:24:28.373948, 10, pid=1009, effective(0, 0), real(0, 0), class=dns] ../../source4/dns_server/dns_server.c:566(dns_udp_call_loop)
  Received DNS UDP packet of length 75 from ipv4:10.29.0.124:32912
[2024/08/23 12:24:28.373975,  8, pid=1009, effective(0, 0), real(0, 0), class=dns] ../../lib/util/util.c:596(dump_data_dbgc)
  [0000] 26 1F 01 00 00 01 00 00   00 00 00 00 24 34 63 30   &....... ....$4c0
  [0010] 36 38 64 64 33 2D 39 63   61 38 2D 34 64 65 33 2D   68dd3-9c a8-4de3-
  [0020] 38 37 64 63 2D 31 30 37   36 32 32 38 38 66 63 31   87dc-107 62288fc1
  [0030] 30 06 5F 6D 73 64 63 73   07 61 64 6F 6D 61 69 6E   0._msdcs .domain
  [0040] 05 6C 6F 63 61 6C 00 00   1C 00 01                  .local.. ...
[2024/08/23 12:24:28.374046, 10, pid=1009, effective(0, 0), real(0, 0), class=dns] ../../librpc/ndr/ndr.c:414(ndr_print_debugc)
       &state->in_packet: struct dns_name_packet
          id                       : 0x261f (9759)
          operation                : 0x0100 (256)
              0x00: DNS_RCODE                 (0)
                 0: DNS_FLAG_RECURSION_AVAIL
                 1: DNS_FLAG_RECURSION_DESIRED
                 0: DNS_FLAG_TRUNCATION
                 0: DNS_FLAG_AUTHORITATIVE
              0x00: DNS_OPCODE                (0)
                 0: DNS_FLAG_REPLY
          qdcount                  : 0x0001 (1)
          ancount                  : 0x0000 (0)
          nscount                  : 0x0000 (0)
          arcount                  : 0x0000 (0)
          questions: ARRAY(1)
              questions: struct dns_name_question
                  name                     : '4c078dd3-9ca8-4de3-98dc-10762288fc10._msdcs.domain.name'
                  question_type            : DNS_QTYPE_AAAA (0x1C)
                  question_class           : DNS_QCLASS_IN (0x1)
          answers: ARRAY(0)
          nsrecs: ARRAY(0)
          additional: ARRAY(0)

drs_repl

Класс логирования drs_repl предназначен для логирования событий входящей и исходящей репликации на контроллере домена.

Пример записи
2024/08/22 19:19:05.149640,  4, pid=3690, effective(0, 0), real(0, 0), class=drs_repl] ../../source4/dsdb/samdb/ldb_modules/repl_meta_data.c:7453(replmd_replicated_uptodate_modify)
  DRS replication up-to-date modify message:
  dn: CN=Schema,CN=Configuration,DC=domain,DC=name
  changetype: modify
  replace: replUpToDateVector
  replUpToDateVector:: AgAAAAAAAAABAAAAAAAAACBzNQfwqUtOto8mhP3tviqMGgAAAAAAAACAP
   tXesZ0B
  -
  replace: repsFrom
  repsFrom:: AQAAAAAAAAAOAQAAAAAAAPn11xwDAAAA+fXXHAMAAAAAAAAA0AAAAD4AAABkAAAAERE
   RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
   ERERERERERERERERERERERERERERERERAAAAAH0aAAAAAAAAAAAAAAAAAAB9GgAAAAAAANONBkyon
   ONNh9wQdiKI/BAgczUH8KlLTraPJoT97b4qAAAAAAAAAAAAAAAAAAAAADoAAAA0YzA2OGRkMy05Y2
   E4LTRkZTMtODdkYy0xMDc2MjI4OGZjMTAuX21zZGNzLmFkb21haW4ubG9jYWwA
  -


[2024/08/22 19:19:05.153636,  2, pid=3690, effective(0, 0), real(0, 0), class=drs_repl] ../../source4/dsdb/repl/replicated_objects.c:1092(dsdb_replicated_objects_commit)
  Replicated 0 objects (0 added, 0 merged) (0 linked attributes) for CN=Schema,CN=Configuration,DC=domain,DC=name

dsdb_audit, dsdb_json_audit

Классы dsdb_audit и dsdb_json_audit предназначены для логирования изменений в базе данных sam.ldb (изменения пользователей, групп, разрешений, структуры каталога и т. д.).

Пример записи в текстовом формате
[2024/08/22 19:18:55.184718,  5, pid=3690, effective(0, 0), real(0, 0), class=dsdb_audit] ../../lib/audit_logging/audit_logging.c:97(audit_log_human_text)
  DSDB Change [Modify] at [Thu, 22 Aug 2024 19:18:55.184685 MSK] status [Success] remote host [Unknown] SID [S-1-5-18] DN [CN=Schema,CN=Configuration,DC=domain,DC=name] attributes [replace: repsTo {AQAAAAAAAAAOAQAAAAAAAO/11xwDAAAA7/XXHAMAAAAAAAAA0AAAAD4AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANONBkyonONNh9wQdiKI/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAA0YzA2OGRkMy05Y2E4LTRkZTMtODdkYy0xMDc2MjI4OGZjMTAuX21zZGNzLmFkb21haW4ubG9jYWwA}]
Пример записи в JSON
{
  "timestamp": "2024-08-22T19:18:55.045255+0300",
  "type": "dsdbChange",
  "dsdbChange": {
    "version": {
      "major": 1,
      "minor": 0
    },
    "statusCode": 0,
    "status": "Success",
    "operation": "Modify",
    "remoteAddress": null,
    "performedAsSystem": false,
    "userSid": "S-1-5-18",
    "dn": "CN=ELLES-SMB,OU=Domain Controllers,DC=domain,DC=name",
    "transactionId": "b93bfe29-1b68-4729-b876-282631cb8076",
    "sessionId": "870df198-9ccc-4e53-9a15-44f74265238a",
    "attributes": {
      "lastLogon": {
        "actions": [{
          "action": "replace",
          "values": [{
            "value": "133688171350437640"
          }]
        }]
      },
      "logonCount": {
        "actions": [{
          "action": "replace",
          "values": [{
            "value": "51"
          }]
        }]
      }
    }
  }
}

dsdb_transaction_audit, dsdb_transaction_json_audit

Классы dsdb_transaction_audit и dsdb_transaction_json_audit предназначены для логирования транзакций (фиксация, откат) в базе данных каталога.

Могут использоваться для контроля целостности данных.

Пример записи в текстовом формате
DSDB Transaction [commit] at [Fri, 23 Aug 2024 12:08:21.400722 MSK] duration [22097]
[2024/08/23 12:08:21.419767, 10, pid=990, effective(0, 0), real(0, 0), class=dsdb_transaction_audit] ../../lib/audit_logging/audit_logging.c:97(audit_log_human_text)
Пример записи в JSON
{
  "timestamp": "2024-08-22T19:18:55.181492+0300",
  "type": "dsdbTransaction",
  "dsdbTransaction": {
    "version": { "major": 1, "minor": 0 },
    "action": "commit",
    "transactionId": "4d892f2b-9845-4baa-81a7-d8fccab5ae79",
    "duration": 3977
  }
}

idmap

Класс idmap предназначен для логирования событий установки соответствия между SID и группами в Linux (Identity Mapping).

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

Пример записи
[2024/08/23 12:07:01.284284, 10, pid=1007, effective(0, 0), real(0, 0), class=idmap, traceid=1] ../../source3/winbindd/idmap.c:124(lp_scan_idmap_found_domain)
  lp_scan_idmap_found_domain: Found idmap domain "*"

kerberos

Класс Kerberos предназначен для логирования событий взаимодействия по протоколу Kerberos.

Пример записи
[2024/08/22 19:18:55.075855,  3, pid=3705, effective(0, 0), real(0, 0), class=kerberos] ../../source4/auth/kerberos/krb5_init_context.c:90(smb_krb5_debug_wrapper)
  Kerberos: AS-REQ SUCCESS ipv4:10.29.0.124:38618 ELLES-SMB$@DOMAIN.NAME krbtgt/DOMAIN.NAME@DOMAIN.NAME pa=ENC-TS etype=18/18 canon_client_name=ELLES-SMB$@DOMAIN.NAME pac_attributes=2 pa-etype=18 client-pa=ENC-TS,REQ-ENC-PA-REP end=1724379535 auth=1724343535 etypes=18,17,20,19,16,23 pa-succeeded-kvno=1 elapsed=0.018523 flags=canonicalize,forwardable
[2024/08/22 19:18:55.092705, 10, pid=3705, effective(0, 0), real(0, 0), class=kerberos] ../../source4/kdc/kdc-server.c:288(kdc_tcp_call_loop)
  kdc_tcp_call_loop: Received krb5 TCP packet of length 1995 from ipv4:10.29.0.124:38622

ldb

Класс ldb предназначен для логирования подключений к базе данных LDAP.

Пример записи
[2024/08/23 15:18:52.017469,  3, pid=3687, effective(0, 0), real(0, 0), class=ldb] ../../lib/ldb-samba/ldb_wrap.c:348(ldb_wrap_connect)
  ldb_wrap open of privilege.ldb
[2024/08/23 16:03:51.934150,  3, pid=3689, effective(0, 0), real(0, 0), class=ldb] ../../lib/ldb-samba/ldb_wrap.c:348(ldb_wrap_connect)
  ldb_wrap open of secrets.ldb

locking

Класс locking предназначен для логирования блокировок файлов базы данных каталога и конкретных записей при одновременном доступе к ним разных клиентов.

Пример записи
[2024/08/23 12:43:37.099163,  3, pid=3285, effective(0, 0), real(0, 0), class=locking] ../../source3/smbd/smb2_oplock.c:1350(init_oplocks)
  init_oplocks: initializing messages.

passdb

Класс passdb предназначен для логирования доступа к хранилищу данных паролей.

Пример записи
[2024/08/23 14:53:32.070728,  5, pid=3660, effective(0, 0), real(0, 0), class=passdb, traceid=1] ../../source3/passdb/pdb_interface.c:190(make_pdb_method_name)
  pdb backend samba_dsdb has a valid init
[2024/08/23 14:53:32.083756,  5, pid=3681, effective(0, 0), real(0, 0), class=passdb, traceid=1] ../../source3/passdb/pdb_interface.c:157(make_pdb_method_name)
  Attempting to find a passdb backend to match samba_dsdb (samba_dsdb)
[2024/08/23 14:53:32.083786,  5, pid=3681, effective(0, 0), real(0, 0), class=passdb, traceid=1] ../../source3/passdb/pdb_interface.c:178(make_pdb_method_name)
  Found pdb backend samba_dsdb

registry

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

Пример записи
[2024/08/22 19:18:50.624677, 10, pid=3673, effective(0, 0), real(0, 0), class=registry] ../../source3/registry/reg_backend_db.c:1953(regdb_fetch_values_internal)
  regdb_fetch_values: Looking for values of key [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports]

rpc_parse

Класс rpc_parse предназначен для логирования информации об обработке RPC-сообщений.

Может использоваться при анализе репликации.

Пример записи
[2024/08/22 19:18:55.199865, 10, pid=3690, effective(0, 0), real(0, 0), class=rpc_parse] ../..
/librpc/rpc/dcerpc_util.c:404(dcerpc_pull_auth_trailer)
  dcerpc_pull_auth_trailer: auth_pad_length 12
[2024/08/22 19:18:55.205454, 10, pid=3690, effective(0, 0), real(0, 0), class=rpc_parse] ../..
/librpc/ndr/ndr.c:501(ndr_print_function_debug)
       drsuapi_DsReplicaSync: struct drsuapi_DsReplicaSync
          in: struct drsuapi_DsReplicaSync
              bind_handle              : *
                  bind_handle: struct policy_handle
                      handle_type              : 0x00000000 (0)
                      uuid                     : fd05a97f-56d3-4fcc-ac6a-2ae05b513887
              level                    : 0x00000001 (1)
              req                      : *
                  req                      : union drsuapi_DsReplicaSyncRequest(case 1)
                  req1: struct drsuapi_DsReplicaSyncRequest1
                      naming_context           : *
                          naming_context: struct drsuapi_DsReplicaObjectIdentifier
                              __ndr_size               : 0x00000060 (96)
                              __ndr_size_sid           : 0x00000018 (24)
                              guid                     : 6960ab23-b51a-430c-8d35-367b885d9292
                              sid                      : S-1-5-21-3831146672-3998268472-120788
7917
                              __ndr_size_dn            : 0x00000013 (19)
                              dn                       : 'DC=domain,DC=name'
                      source_dsa_guid          : f0f28bc3-a711-47f7-a62c-d1f8117ba912
                      source_dsa_dns           : NULL
                      options                  : 0x00080013 (524307)

rpc_srv

Класс rpc_srv предназначен для логирования информации о регистрации конечных точек RPC.

Пример записи
[2024/08/23 14:53:31.289223,  5, pid=3630, effective(0, 0), real(0, 0), class=rpc_srv] ../../librpc/rpc/dcesrv_core.c:555(dcesrv_interface_register_b)
  dcesrv_interface_register_b: Interface 'dnsserver' registered on endpoint 'ncacn_ip_tcp:' (single process required)
[2024/08/23 14:53:31.289259,  5, pid=3630, effective(0, 0), real(0, 0), class=rpc_srv] ../../librpc/rpc/dcesrv_core.c:555(dcesrv_interface_register_b)
  dcesrv_interface_register_b: Interface 'dnsserver' registered on endpoint 'ncacn_np:[\pipe\dnsserver]' (single process required)
[2024/08/23 14:53:32.080222,  3, pid=3660, effective(0, 0), real(0, 0), class=rpc_srv, traceid=1, depth=1] ../../librpc/rpc/dcesrv_core.c:2827(dcerpc_register_ep_server)
  DCERPC endpoint server 'winbind' registered

smb2

Класс smb2 предназначен для логирования вызовов по протоколу SMB.

Пример записи
[2024/08/23 17:10:08.709336, 10, pid=4168, effective(0, 100), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:5086(smbd_smb2_advance_incoming)
  smbd_smb2_request idx[1] of 5 vectors
[2024/08/23 17:10:08.709386, 10, pid=4168, effective(0, 100), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:3067(smbd_smb2_request_dispatch)
  smbd_smb2_request_dispatch: opcode[SMB2_OP_TDIS] mid = 7
[2024/08/23 17:10:08.710092, 10, pid=4168, effective(0, 0), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:3931(smbd_smb2_request_done_ex)
  smbd_smb2_request_done_ex: mid [7] idx[1] status[NT_STATUS_OK] body[4] dyn[no:0] at ../../source3/smbd/smb2_tcon.c:650
[2024/08/23 17:10:08.710392, 10, pid=4168, effective(0, 0), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:1770(smbd_server_connection_terminate_ex)
  smbd_server_connection_terminate_ex: conn[PID=4168,CLIENT=4513816e-4afb-4e5f-97f4-b55674371649,channel=1,remote=ipv4:10.29.1.25:36806,local=ipv4:10.29.0.124:445] num_ok[0] reason[NT_STATUS_CONNECTION_RESET] at ../../source3/smbd/smb2_server.c:5245

smb2_credits

Класс smb2_credits предназначен для логирования передачи данных по протоколу SMB. Записи содержат информацию о количестве переданных запросов и количестве запросов, которые осталось выполнить для завершения передачи файлов.

Пример записи
smb2_set_operation_credit: smb2_set_operation_credit: requested 1, charge 1, granted 0, current possible/max 0/8192, total granted/max/low/range 8192/8192/5/8192
[2024/08/23 17:08:28.521906, 10, pid=4069, effective(0, 100), real(0, 0), class=smb2_credits] ../../source3/smbd/smb2_server.c:803(smb2_validate_sequence_number)
  smb2_validate_sequence_number: smb2_validate_sequence_number: clearing id 5 (position 5) from bitmap
[2024/08/23 17:08:28.521995, 10, pid=4069, effective(0, 100), real(0, 0), class=smb2_credits] ../../source3/smbd/smb2_server.c:2735(smbd_smb2_request_verify_creditcharge)
  smbd_smb2_request_verify_creditcharge: mid 5, CreditCharge: 1, NeededCharge: 1
[2024/08/23 17:08:28.523147, 10, pid=4069, effective(0, 100), real(0, 0), class=smb2_credits] ../../source3/smbd/smb2_server.c:1068(smb2_set_operation_credit)

vfs

Виртуальная файловая система (Virtual File System, VFS) представляет собой абстракцию над различными источниками данных (файловая система, сетевые и облачные хранилища).

Класс vfs предназначен для логирования проблем с правами доступа и некорректным поведением бэкенда, абстрагируемого VFS.

Пример записи
[2024/08/23 17:10:07.604357,  2, pid=4168, effective(0, 0), real(0, 0), class=vfs] ../../source3/modules/vfs_acl_xattr.c:209(connect_acl_xattr)
  connect_acl_xattr: setting 'inherit acls = true' 'dos filemode = true' and 'force unknown acl user = true' for service IPC$
[2024/08/23 17:10:07.609500,  4, pid=4168, effective(0, 100), real(0, 0), class=vfs] ../../source3/smbd/vfs.c:938(vfs_ChDir)
  vfs_ChDir to /tmp
[2024/08/23 17:10:07.609530,  5, pid=4168, effective(0, 100), real(0, 0), class=vfs] ../../source3/smbd/vfs.c:1000(vfs_ChDir)
  vfs_ChDir: vfs_ChDir got /tmp
[2024/08/23 17:10:08.160221,  4, pid=4168, effective(0, 100), real(0, 0), class=vfs] ../../source3/smbd/vfs.c:938(vfs_ChDir)
  vfs_ChDir to /tmp

winbind

Класс winbind предназначен для логирования сообщений при присоединении клиентов к Эллес для проведения различных операций.

Позволяет анализировать работу сервиса Winbind, отвечающего за взаимодействие между Unix-системами и службой каталогов, в том числе Эллес и Active Directory.

Пример записи
winbindd_dual_ndrcmd: Running command wbint_LookupName (domain 'DOMAIN')
[2024/08/23 17:09:58.123278, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_cache.c:3639(get_global_winbindd_state_offline)
  get_global_winbindd_state_offline: Offline state not set.
[2024/08/23 17:09:58.123593, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_cache.c:1802(wcache_name_to_sid)
  wcache_name_to_sid: cache entry not found
[2024/08/23 17:09:58.123618, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_cache.c:1833(wb_cache_name_to_sid)
  wb_cache_name_to_sid: name_to_sid: [Cached] - doing backend query for name for domain DOMAIN
[2024/08/23 17:09:58.123646,  3, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_samr.c:680(sam_name_to_sid)
  sam_name_to_sid: DOMAIN\
[2024/08/23 17:09:58.123867,  4, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_dual.c:1660(child_handler)
  Finished processing child request 55
[2024/08/23 17:09:58.123889, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_dual.c:160(child_write_response)
  Writing 4040 bytes to parent
[2024/08/23 17:09:58.124030,  5, pid=4141, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/wb_lookupname.c:121(wb_lookupname_recv)
  WB command lookupname end.
  Found SID S-1-5-21-3821346672-3998268472-1207887917 with SID type 3.

ldapsrv

Класс ldapsrv предназначен для логирования запросов к серверу LDAP.

Пример записи
[2024/08/23 17:48:51.946711,  5, pid=4161, effective(0, 0), real(0, 0), class=ldapsrv] ../../source4/ldap_server/ldap_backend.c:1080(ldapsrv_SearchRequest)
  ldapsrv_SearchRequest: LDAP Query: Duration was 0.00s, SearchRequest by S-1-5-21-3831146672-3998268472-1207887917-1600 from ipv4:10.29.1.25:57252 filter: [(&(&(objectCategory=sudoRole)(uSNChanged>=7232))(|(&(!(sudoHost=*))(cn=defaults))(sudoHost=ALL)(sudoHost=elles-dc)(sudoHost=elles-dc)(sudoHost=10.29.1.25)(sudoHost=10.29.0.0/16)(sudoHost=fe80::d20d:1aff:fe5a:654c)(sudoHost=fe80::/64)(sudoHost=+*)))] basedn: [DC=domain,DC=name] scope: [SUB] result: Success

Рекомендации по настройке параметров логирования

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

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

  • для удобства анализа проблем и аудита:

    • данные, формируемые в рамках классов логирования, должны сохраняться в отдельные файлы;

    • размер лог-файлов для классов логирования должен быть достаточно большим.

Рекомендации по настройке уровня логирования

  1. Рекомендуемый общий уровень логирования в условиях повседневной эксплуатации — 1.
    Он обеспечивает фиксацию как критических, так и некритических ошибок в работе Эллес.

  2. Рекомендуемые уровни логирования для целей аудита по отдельным классам отладки — 2 (предупреждения), 3 (информационные сообщения).

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

  4. На контроллерах домена в промышленной среде не рекомендуется устанавливать уровни логирования выше 3.

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

  6. Уровни логирования выше 5 предназначены для использования разработчиками Эллес.

Рекомендации по настройке максимального размера и срока хранения лог-файлов

  1. Рекомендуемый максимальный размер лог-файла — 10 МБ (max log size = 10000).

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

Рекомендации по оценке размера дискового пространства для хранения лог-файлов

В таблице Табл. 1 приводится оценка размера лога за один рабочий день для некоторых классов логирования.

Оценка основана на следующих допущениях:

  • количество пользователей — 100 000;

  • распределение пользователей по контроллерам домена — 2 000 пользователей на 1 контроллер;

  • ограничение максимального размера лог-файла — 10 МБ;

  • уровень логирования — 3;

    Уровень 3 должен включаться избирательно для определенных классов логирования на отдельных контроллерах домена на непродолжительные периоды времени, достаточные для разрешения имеющихся проблем.
  • учитываемые операции:

    • вход пользователя с доменной учетной записью: 3 операции аутентификации в день на одного пользователя;

    • смена пароля учетной записи: период ротации пароля составляет 90 дней;

    • изменение данных пользователя: данные одного пользователя изменяются один раз в год;

    • доступ к сервисам:

      • время жизни сервисного билета Kerberos — 10 часов;

      • пользователь использует 5 разных сервисов в день с 1 аутентификацией и 10 валидациями билета Kerberos.

Необходимо учитывать, что рабочий день может состоять из нескольких смен и в нерабочее время возможен небольшой прирост размера лог-файлов. Указанные в таблице значения являются минимальными. В условиях реальной эксплуатации они могут быть немного больше.
Табл. 1. Оценка размера дискового пространства для хранения лог-файлов при включении логирования на уровне 3 для отдельных классов отладки
Класс Операция Размер в рабочий день на 1 контроллер, КБ Примечание Оценка размера лог-файла за рабочий день, МБ Оценка количества лог-файлов, шт.

auth_json_audit

Вход пользователя

2.5*<кол-во пользователей>*3/<кол-во контроллеров>

95

10

Доступ к сервисам

1.9*<кол-во пользователей>*20/<кол-во контроллеров>

acls

Вход пользователя

1.8*<кол-во пользователей>*3/<кол-во контроллеров>

93

10

Смена пароля

1*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>)

Приведенное кол-во контроллеров* — 1.5

Изменение пользователя

3*<кол-во пользователей>/(365*<приведенное количество контроллеров>)

Доступ к сервисам

2*<кол-во пользователей>*20/<кол-во контроллеров>

auth

Доступ к сервисам

2.3*<кол-во пользователей>*20/<кол-во контроллеров>

92

10

drs_repl

Смена пароля

2.7*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>)

Приведенное количество контроллеров* — 12

1

1

Изменение пользователя

7.4*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>)

kerberos

Вход пользователя

38.2*<кол-во пользователей>*3/<кол-во контроллеров>

320

4

Доступ к сервисам

23*<кол-во пользователей>*20/<кол-во контроллеров>

ldb

Доступ к сервисам

0.5*<кол-во пользователей>*20/<кол-во контроллеров>

20

2

locking

Доступ к сервисам

0.1*<кол-во пользователей>*20/<кол-во контроллеров>

4

1

smb2

Доступ к сервисам

0.1*<кол-во пользователей>*2/<кол-во контроллеров>

Только сервисы SMB; допущение — это 1/10 доля от всех сервисов

0.4

1

vfs

Доступ к сервисам

0.7*<кол-во пользователей>*2/<кол-во контроллеров>

2.8

1

winbind

Доступ к сервисам

0.9*<кол-во пользователей>*20/<кол-во контроллеров>

36

4

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

Исходя из данных в таблице в день на одном контроллере домена может потребоваться около 700 МБ дискового пространства для логов при включенном уровне 3 для всех указанных классов логирования.

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

Примеры конфигурации логирования

Пример базовой конфигурации логирования в файле smb.conf с указанием пути к общему лог-файлу, ограничением размера лог-файла значением 10 МБ и установкой общего уровня логирования 1 для фиксации критических и некритических ошибок:

[global]
    ...
    log file = /var/log/inno-samba/common.log
    max log size = 10000
    log level = 1
    ...

Пример конфигурации логирования в файле smb.conf c повышением уровня логирования для определенных классов отладки с указанием отдельных файлов:

[global]
    ...
    log file = /var/log/inno-samba/common.log
    max log size = 10000
    Log level = 1 \
            kerberos:3@/app/log/inno-samba/kerberos.log \
            drs_repl:3@/app/log/inno-samba/drs_repl.log \
            rpc_srv:3@/app/log/inno-samba/rpc_srv.log \
            ldapsrv:3@/app/log/inno-samba/ldapsrv.log \
            dns:3@/app/log/inno-samba/dns.log
    ...

Пример настройки ротации лог-файлов

Для ротации лог-файлов, формируемых сервисами Эллес, может использоваться системная утилита logrotate.

Пример файла /etc/logrotate.d/inno-samba с конфигурацией ротации:

/app/log/inno-samba/*log {
    weekly
    size 10M
    compress
    dateext
    dateformat -%Y-%m-%d-%s
    rotate 10
    notifempty
    olddir /app/log/inno-samba/old
    missingok
    copytruncate
    postrotate
              systemctl reload inno-samba.service || true
    endscript
}

Описание директив в примере:

  • /app/log/inno-samba/*log — путь к каталогу с лог-файлами (если отличается от пути по умолчанию, задается в параметре log file в файле smb.conf);

  • weekly — периодичность ротации лог-файлов;

    Возможные значения:

    • hourly — каждый час;

    • daily — каждый день;

    • weekly (по умолчанию) — каждую неделю;

    • monthly — каждый месяц;

    • yearly — каждый год.

  • size — максимальный размер лог-файла, по достижении должна происходить ротация;

  • compress — сжатие лог-файлов;

  • dateext — добавление к расширению файла даты ротации;

    Для задания формата могут использоваться параметры dateformat и dateyesterday. В примере используется dateformat.

  • rotate — количество ротацией до удаления или отправки на адрес, указанный в директиве mail; если 0, прежние версии удаляются без ротации;

  • notifempty — отключение ротации пустых файлов;

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

  • missingok — если файл отсутствует, перейти к следующему без сообщения об ошибке;

  • copytruncate — обрезать исходный файл до нулевого размера после создания копии вместо переименования и создания нового;

  • блок между postrotate и endscript — команды, которые необходимо выполнить после ротации.

Для принудительного запуска ротации используйте стандартную команду:

sudo -E logrotate -vf /etc/logrotate.d/inno-samba

Примеры настройки обработки лог-файлов с использованием rsyslog и syslog-ng

Для дополнительной обработки лог-файлов с целью отбора информации по определенным правилам или с применением определенных фильтров могут использоваться утилиты rsyslog и syslog-ng.

Например, с помощью этих инструментов на основе общего лога процесса репликации может вестись отдельный лог-файл, содержащий только сообщения со статусами. Такой лог может использоваться для настройки оповещений при появлении в нем определенных статусов.

Для настройки формирования отдельного лога для мониторинга статусов репликации:

  1. Создайте каталог для размещения файлов.

    Например:

    mdkir -pv /app/log/inno-samba
  2. Добавьте класс логирования для процесса репликации с указанием пути в значение параметра log level в файле /app/inno-samba/etc/smb.conf.

    Например:

    log level = 1 \
            drs_repl:4@/app/log/inno-samba/drs_repl.log
            [...]
  3. При использовании rsyslog:

    • убедитесь, что соответствующий сервис активен и работает в системе:

      sudo systemctl status rsyslog.service
    • создайте файл с конфигурацией для rsyslog, например — /etc/rsyslog.d/repl_events.conf;

    • добавьте в файл параметры обработки логов репликации; в данном примере с интервалом в 10 секунд из исходного лога репликации будут помещаться в отдельный файл сообщения, содержащие события WERR_:

      module(load="imfile" PollingInterval="10")
      
      input(type="imfile"
            File="/app/log/inno-samba/drs_repl.log"
            Tag="samba_auth"
            Severity="info"
            Facility="auth")
      
      if ($syslogtag == "samba_auth" and ($msg contains 'WERR_')) then {
          action(type="omfile" dirCreateMode="0700" FileCreateMode="0644"
                 File="/app/log/inno-samba/repl_events.log")
      }
    • если требуется отправлять события на другой сервер:

      • на контроллере домена создайте файл с конфигурацией для rsyslog, например — /etc/rsyslog.d/send_repl_events.conf:

        module(load="imfile" PollingInterval="10")
        
        input(type="imfile"
              File="/app/log/inno-samba/drs_repl.log"
              Tag="samba_auth"
              Severity="info"
              Facility="auth")
        
        if ($syslogtag == "samba_auth" and ($msg contains 'WERR_')) then {
            action(type="omfwd" target="10.0.18.132" port="514" protocol="tcp"
                   action.resumeRetryCount="100"
                   queue.type="linkedList"
                   queue.size="10000")
        }
      • на принимающем сервере создайте файл с конфигурацией для rsyslog, например — /etc/rsyslog.d/receive_repl_events.conf:

        $ModLoad imptcp
        $InputTCPServerRun 514
        
        if ($syslogtag == "samba_auth") then /logs/inno-samba/repl_events.log
    • перезапустите сервис rsyslog:

      sudo systemctl restart rsyslog.service
  4. При использовании syslog-ng:

    • убедитесь, что соответствующий сервис активен и работает в системе:

      sudo systemctl status syslog-ng.service
    • создайте файл с конфигурацией для syslog-ng, например — /etc/syslog-ng/conf.d/repl_events.conf;

    • добавьте в созданный файл информацию об исходном и целевых лог-файлах, а также задайте фильтр для отбора сообщений по наличию подстроки "WERR_*":

      source s_file {
          file("/app/log/inno-samba/drs_repl.log");
      };
      destination d_s_repl {
          file("/app/inno-samba/repl_events.log");
      };
      filter f_s_repl {
          match("WERR_*");
      };
      log {
          source(s_file);
          filter(f_s_repl);
          destination(d_s_repl);
      };
    • перезапустите сервис syslog-ng:

      sudo systemctl restart syslog-ng

При анализе сформированного лог-файла с событиями процесса репликации могут формирования оповещения, например, при появлении в нем событий, отличных от "WERR_OK". Один из возможных вариантов поиска таких событий:

sudo tail /app/log/inno-samba/repl_events.log -n -5 | grep -v 'WERR_OK'