Логирование Эллес
Эллес поддерживает логирование различных событий с целью аудита и расследования инцидентов.
Основным способом управления логированием является настройка конфигурационных параметров в файле 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.
Он обеспечивает фиксацию как критических, так и некритических ошибок в работе Эллес. -
Рекомендуемые уровни логирования для целей аудита по отдельным классам отладки —
2(предупреждения),3(информационные сообщения). -
Рекомендуемый уровень логирования в случае подозрения на наличие проблемы в промышленной среде —
3.
Данный уровень должен устанавливаться для отдельных классов логирования только на контроллерах домена, которые могут быть затронуты проблемой. После проведения анализа проблемы повышенный уровень логирования должен быть отключен. -
На контроллерах домена в промышленной среде не рекомендуется устанавливать уровни логирования выше
3. -
Для анализа проблемы на контроллерах домена в тестовой среде в большинстве случаев достаточно уровня логирования
5. -
Уровни логирования выше
5предназначены для использования разработчиками Эллес.
Рекомендации по настройке максимального размера и срока хранения лог-файлов
-
Рекомендуемый максимальный размер лог-файла — 10 МБ (
max log size = 10000). -
При настройке ротации и перенаправления лог-файлов в системы обработки должны обеспечиваться сроки хранения, необходимые для выяснения причин ошибок и аудита в рамках требований законодательства (сроки исковой давности и другие применимые требования).
Рекомендации по оценке размера дискового пространства для хранения лог-файлов
В таблице Табл. 1 приводится оценка размера лога за один рабочий день для некоторых классов логирования.
Оценка основана на следующих допущениях:
-
количество пользователей — 100 000;
-
распределение пользователей по контроллерам домена — 2 000 пользователей на 1 контроллер;
-
ограничение максимального размера лог-файла — 10 МБ;
-
уровень логирования — 3;
Уровень 3 должен включаться избирательно для определенных классов логирования на отдельных контроллерах домена на непродолжительные периоды времени, достаточные для разрешения имеющихся проблем. -
учитываемые операции:
-
вход пользователя с доменной учетной записью: 3 операции аутентификации в день на одного пользователя;
-
смена пароля учетной записи: период ротации пароля составляет 90 дней;
-
изменение данных пользователя: данные одного пользователя изменяются один раз в год;
-
доступ к сервисам:
-
время жизни сервисного билета Kerberos — 10 часов;
-
пользователь использует 5 разных сервисов в день с 1 аутентификацией и 10 валидациями билета Kerberos.
-
-
| Необходимо учитывать, что рабочий день может состоять из нескольких смен и в нерабочее время возможен небольшой прирост размера лог-файлов. Указанные в таблице значения являются минимальными. В условиях реальной эксплуатации они могут быть немного больше. |
| Класс | Операция | Размер в рабочий день на 1 контроллер, КБ | Примечание | Оценка размера лог-файла за рабочий день, МБ | Оценка количества лог-файлов, шт. |
|---|---|---|---|---|---|
|
Вход пользователя |
2.5*<кол-во пользователей>*3/<кол-во контроллеров> |
— |
95 |
10 |
Доступ к сервисам |
1.9*<кол-во пользователей>*20/<кол-во контроллеров> |
||||
|
Вход пользователя |
1.8*<кол-во пользователей>*3/<кол-во контроллеров> |
— |
93 |
10 |
Смена пароля |
1*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>) |
Приведенное кол-во контроллеров* — 1.5 |
|||
Изменение пользователя |
3*<кол-во пользователей>/(365*<приведенное количество контроллеров>) |
||||
Доступ к сервисам |
2*<кол-во пользователей>*20/<кол-во контроллеров> |
— |
|||
|
Доступ к сервисам |
2.3*<кол-во пользователей>*20/<кол-во контроллеров> |
— |
92 |
10 |
|
Смена пароля |
2.7*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>) |
Приведенное количество контроллеров* — 12 |
1 |
1 |
Изменение пользователя |
7.4*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>) |
||||
|
Вход пользователя |
38.2*<кол-во пользователей>*3/<кол-во контроллеров> |
— |
320 |
4 |
Доступ к сервисам |
23*<кол-во пользователей>*20/<кол-во контроллеров> |
— |
|||
|
Доступ к сервисам |
0.5*<кол-во пользователей>*20/<кол-во контроллеров> |
— |
20 |
2 |
|
Доступ к сервисам |
0.1*<кол-во пользователей>*20/<кол-во контроллеров> |
— |
4 |
1 |
|
Доступ к сервисам |
0.1*<кол-во пользователей>*2/<кол-во контроллеров> |
Только сервисы SMB; допущение — это 1/10 доля от всех сервисов |
0.4 |
1 |
|
Доступ к сервисам |
0.7*<кол-во пользователей>*2/<кол-во контроллеров> |
2.8 |
1 |
|
|
Доступ к сервисам |
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.
Например, с помощью этих инструментов на основе общего лога процесса репликации может вестись отдельный лог-файл, содержащий только сообщения со статусами. Такой лог может использоваться для настройки оповещений при появлении в нем определенных статусов.
Для настройки формирования отдельного лога для мониторинга статусов репликации:
-
Создайте каталог для размещения файлов.
Например:
mdkir -pv /app/log/inno-samba
-
Добавьте класс логирования для процесса репликации с указанием пути в значение параметра
log levelв файле /app/inno-samba/etc/smb.conf.Например:
log level = 1 \ drs_repl:4@/app/log/inno-samba/drs_repl.log [...] -
При использовании
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
-
-
При использовании
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'