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).
Доступ к ресурсу может быть по паролю или анонимный. Для первого способа есть пара моментов:
- пользователь должен существовать в системе (создан с помощью команды 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-фильм идет без подтормаживания.
Дополнительное чтиво
Источник: 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. Для подробного протоколирования действий пользователей второй вариант является более предпочтительным, так как с его помощью можно более гибко настроить журналирование.
Данная гибкость, в частности, позволит нам вести протоколы работы с каждой сетевой папкой в отдельный файл. Для определения источника журналируемых записей 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-я везде такой бардак в логах. Если кто-то знает, как от него избавиться, прошу поделиться.
Помогла статья? Есть возможность отблагодарить автора
Источник: 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]
- 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
За сим все.
Источник: http://golda-alex.blogspot.com/2009/09/samba.html