Приведу пример настройки детальных логов Samba, в логах может сохранятся IP адрес клиента, его действие, hostname, а также много другой отладочной информации.
Чтобы писались более детальные логи, откроем файл конфигурации samba в текстовом редакторе:
sudo nano /etc/samba/smb.conf
И например добавим в секции «global»:
log level = 2 max log size = 20480
log level 1 самый низкий, 0 — для отключения и является по умолчанию, max log size определяет максимальный размер файла логов в килобайтах, я указал 20мб.
sudo smbcontrol all reload-config
Или перезапустим samba:
sudo /etc/init.d/smbd restart sudo /etc/init.d/nmbd restart sudo systemctl restart nmbd sudo systemctl restart smbd
Можно указывать разный уровень для разных классов отладки, например:
log level = 1 auth:10 winbind:5 passdb:4
Классы отладки могут быть: all, tdb, printdrivers, lanman, smb, rpc_parse, rpc_srv, rpc_cli, passdb, sam, auth, winbind, vfs, idmap, quota, acls, locking, msdfs, dmapi, registry.
Для ведения логов активности пользователей более удобно указать vfs:
log level = 0 vfs:2 max log size = 20480
И допустим ранее была настроена шара:
[test] path = /srv/samba/test comment = test browseable = yes writable = yes read only = no
Теперь в конце ее настроек добавим параметры ведения логов, в итоге получится так:
[test] path = /srv/samba/test comment = test browseable = yes writable = yes read only = no vfs objects = full_audit full_audit:prefix = %u|%I|%m|%S full_audit:failure = none full_audit:success = mkdir rmdir open read pread write pwrite sendfile rename unlink lock full_audit:facility = local5 full_audit:priority = debug
После этого логи будут писаться в /var/log/syslog, чтобы писались в отдельный файл, добавим в конфигурации syslog:
local5.debug -/var/log/samba/audit.log
I will give an example of setting up detailed logs of Samba, the logs can save the client’s IP address, its action, the hostname, as well as many other debugging information.
To write more detailed logs, open the samba configuration file in a text editor:
sudo nano /etc/samba/smb.conf
And for example, add in the section “global”:
log level = 2 max log size = 20480
log level 1 is the lowest, 0 is for shutdown and is the default, max log size determines the maximum size of the log file in kilobytes, I specified 20mb.
Apply the changes:
sudo smbcontrol all reload-config
Or restart samba:
sudo /etc/init.d/smbd restart sudo /etc/init.d/nmbd restart sudo systemctl restart nmbd sudo systemctl restart smbd
You can specify a different level for different debugging classes, for example:
log level = 1 auth:10 winbind:5 passdb:4
Debug classes can be: all, tdb, printdrivers, lanman, smb, rpc_parse, rpc_srv, rpc_cli, passdb, sam, auth, winbind, vfs, idmap, quota, acls, locking, msdfs, dmapi, registry.
логарифмический уровень = 0 vfs:2 максимальный размер журнала = 20480
И допустим ранее был настроен каталог:
[тест] путь = /srv/самба/тест комментарий = тест просмотр = да запись = да только чтение = нет
Теперь в конце его настроек добавим опции логирования, в итоге получится вот так:
[тест] путь = /srv/самба/тест комментарий = тест просмотр = да запись = да только чтение = нет объекты vfs = полный_аудит полный_аудит: префикс = %u|%I|%m|%S полный_аудит: сбой = нет full_audit:success = mkdir rmdir open read pread write pwrite sendfile rename unlink lock полный_аудит: объект = местный5 полный_аудит: приоритет = отладка
После этого логи будут записываться в /var/log/syslog, для записи в отдельный файл добавить в конфигурации syslog:
local5.debug -/var/log/samba/audit.log
См. также мою статью:
Установка и настройка Samba
Установка в Linux Ubuntu/Debian:
Создание резервной копии конфигурации файла на всякий случай:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Открытие конфига для скачивания, например в редакторе nano:
sudo nano /etc/samba/smb.conf
Коротко опишу параметры стандартного конфига:
[все страны] # нетбиос имя netbios имя = ИМЯ # Имя рабочей группы рабочая группа = РАБОЧАЯ ГРУППА # Описание сервера строка сервера = сервер %h (Samba, Ubuntu) # Включение функции WINS (Windows Internet Name Service) сервера. W INS сервер регистрирует связки NETBIOS-имени с IP-адресом. # wins support = no # Адрес другого существующего в сети WINS сервера. ; wins server = w.x.y.z # Делать ли запрос к DNS серверу если WINS сервер не смог разрешить NetBIOS имя dns proxy = no # Параметр определяет в каком порядке использовать сервисы имен для получения IP адреса (lmhosts - искать IP в файле lmhosts самбы, host - /etc/hosts, wins - через wins сервер указанный в "wins server", bcast - послать широковещательный запрос на все сетевые интерфейсы) ; name resolve order = lmhosts host wins bcast # Определяет какие будут использоваться интерфейсы ; interfaces = 127.0.0.0/8 eth0 # Указывает что нужно строго использовать только интерфейсы указанные в "interfaces" ; bind interfaces only = yes # Адрес размещения файла логов log file = /var/log/samba/log.%m # Более детальный уровень логов log level = 3 debug timestamp = yes # Максимальный размер файла в килобайтах, если размер превышен, то создается новый, а к существующему добавляется расширение .old, "0" - без ограничения по размеру) max log size = 1000 # Записывать ли логи в системный журнал syslog # syslog only = no # Уровень логов которые будут писаться в системный журнал syslog (0 - LOG_ERR, 1 - LOG_WARNING, 2 - LOG_NOTICE, 3 - LOG_INFO) syslog = 0 # Доступ к ресурсам осуществляется по: user - имени пользователя и паролю, share - паролю, server - переадресация проверки на другой сервер (если не получится будет использоваться "security = user", domain - имитация работы сервера домена Windows # security = user # Шифрование передающихся между клиентом и сервером паролей encrypt passwords = true # Механизм хранения информации о пользователях (smbpasswd, tdbsam, ldapsam) passdb backend = tdbsam # Использование PAM для аутентификации obey pam restrictions = yes # Cинхронизация пароля UNIX с паролем SMB при изменении зашифрованного пароля SMB в файле smbpasswd unix password sync = yes # Программа которая будет использоваться для смены паролей UNIX passwd program = /usr/bin/passwd %u # Строка управляющая обменом “chat” между демоном smbd и программой смены паролей passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . # Использование PAM для смены паролей UNIX вместо указанной программы в "passwd program" pam password change = yes # (Never - запросы с неправильным паролем отклоняются; Bad User - запросы с неправильным паролем отклоняются, но если имя пользователя существует, будет произведена попытка входа гостем; Bad Password - запросы с неправильным паролем обрабатываются как попытка зайти гостем; Bad Uid - в режиме security = domain/ads когда пользователь прошел аутентификацию, но не имеет учетной записи UNIX будет считаться гостем. map to guest = bad user ########## Domains ########### # Поддержка службы входа в сеть для Windows 9X ; domain logons = yes # Путь к директории где будут хранится пользовательские профили (Application Data, Рабочий стол, NTuser.dat, .) ; logon path = \\%N\profiles\%U # logon path = \\%N\%U\profile # Путь присоединения домашней директории для рабочих станций Windows NT ; logon drive = H: # Домашняя директория при авторизации клиента # logon home = \\%N\%U # Файл сценария, который будет скачан и выполнен на клиентском компьютере при входе в систему. ; logon script = logon.cmd # Путь к сценарию, который будет выполнен демоном smbd от пользователя root при обстоятельствах описанных ниже ; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u # Путь к сценарию который запускается при добавлении учетной записи компьютера в домен SAMBA ; add machine script = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u # Путь к сценарию который запускается от root пользователя smbd при создании новай группы ; add group script = /usr/sbin/addgroup --force-badname %g ########## Printing ########## # Отображение всех принтеров # load printers = yes # Определяет какая статусная информация о принтере будет интерпретироваться в системе. ; printing = bsd # Переопределение вкомпилированного printcap name ; printcap name = /etc/printcap ; printing = cups ; printcap name = cups ############ Misc ############ # Присоединение и обработка другого конфигурационного файла ; include = /home/samba/etc/smb.conf.%m # SO_RCVBUF=8192 SO_SNDBUF=8192 # Параметры сокета для обслуживания клиентов # socket options = TCP_NODELAY # Команда выполняющаяся при получении сервером сообщения WinPopup ; message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' & # Сопоставление списка просмотра сети. Мастер браузеры в изолированных подсетях передадут свои локальные списки просмотра и запросят законченную копию списка для всей глобальной сети. # domain master = auto # Диапазон пользовательских идентификаторов для сопоставления SIDов UNIX пользователей SIDам NT пользователей. ; idmap uid = 10000-20000 # Диапазон групповых идентификаторов для сопоставления SIDов UNIX групп SIDам NT групп ; idmap gid = 10000-20000 ; template shell = /bin/bash ; winbind enum groups = yes ; winbind enum users = yes ; usershare max shares = 100 # Разрешить не аутентифицированным пользователям получить доступ к общим ресурсам пользователей usershare allow guests = yes #======================= Share Definitions ======================= ;[homes] # комментарий к папке ; comment = Home Directories # Общий ресурс отображаться в списке доступных общих ресурсов в сетевом окружении и в списке просмотра ; browseable = no # Запрет на изменение и создание файлов ; read only = yes # Права доступа для создаваемого файла ; create mask = 0700 # Права доступа для создаваемой директории ; directory mask = 0700 # Список пользователей, которым разрешен доступ ; valid users = %S ;[netlogon] ; comment = Network Logon Service ; path = /home/samba/netlogon # Не требовать для подключения пароль ; guest ok = yes ; read only = yes ;[profiles] ; comment = Users profiles ; path = /home/samba/profiles ; guest ok = no ; browseable = no ; create mask = 0600 ; directory mask = 0700 [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = no read only = yes create mask = 0700 [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no ; write list = root, @lpadmin ;[cdrom] ; comment = Samba server's CD-ROM ; read only = yes ; locking = no ; path = /cdrom ; guest ok = yes # Команда запускаемая при подключении к сервису ; preexec = /bin/mount /cdrom # Команда запускаемая при отключении от сервиса ; postexec = /bin/umount /cdrom # Разрешает только указанными IP адресам присоединяться к Samba-серверу, по умолчанию всем разрешено, можно не ограничивать - закомментировать строку, а ограничить фаерволом, например iptables hosts allow = 172.16. 192.168.1. 192.168.0. 127. 10.
Приведу пример конфигурации шары пользователя «ixnfo»:
[ixnfo] path = /srv/samba/ixnfo comment = ixnfo browseable = yes writable = yes read only = no create mask = 0770 directory mask = 0770
Проверить корректность параметров конфигурации можно командой:
Узнать версию samba можно так:
Пример создания директории для шары:
sudo mkdir -p /srv/samba/anonymous_share sudo chown nobody.nogroup /srv/samba/anonymous_share/
Просмотр привилегий на файлы и папки:
Добавление пользователя «ixnfo» в Ubuntu:
Добавление samba пользователя (пользователь с таким именем уже должен быть создан в системе командой выше):
Создание файла пользователей:
sudo touch /etc/samba/smbusers sudo nano /etc/samba/smbusers ixnfo = Admin
Пример указания привилегий:
sudo chown ixnfo:ixnfo -R /srv/samba/ixnfo/ sudo chmod -R 0770 /srv/samba/ixnfo/
sudo smbcontrol all reload-config
Или перезагрузим samba:
sudo service samba restart sudo restart smbd sudo restart nmbd
Или так перезагрузим:
sudo /etc/init.d/smbd restart sudo /etc/init.d/nmbd restart sudo systemctl restart smbd sudo systemctl restart nmbd
Пример просмотра сетевой информации компьютера в Windows:
Пример команды подключения сетевого диска в Windows (можно добавить в автозагрузку bat файлом)
net use K: \\192.168.1.5\dir /persistent:no /user:USER PASSWORD
Решение ошибок:
Проблемы с автозапуском Samba в Linux
WARNING: The «syslog» option is deprecated
System error 1231 has occurred
«Unable to connect to CUPS server» и «failed to retrieve printer list»
«rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)»
Для логирования/аудита действий пользователей на файловом сервере предусмотрен модуль VFS (Virtual File System) — full_audit
, рассмотрим его применение.
# ПАРАМЕНТЫ ЛОГИРОВАНИЯ log level = 0 vfs:1 # ПОДКЛЮЧЕНИЕ МОДУЛЕЙ VFS (Virtual File System) vfs objects = full_audit # АУДИТ СЕТЕВЫХ ПАПОК full_audit:prefix = %S|%u|%I full_audit:success = mkdir rmdir pwrite rename unlink full_audit:failure = none full_audit:facility = local5 full_audit:priority = notice
Пояснения по параметрам full_audit:
Если уже используется какой-то модуль VFS, то перечисляем все объекты через пробел, например:
vfs object = acl_xattr full_audit
Если необходимо вести логирование пользовательский действий по какой то определенной общей папке, то тогда выше описанные параметры необходимо прописывать в секцию описания общей папки.
После изменения конфигурации, перезапускаем samba, командой:
/etc/init.d/smbd restart
По-умолчанию логирование записывается в файлы rsyslog
и messages
и выглядит это следующим образом:
Jan 17 16:14:45 datastore1 smbd_audit: DISK_Z|user1|10.10.16.31|pwrite|ok|test.doc Jan 17 16:14:04 datastore1 smbd_audit: DISK_Z|user1|10.10.10.21|unlink|ok|test.doc Jan 17 16:14:04 datastore1 smbd_audit: DISK_Z|user1|10.10.10.21|mkdir|ok|Новая папка Jan 17 16:14:04 datastore1 smbd_audit: DISK_Z|user1|10.10.10.21|rename|ok|./Новая папка|./Новая папка 2 Jan 17 16:14:04 datastore1 smbd_audit: DISK_Z|user1|10.10.10.21|rmdir|ok|Новая папка 2
Для удобства настроим запись логов в отдельный файл и настроим для этого файла ротацию. Сперва запретим логирование в файлы rsyslog и messages, в файле конфигурации rsyslog ( /etc/rsyslog.conf
) приводим к виду строки:
*.*;local5,auth,authpriv.none -/var/log/syslog *.=info;*.=notice;*.=warn;\ local5,auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages
Теперь укажем в какой файл необходимо записывать события. В конец файла добавляем следующую строку:
local5.notice -/var/log/samba/audit_shares.log
ЗАМЕТКА. Знак минуса перед указанием файла означает, что после каждой записи в файл не будет выполняться операция sync, а данные некоторое время будут находится в оперативной памяти в дисковом буфере. При большой интенсивности потока записей это уменьшает нагрузку на дисковую систему.
Для применения изменений перезапускаем rsyslog
, командой:
/etc/init.d/rsyslog restart
Последний штрих, это настройка ротации для лог-файла. В файл ( /etc/logrotate.d/samba
) добавляем строки:
/var/log/samba/audit_shares.log { daily rotate 60 missingok compress notifempty olddir /var/log/samba/audit_old
} ПОЯСНЕНИЯ. Используемые параметры указывают что ротацию необходимо делать каждый день ( daily
), хранить файлы не более 60 дней ( rotate
), не выдавать ошибок в случае если лог-файла не существует ( missingok
), не обрабатывать пустые файлы ( notifempty
) и перемещать старые лог-файлы в отдельную папку ( olddir
)
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Журналирование в Samba
Файлы журналов службы Samba находятся в каталоге /var/log/samba/
.
6.1.1. Уровни журналирования
6.1.1.1. Установка уровня журналирования в файле smb.conf
Установить уровень журналирования для Samba можно, используя параметр log level
в файле /etc/samba/smb.conf
. Для разных классов отладки можно указывать разные уровни журналирования и отдельные файлы журналов.
установить уровень журнала для всех классов отладки на 3:
log level = 3
установить общий уровень журнала на 3 и для классов passdb и auth на 5:
log level = 3 passdb:5 auth:5
установить уровень журнала для класса winbind на 1 и писать логи в файл
/var/log/winbind.log
:log level = 3 winbind:1@/var/log/winbind.log
Получить дополнительную информацию и список классов отладки можно на справочной странице smb.conf
( man smb.conf
).
6.1.1.2. Установка уровня журналирования при выполнении команд
Команды Samba используют уровень журналирования, установленный в параметре log level
в файле /etc/samba/smb.conf
. Это значение можно переопределить, используя опцию -d
для всех команд Samba. Например:
$ net usershare add Share2 /tmp/share2 -d 5
6.1.2. Настройка ведения журнала аудита
Samba поддерживает ведение журнала событий аутентификации и авторизации, а также ведение журнала изменений базы данных AD DC. Это позволяет регистрировать, например, неудачные запросы аутентификации или сбросы пароля.
Ведение журнала аудита является локальной настройкой, эту функцию необходимо включить на каждом сервере Samba. События регистрируются на сервере Samba, на котором произошло событие. Чтобы хранить все журналы на централизованном сервере, следует настроить централизованный сервер системных журналов, настроить Samba для регистрации в syslog и настроить syslog для отправки журналов на централизованный сервер.
Описание параметров logging
, syslog
и syslog only
можно посмотреть на справочной странице smb.conf
( man smb.conf
).
Samba генерирует некоторые журналы на узле в конфигурации файлового сервера и члена домена, но полная поддержка доступна только в AD DC.
Samba поддерживает протоколирование успешных событий авторизации, но не неуспешных событий авторизации. Samba может регистрировать как успешные, так и неуспешные события аутентификации.
Аутентификация происходит, когда Samba проверяет комбинацию имени пользователя и пароля.
Авторизация происходит при запуске сеанса.
Журнал аудита Samba поддерживает стандартный формат и формат JSON. Можно включить каждый формат по отдельности или оба вместе, используя разные классы отладки журнала.
В зависимости от уровня журналирования Samba регистрирует разные события. Чтобы ограничить количество записей в журнале, можно увеличить уровень журналирования только для классов отладки, связанных с аудитом. Для управления уровнем журнала аудита можно использовать следующие классы отладки:
auth_audit
— стандартный формат журнала;auth_json_audit
— формат JSON.
Пример включения ведения журнала аудита аутентификации (установить уровень журнала по умолчанию — 1, включить регистрацию неудачных и успешных запросов аутентификации — 3):
log level = 1 auth_audit:3 auth_json_audit:3
Перезапустить службу Samba.
Пример записей о неуспешной и успешной попытках аутентификации пользователя на контроллере домена Samba с использованием стандартного формата журнала:
[2023/04/13 11:51:20.341735, 2] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:51:20.341726 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.125:49382] mapped to [TEST]\[petrov]. local host [NULL] [2023/04/13 11:51:32.859080, 3] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:51:32.859051 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.125:52630] became [TEST]\[petrov] [S-1-5-21-1723588197-2340999690-1379671080-1106]. local host [NULL]
Пример записей о неуспешной и успешной попытках аутентификации пользователя на контроллере домена Samba с использованием формата JSON:
[2023/04/13 11:46:08.614095, 2] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:46:08.614055 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.125:42738] mapped to [TEST]\[petrov]. local host [NULL] {"timestamp": "2023-04-13T11:46:08.614338+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 2}, "eventId": 4625, "logonId": "10c3af2c9c39fef4", "logonType": 3, "status": "NT_STATUS_WRONG_PASSWORD", "localAddress": null, "remoteAddress": "ipv4:192.168.0.125:42738", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "petrov\\@TEST. ALT@TEST. ALT", "workstation": null, "becameAccount": "petrov", "becameDomain": "TEST", "becameSid": "S-1-5-21-1723588197-2340999690-1379671080-1106", "mappedAccount": "petrov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "duration": 6096}}
[2023/04/13 11:48:45.902778, 3] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:48:45.902759 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.125:52840] became [TEST]\[petrov] [S-1-5-21-1723588197-2340999690-1379671080-1106]. local host [NULL] {"timestamp": "2023-04-13T11:48:45.902942+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 2}, "eventId": 4624, "logonId": "71c99af1de51eaf6", "logonType": 3, "status": "NT_STATUS_OK", "localAddress": null, "remoteAddress": "ipv4:192.168.0.125:52840", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "petrov\\@TEST. ALT@TEST. ALT", "workstation": null, "becameAccount": "petrov", "becameDomain": "TEST", "becameSid": "S-1-5-21-1723588197-2340999690-1379671080-1106", "mappedAccount": "petrov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "duration": 9023}} Пример включения ведения журнала аудита базы данных DC AD (установить уровень журнала по умолчанию — 1, включить ведение журнала изменений базы данных в формате JSON):
log level = 1 dsdb_json_audit:5 dsdb_password_json_audit:5 dsdb_group_json_audit:5 dsdb_transaction_json_audit:5
Перезапустить службу Samba.
6.1.3. Интерпретация журналов аудита JSON
Если включено ведение журнала аудита в формате JSON, сведения о различных событиях регистрируются в формате JSON. Каждое событие имеет множество атрибутов. Внешний слой атрибутов состоит из трёх элементов: метки времени, типа события и объекта данных:
{ "timestamp": 2023-04-13T11:48:45.902942+0200, "type": одно из значений "Authentication", "Authorization", "dsdbChange", "dsdbTransaction", "passwordChange", "replicatedUpdate", "groupChange", type: { data }
} Некоторые атрибуты по-прежнему будут присутствовать в журнале, даже если они неприменимы. Например, если NETLOGON не используется (согласно serviceDescription
), для параметра netlogonComputer
будет установлено значение «null», для параметра netlogonNegotiateFlags
будет установлено значение «0x00000000», а другие поля сетевого входа будут иметь аналогичные пустые значения.
Таблица 6.1. Аутентификация
Таблица 6.2. Успешные события авторизации
Остальные таблицы: dsdbChange? (https://wiki.samba.org/index.php/Interpreting_JSON_Audit_Logs)
Журналирование в Samba
Файлы журналов службы Samba находятся в каталоге /var/log/samba/
.
6.1.1. Уровни журналирования
6.1.1.1. Установка уровня журналирования в файле smb.conf
Установить уровень журналирования для Samba можно, используя параметр log level
в файле /etc/samba/smb.conf
. Для разных классов отладки можно указывать разные уровни журналирования и отдельные файлы журналов.
установить уровень журнала для всех классов отладки на 3:
log level = 3
установить общий уровень журнала на 3 и для классов passdb и auth на 5:
log level = 3 passdb:5 auth:5
установить уровень журнала для класса winbind на 1 и писать логи в файл
/var/log/winbind.log
:log level = 3 winbind:1@/var/log/winbind.log
Получить дополнительную информацию и список классов отладки можно на справочной странице smb.conf
( man smb.conf
).
6.1.1.2. Установка уровня журналирования при выполнении команд
Команды Samba используют уровень журналирования, установленный в параметре log level
в файле /etc/samba/smb.conf
. Это значение можно переопределить, используя опцию -d
для всех команд Samba. Например:
$ net usershare add Share2 /tmp/share2 -d 5
6.1.2. Настройка ведения журнала аудита
Samba поддерживает ведение журнала событий аутентификации и авторизации, а также ведение журнала изменений базы данных AD DC. Это позволяет регистрировать, например, неудачные запросы аутентификации или сбросы пароля.
Ведение журнала аудита является локальной настройкой, эту функцию необходимо включить на каждом сервере Samba. События регистрируются на сервере Samba, на котором произошло событие. Чтобы хранить все журналы на централизованном сервере, следует настроить централизованный сервер системных журналов, настроить Samba для регистрации в syslog и настроить syslog для отправки журналов на централизованный сервер.
Описание параметров logging
, syslog
и syslog only
можно посмотреть на справочной странице smb.conf
( man smb.conf
).
Samba генерирует некоторые журналы на узле в конфигурации файлового сервера и члена домена, но полная поддержка доступна только в AD DC.
Samba поддерживает протоколирование успешных событий авторизации, но не неуспешных событий авторизации. Samba может регистрировать как успешные, так и неуспешные события аутентификации.
Аутентификация происходит, когда Samba проверяет комбинацию имени пользователя и пароля.
Авторизация происходит при запуске сеанса.
Журнал аудита Samba поддерживает стандартный формат и формат JSON. Можно включить каждый формат по отдельности или оба вместе, используя разные классы отладки журнала.
В зависимости от уровня журналирования Samba регистрирует разные события. Чтобы ограничить количество записей в журнале, можно увеличить уровень журналирования только для классов отладки, связанных с аудитом. Для управления уровнем журнала аудита можно использовать следующие классы отладки:
auth_audit
— стандартный формат журнала;auth_json_audit
— формат JSON.
Пример включения ведения журнала аудита аутентификации (установить уровень журнала по умолчанию — 1, включить регистрацию неудачных и успешных запросов аутентификации — 3):
log level = 1 auth_audit:3 auth_json_audit:3
Перезапустить службу Samba.
Пример записей о неуспешной и успешной попытках аутентификации пользователя на контроллере домена Samba с использованием стандартного формата журнала:
[2023/04/13 11:51:20.341735, 2] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:51:20.341726 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.125:49382] mapped to [TEST]\[petrov]. local host [NULL] [2023/04/13 11:51:32.859080, 3] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:51:32.859051 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.125:52630] became [TEST]\[petrov] [S-1-5-21-1723588197-2340999690-1379671080-1106]. local host [NULL]
Пример записей о неуспешной и успешной попытках аутентификации пользователя на контроллере домена Samba с использованием формата JSON:
[2023/04/13 11:46:08.614095, 2] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:46:08.614055 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_WRONG_PASSWORD] workstation [(null)] remote host [ipv4:192.168.0.125:42738] mapped to [TEST]\[petrov]. local host [NULL] {"timestamp": "2023-04-13T11:46:08.614338+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 2}, "eventId": 4625, "logonId": "10c3af2c9c39fef4", "logonType": 3, "status": "NT_STATUS_WRONG_PASSWORD", "localAddress": null, "remoteAddress": "ipv4:192.168.0.125:42738", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "petrov\\@TEST. ALT@TEST. ALT", "workstation": null, "becameAccount": "petrov", "becameDomain": "TEST", "becameSid": "S-1-5-21-1723588197-2340999690-1379671080-1106", "mappedAccount": "petrov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "duration": 6096}}
[2023/04/13 11:48:45.902778, 3] ././auth/auth_log.c:647(log_authentication_event_human_readable) Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[petrov\\@TEST. ALT@TEST. ALT] at [Thu, 13 Apr 2023 11:48:45.902759 EET] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:192.168.0.125:52840] became [TEST]\[petrov] [S-1-5-21-1723588197-2340999690-1379671080-1106]. local host [NULL] {"timestamp": "2023-04-13T11:48:45.902942+0200", "type": "Authentication", "Authentication": {"version": {"major": 1, "minor": 2}, "eventId": 4624, "logonId": "71c99af1de51eaf6", "logonType": 3, "status": "NT_STATUS_OK", "localAddress": null, "remoteAddress": "ipv4:192.168.0.125:52840", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "petrov\\@TEST. ALT@TEST. ALT", "workstation": null, "becameAccount": "petrov", "becameDomain": "TEST", "becameSid": "S-1-5-21-1723588197-2340999690-1379671080-1106", "mappedAccount": "petrov", "mappedDomain": "TEST", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "duration": 9023}} Пример включения ведения журнала аудита базы данных DC AD (установить уровень журнала по умолчанию — 1, включить ведение журнала изменений базы данных в формате JSON):
log level = 1 dsdb_json_audit:5 dsdb_password_json_audit:5 dsdb_group_json_audit:5 dsdb_transaction_json_audit:5
Перезапустить службу Samba.
6.1.3. Интерпретация журналов аудита JSON
Если включено ведение журнала аудита в формате JSON, сведения о различных событиях регистрируются в формате JSON. Каждое событие имеет множество атрибутов. Внешний слой атрибутов состоит из трёх элементов: метки времени, типа события и объекта данных:
{ "timestamp": 2023-04-13T11:48:45.902942+0200, "type": одно из значений "Authentication", "Authorization", "dsdbChange", "dsdbTransaction", "passwordChange", "replicatedUpdate", "groupChange", type: { data }
} Некоторые атрибуты по-прежнему будут присутствовать в журнале, даже если они неприменимы. Например, если NETLOGON не используется (согласно serviceDescription
), для параметра netlogonComputer
будет установлено значение «null», для параметра netlogonNegotiateFlags
будет установлено значение «0x00000000», а другие поля сетевого входа будут иметь аналогичные пустые значения.
Таблица 6.1. Аутентификация
Таблица 6.2. Успешные события авторизации
Остальные таблицы: dsdbChange? (https://wiki.samba.org/index.php/Interpreting_JSON_Audit_Logs)
Настройка уровня логов Samba
Первым делом настройте уровень логов Samba.
Обычно логи в Samba не очень подробные, вследствие чего, иногда бывает трудно найти ошибку. Но, степень вывода логов можно изменить. Для этого нужно отредактировать конфигурационный файл Samba.
# mcedit /etc/samba/smb.conf
И в секции «global» добавить две строки:
log level = 2 max log size = 20480
где log level
— уровень логов от 1 до 5, чем больше значение, тем подробнее.
# service samba restart
Установите значение, например, на 5. Перезапустите службу. Начните выполнять в консоли настройку, которая у вас не получалась и Вы увидите что логи стали в разы подробней.
Логи у команды
# net ads join -U administrator -d 1
Команде net не удается подключиться по адресу 127.0.0.1
Используя настройки по-умолчанию, команда net
подключается к адресу 127.0.0.1. Если Samba не слушает петлевой интерфейс, подключение не удастся. Например:
# net rpc rights list -U administrator Enter administrator's password: Could not connect to server 127.0.0.1 Connection failed: NT_STATUS_CONNECTION_REFUSED
Для решения данной проблемы, настройте Samba на дополнительное прослушивание петлевого интерфейса. Для подробностей см. Настройка Samba для привязки к определенным интерфейсам.
В качестве временного решения проблемы, можно использовать ключ -I
IP_address
или -S
host_name
после команды net
.
Настройка Samba для привязки к определенным интерфейсам
Если ваш сервер использует несколько сетевых интерфейсов, вы можете настроить Samba для привязки только к определенному интерфейсу. Например, если Samba установлена на маршрутизаторе с одним сетевым интерфейсом, подключенным к Интернету, и другим, подключенным к внутренней сети.
Чтобы привязать все службы Samba к eth0
и устройству loopback
( lo
):
bind interfaces only = yes interfaces = lo eth0
Перезапустите службы Samba.
# systemctl restart samba [i
]
getent не находит доменных пользователей и групп
getent passwd demo01
ничего не возвращает, попробуйте ввести:
getent passwd "SAMDOM\demo01"
если данная команда работает, а первая нет, вам может потребоваться добавить следующую строку в файл smb.conf
winbind use default domain = yes
- Домен: DOMAIN. RU
- WG: DOMAIN
- Хост: Client
Вывод текущей схемы аутентификации
Примечание:
Для работы нужен пакет alterator-auth.
# system-auth status
Команда работает только из под root.
Примечание:
Вместо DOMAIN и CLIENT система выведет имена домена и клиента.
- Доменная система
[root@test ~]# system-auth status ad PETR. RU TEST PETR
- Локальная система
[root@localhost ~]# system-auth status local
Вывод системы аутентификации
# control system-auth
Команда работает только из под root
- Доменная система
[root@test ~]# control system-auth sss
- Локальная система
[root@localhost ~]# control system-auth local
Статус служб бэкендов Samba
$ systemctl status sssd $ systemctl status winbind
Команда работает и под root и под обычным пользователем.
- Локальная система:
[root@host-9 ~]# systemctl status sssd Unit sssd.service could not be found.
[root@host-9 ~]# systemctl status winbind ? winbind.service - Samba Winbind Daemon Loaded: loaded (/lib/systemd/system/winbind.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:winbindd
man:samba
man:smb.conf
- Доменная система:
[root@test ~]# systemctl status sssd sssd.service - System Security Services Daemon Loaded: loaded (/lib/systemd/system/sssd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2023-04-20 10:40:31 MSK; 6h ago
[petr@test ~]$ systemctl status winbind winbind.service - Samba Winbind Daemon Loaded: loaded (/lib/systemd/system/winbind.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2023-04-20 10:40:33 MSK; 7h ago
Информация о домене
$ net ads info
Команда работает и под root и под обычным пользователем.
- Локальная система
[ladmin@localhost -]$ net ads info adsconnect: No logon servers are curently available to service the logon request. adsconnect: No logon servers are curently available to service the logon request. Didn't find the ldap server!
- Доменная система
[ladmin@test ~]$ net ads info LDAP server: 10.0.2.6 LDAP server name: dc.petr.ru Realm: PETR. RU Bind Path: dc=PETR,dc=RU LDAP port: 389 Server time: Чт, 20 anp 2023 17:07:10 MSK KDC server: 10.0.2.6 Server time offset: 2 Last machine account password change: Вт, 11 anp 2023 17:02:48 MSK
Вывод имени хоста kdc по IP
$ host kdc_ip
Примечание:
Вместо kdc_ip введите IP адрес KDC из команды net ads info.
Команда работает и под root и под обычным пользователем.
- Доменная система
[ladmin@test ~]$ host 10.0.2.6 6.2.0.10.in-addr.arpa has no PTR record
$ ping kdc_ip
Примечание:
Вместо kdc_ip введите IP адрес KDC из команды net ads info.
Команда работает и под root и под обычным пользователем.
- Доменная система
[root@test ~]# ping 10.0.2.6
PING 10.0.2.6 (10.0.2.6) 56 bytes of data.
bytes from 10.0.2.6: icmp_seq=l ttl=64 time=0.413 ms
bytes from 10.0.2.6: icmp_seq=2 ttl=64 time=0.423 ms
bytes from 10.0.2.6: icmp_seq=3 ttl=64 time=0.434 ms
bytes from 10.0.2.6: icmp_seq=4 ttl=64 time=0.436 ms
Получение билета Kerberos с подробным логом
$ KRB5_TRACE=/dev/stdout kinit user
Работает и под root и под обычным пользователем.
- Локальная система
[root@localhost ~]# kinit petг kinit: Configuration file does not specify default realm when parsing name petr
- Доменная система
[root@test ~]KRB5_TRACE=/deu/stdout кinit petr [11850] 1682000087.974945: Getting initial credentials for petr@PETR. RU [11050] 1682000087.974947: Sending unauthenticated request [11050] 1682000087.974948: Sending request (193 bytes) to PETR. RU [11050] 1682000087.974949: Sending initial UDP request to dgran 10.0.2.6:88 [11050] 1682000087.974950: Received answer (283 bytes) from dgran 10.0.2.6:88 [11050] 1682000087.974951: Response was from primary KDC [11050] 1682000087.974952: Received error from KDC: -1765328359/Additional pre-authentication required [11050] 1682000087.974955: Preauthenticating using KDC method data [11050] 1682000087.974956: Processing preauth types: PA-PK-AS-REQ, PA-PK-AS-REP. OLD , PA-PK INIT-KX (147), PA-ENC-TINESTAMP, PA-FX-FAST (136), 655, PA-ETYPE-INF02
[11050] 1682000087.974957: Selected etype info: etype aes256-cts, salt "PETR. RUpetr”, parans "\x00\x30\xl0\x00" [11050] 1682000087.974958: PKINIT client has no configured identity; giuing up [11050] 1682000087.974959: Preauth module pkinit (147) (info) returned: 0/Success [11050] 1682000087.974960: PKINIT client has no configured identity; giuing up 111050] 1682000087.974961: Preauth module pkinit(real) returned: 22/Heдопустимый аргумент Password for petr@PETR. RU:
Информация о проверке связи с доменом# net ads testjoinРаботает только под root
- Локальная система
[root@localhost ~]# net ads testjoin Join to domain is not valid: NT code 0xfffffff6
- Доменная система
[root@test ~J# net ads testjoin Join is OK
Вывод списка пользователей
$ getent passwd
Или конкретного пользователя
$ getent passwd petr
Работает и под root и под обычным пользователем.
- Общий вывод
[petr@test ~]$ getent passwd root:x:0:0:System Administrator:/root:/bin/bash bin:x:1:1:bin:/:/dev/null daemon:x:2:2:daemon:/:/dev/null adm:x:3:4:adm:/var/adm:/dev/null lp:x:4:7:lp:/var/spool/lpd:/dev/null и т.д.
- Вывод указанного пользователя
[petr@test ~]$ getent passwd petr petr:*:1332601104:1332600513:petr:/home/PETR. RU/petr:/bin/bash
Вывод списка пользователей
$ wbinfo -u
Работает и под root и под обычным пользователем.
[ladmin@localhost ~]$ wbinfo -u could not obtain winbind interface details: WBCERRWINBINDNOTAVAILABLE could not obtain winbind domain name! Error looking up domain users
[petr@test ~]$ wbinfo -u krbtgt anton serg dima administrator guest petr
Вывод групп пользователя
$ id
Работает и под root и под обычным пользователем.
Можно указать конкретного пользователя:
$ id dima
- Группы пользователя, зашедшего в систему:
[admin@host-9 ~]$ id uid=500(admin) gid=500(admin) группы=500(admin),10(wheel),14(uucp),19(proc),22(cdrom),71(floppy),80(cdwriter),81(audio),83(radio),464(scanner),465(xgrp),466(camera),488(video)
- Группы указанного пользователя:
[petr@test ~]$ id dima uid=133Z601105(dima) gid=133Z600513(domain users) rpynnu=133Z600513(domain users),100(users),80(cdur iter),ZZ(cdrom),81(aud io),475(u ideo),19(proc),83(rad io),465(camera), 71(floppy),498(xgrp),499(scanner),14(uucp),457(uboxusers),469(fuse),489(uboxadd),488(uboxsf)
Вывод групп пользователя
$ groups
Можно указать конкретного пользователя
$ groups dima
Работает и под root и под обычным пользователем.
- Группы пользователя зашедшего в систему (доменный):
[petr@test ~]$ groups domain users uucp proc cdrom floppy cdwriter audio radio users vboxusers camera fuse video vboxsf vboxadd xgrp scanner
- Группы пользователя зашедшего в систему (локальный администратор):
[admin@host-9 ~]$ groups admin wheel uucp proc cdrom floppy cdwriter audio radio scanner xgrp camera video
- Запрос групп пользователя из другой учетной записи (доменный):
[petr@test ~]$ groups dima dima : domain users uucp proc cdrom floppy cdwriter audio radio users vboxusers camera fuse video vboxsf vboxadd xgrp scanner
Вывод групп пользователя
$ wbinfo -g
Работает и под root и под обычным пользователем.
- Локальная система
[ladmin@localhost ~]$ wbinfo -g could not obtain winbind interface details: WBC ERR WINBIND NOT AVAILABLE could not obtain winbind domain name! failed to call wbcListGroups: WBCERRWINBINDNOTAVAILABLE Error looking up domain groups
- Доменная система
[petr@test ~]$ wbinfo -g domain computers domain controllers allowed rode password replication group read-only domain controllers domain admins enterprise read-only domain controllers dnsupdateproxy group policy creator owners dnsadmins denied rode password replication group enterprise admins ras and ias servers domain guests domain users schema admins cert publishers
Проверка доступа по ssh
$ ssh user@localhost
Работает и под root и под обычным пользователем.
Примечание:
Должна быть включена служба sshd
[ladmin@test ~]$ ssh ladmin@localhost The authenticity of host 'localhost (1Z7.0.0.1)' can't be established. EDZ5519 key fingerprint is SHAZ56:Q0wrd5iKzKqaTuGguuyxyZ8RG8TZ68dS8oldBufBTNs. Are you sure you want to continue connecting (yes/nо)? yes Warning: Permanently added 'localhost' (EDZ5519) to the list of known hosts. ladminl@localhost's password: Last login: Thu Apr 20 10:45:05 2023 [ladmin@test ~]$
Вход в DM
Примечание:
Пускает пользователя в графическую часть

