Как использовать samba client control

Обновлено: 05.07.2024

Пример строчки для монтирование ресурса самбы в /etc/fstab:

Если монтируется ресурс на Windows XP, добавьте в строку в /etc/fstab параметр vers=1.0.

Если опустить параметры file_mode=0777,dir_mode=0777, то ресурс будет доступен на запись только root-у, а остальным - только для чтения.

Содержимое /etc/samba/sambacreds (создать самому, например командой mcedit /etc/samba/sambacreds )

Для защиты информации, права на файл /etc/samba/sambacreds, надо установить так, что-бы файл был доступен только хозяину

и принадлежать root:


Более подробно читайте | здесь

ОФФТОП: Буду добавлять по мере нахождения багов и костылей

Симптомы: При подключении к ресурсам на Windows 7, периодически и спонтанно отваливается ресурс.

При монтировании его это выражается в виде чего-то подобного:

mount error(121): Remote I/O error

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

Причина: Проблема, как выяснилось, имеет давнюю историю и находится в компании Microsoft. Другими словами - виноват Windows. Особенно ярко это выражено на 64 битных версиях и связано с переполнением кэша

Решение: Нужно изменить параметры работы кэша службы сервера Windows. Для этого на машине с Windows запускаем regedit.exe и в:

- установить значение 1 (По умолчанию там стоит 0)

- установить значение 3 (По умолчанию там стоит 1)

После этого, перезапустить службу server (в русской версии сервер) или просто перезагрузить компьютер с win.

Как работает SAMBA?

Настройка общих папок

Linux

Установка и настройка Samba-сервер для Ubuntu выполняется следующими этапами.

Обновляем информацию о репозиториях и устанавливаем обновления для существующих пакетов в системе:

apt-get update && apt-get upgrade

Устанавливаем пакет Samba:

apt-get install -y samba samba-client

Создадим резервную копию файла конфигурации:

cp /etc/samba/smb.conf /etc/samba/smb.conf_sample

Создадим директории для файлов, например в каталоге /media:

Важно! По умолчанию, директория /media располагается в корне системы /, для нее редко создается свой раздел. По этой причине возможно переполнение корневого раздела. Во избежание этой неприятной ситуации, рекомендуем монтировать отдельный жесткий диск в /media/samba.

Создаем каталог для всех пользователей:

Изменим права доступа к каталогу:

chmod -R 0755 /media/samba/public

Также следует воспользоваться командой chown для смены владельца и/или группы.

Создаем директорию для ограниченного круга лиц:

С помощью системных инструментов создадим группу пользователей:

Добавляем пользователей Samba:

Созданных пользователей добавляем в группу:

usermod -aG smbgrp user1

Изменим группу, которой принадлежит приватная директория:

chgrp smbgrp /media/samba/private

С помощью инструментов Samba создадим пароль для добавленного пользователя:

smbpasswd -a user1

С помощью текстового редактора, например, nano, редактируем конфигурационный файл samba:

Удаляем все строки из файла. Вставляем следующие:

map to guest = bad user

wins support = no

force user = nobody

valid users = @smbgrp

Сохраняем используя сочетание Ctrl + X, затем нажимаем Y и Enter.

Объясним значения строк. конфигурационный файл состоит из трех секций:

global - данная секция отвечает за общие настройки Samba-сервера;

public и private - секции описания настроек директорий общего доступа.

В секции global присутствуют пять параметров:

  • workgroup - рабочая группа. Для упрощения работы пользователей WORKGROUP указывается, как группа по умолчанию. Если в вашей сети имя рабочей группы изменено, то следует изменить это значение и для Samba;
  • security - уровень безопасности сервера. Значение user означает авторизацию по паре логин/пароль;
  • map to guest - параметр определяет способ обработки запросов. Значение bad user означает, что запросы с неправильным паролем будут отклонены, даже если такое имя пользователя существует;
  • wins support - включить или выключить поддержку WINS;
  • dns proxy - возможность проксирования запросов к DNS.

Настройки директорий выполняются в соответствующих секциях:

path - полный путь до директории на жестком диске;

guest ok - возможность доступа к каталогу без пароля (гостевой);

browsable - показывать ли каталог (“шару”) на сервере среди прочих. Если параметр установлен как “no”, то доступ будет возможен по полному пути, например ip-addresshidden_directory;

force user - пользователь от которого ведется работа с каталогом. Для повышения безопасности сервера, обычно используют nobody. Главное, не использовать пользователя root - это небезопасно.

writable - установка значения как “yes” позволяет пользователю выполнять действия над файлами внутри каталога - переименование, добавление, удаление, перемещение в подкаталог и копирование;

valid users - список пользователей у которых есть доступ к каталогу. Если пользователей несколько, их имена указываются через запятую. Если необходим доступ для пользователей принадлежащих группе, перед именем группы устанавливается символ ”at” @ (“собака”).

Важно! Имя директории общего доступа, отображаемое пользователям, равно имени секции в которой оно описано.

Подводим итоги

Процесс настройки Samba — это сложная и интересная задача. После оптимизации у меня получилось сократить время передачи файлов в среднем на 20%. Возможно, твои успехи в этом будут намного лучше: в некоторых источниках сообщается об ускорении аж до 200%.

Текущее состояние дел: Samba 3.5

Основным нововведением в версии 3.5 стала экспериментальная поддержка протокола SMB2, использующегося в системах Vista/Se7en. Благодаря значительному упрощению SMB2 (было более 100 команд, а стало 19) повысилась и производительность при передаче файлов. Среди прочих изменений:

  1. Обеспечена 100-наносекундная точность установки времени изменения или создания файлов (timestamp resolution). Для поддержки необходимо Linux-ядро минимум версии 2.6.22 и glibc 2.6.
  2. Добавлена поддержка шифрования соединений при выводе на печать через сервер CUPS. Включение производится через параметр «cups encrypt».
  3. В Winbind проведен рефакторинг кода с целью реализации асинхронной обработки запросов.

Например, «wbinfo -g» или «wbinfo -u» теперь выполняются в неблокирующем режиме.
Последняя стабильная версия на данный момент находится под номером 3.5.6 и вышла в свет 8 октября 2010 года.

Настройка Samba

Пожалуй нет ни одного офиса, в котором не применялись бы общие ресурсы локальной сети, будь то папки или принтеры. Крупные и средние компании используют возможности Active Directory, компании поменьше - используют штатные средства ОС Windows или Samba, но на серверах под управлением ОС Linux. Рассмотрим все случаи.

Что такое Samba?

Samba - серверное приложение, реализующее доступ клиентских терминалов к папкам, принтерам и дискам про протоколу SMB/CIFS.


Организация доступа к Windows с помощью модулей ядра smbfs и cifsfs

Драйвер файловой системы smbfs по своему поведению напоминает утилиту smbclient. Он выполняет аутентификацию на основе предоставленного имени и пароля и устанавливает соединение с сервером SMB/CIFS, после этого подключает соединение с сервером SMB/CIFS к точке монтирования файловой системы. Права владения точкой монтирования устанавливаются в соответствии с пользователем и группой Linux, установившей соединение, а права доступа к файлам в точке монтирования устанавливаются на основании umask пользователя, установившего соединение.

Фактически, управление доступом ко всем файлам и каталогам переходит под управление Linux, а на сервере SMB/CIFS все обращения будут рассматриваться как операции, выполненные единственным пользователем. То есть все пользователи, работающие с файлами сервера в точке монтирования будут рассматриваться сервером SMB как единственный пользователь.

Драйвер SMBFS имеет существенное ограничение - не поддерживает Unicode, что может приводить к проблемам, если имена файлов или каталогов содержат символы НЕ английского алфавита. Данный драйвер стоит использовать только в крайних случаях, например когда не удалось завести cifs. Давайте проведем несколько практических действий с расшаренным каталогом:

Из примера можно увидеть, что мы зашли под пользователем mc-sim и посмотрели на его umask, который равен 0022, что соответствует правам доступа 755, то есть rwxr-xr-x, что мы далее и увидим. Далее, закрываем сессию пользователя и оказываемся в оболочке текущего пользователя и пытаемся подключить подмонтировать сетевой каталог от имени пользователя, umask которого узнали выше (т.е. - mc-sim). Думаю, что формат команды mount вам ясен из моей статьи о основных командах Linux, но все же опишу указанные параметры: -t smbfs указывает нам использовать тип файловой системы - SMBFS, далее указываем путь к шаре в виде: //хост/шара, далее точка монтирования в формате /точка/монтирования, далее параметры монтирования (после ключа -o) - имя пользователя и пароль на удаленной системе (username и password соответственно) с правами которого будет происходить обращение к удаленным каталогам, далее UID и GID локальных пользователей, права которых будут учитываться при чтении/записи в примонтированный каталог. После монтирования удаленного каталога, мы можем спокойно обращаться к файлам на удаленном хосте, как к локальным и производить все доступные операции с файлами, как с локальной файловой системой. В том числе, копирование/удаление/перемещение, естественно, учитывая права локального и удаленного пользователей.

Хочется так же отметить, что запуская mount -t smbfs, фактически мы запускаем команду /usr/bin/smbmount, которая является символьной ссылкой на /sbin/mount.smbfs. smbmount считывает параметры из конфигурационного файла smb.conf (обычно находится или в /etc/smb.conf или /etc/samba/smb.conf). Формат выполнения команды smbmount совпадает с mount -t smbfs. Для корректной работы SAMBA в виде подключающегося клиента, минимально достаточно файла со следующим содержимым:

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

В данном примере команда очень похожа на приведенную чуть выше, за исключением, нескольких дополнительных передаваемых параметров. Первое - это credentials=/etc/samba/pw - позволяет указать файл с идентификационными данными для подключения к удаленному ресурсу. Содержимое данного файла так же указано в примере. Другие два новых параметра - это указание маски прав доступа для файлов и директорий, соответственно, которые складываются с системной umask и применяются к содержимому в директории.

Давайте теперь поговорим о cifs. Формат команды с применением модуля cifsfs точно такой же, как и smbfs, за исключением того, что параметр smbfs заменяется на cifs, а имя пользователя указывается не username, а просто user. Итого, команда выглядит как: mount -t cifs //host/share /mnt -o user=User,password=,uid=mc-sim,gid=mc-sim. Так же стоит обратить внимание, что fmask и dmask считается устаревшим параметром и заменен на file_mode и dir_mode соответственно. Ну и команда, при использовании модуля cifsfs запускается не /sbin/mount.smbfs, а /sbin/mount.cifs

Чтобы монтировать SMB/CIFS - ресурсы автоматически при загрузке, необходимо проверить работоспособность монтирования с помощью вышеуказанных команд с необходимыми параметрами. Если тесты прошли удачно, то необходимо добавить строку в файл /etc/fstab примерно следующего содержания:

, где //хост/расшаренный_ресурс - UNC-путь к расшаренному ресурсу, /каталог/монтирования - точка монтирования (естественно, она должна существовать), файловая_система - указание файловой системы (на текущий момент, считаю, что актуальна только cifs), опции_монтирования - строка опций, которая передавалась команде mount -t cifs, после ключа -o.

Резюме

На этом, на сегодня закончу. В следующей части повествования о SAMBA расскажу о взаимодействии Windows как клиента и Linux в виде файлового сервера SAMBA. Подведу маленький итог всему вышенаписанному. В сегодняшней статье я постарался рассказать об основах взаимодействия гетерогенных сетей Linux и Windows, немного рассказал об истории появления протоколов NetBIOS и взаимодействие хостов в сети TCP/IP по данному протоколу. Постарался изложить принципы взаимодействия между Linux и Windows и показал на практике, как взаимодействуют указанные системы. А так же описал, каким образом подключиться к расшаренным ресурсам Windows из Linux и заставить ОС Linux монтировать сетевые каталоги Windows при загрузке. Всем спасибо за внимание. Жду комментариев и дополнений!

Что нам готовит день грядущий: Samba 4.0

Проект Samba4 более пяти лет развивается параллельно с Samba3 и содержит почти полную переработку кода в контексте реализации работы в качестве Active Directory Domain Controller (совместимый с Win2k и выше) и приведения поддерживаемого SMB-протокола к полной совместимости с продуктами Microsoft. Реализованы встроенный LDAP-сервер, поддерживающий Active Directory правила; встроенный Kerberos KDC (Key Distribution Center) сервер; ACL в базе пользователей; виртуальная файловая система (Microsoft VFS) и так далее.

Основным нововведением разрабатываемой версии 4.0 станет возможность использования Samba-сервера в качестве контроллера домена Active Directory. Данная возможность реализована в версиях 3.x, но в сильно урезанном виде. После трех лет разработки первый технический релиз 4.0.0TP1 был выпущен в январе 2006 года. Впоследствии альфа-релизы появляются регулярно. Последняя версия 4.0.0-alpha14 выпущена 24 декабря 2010 года.

Пилим конфиг

В конфиге Samba доступно несметное количество опций, при желании их все можно найти в справочной странице smb.conf(5). Поэтому для простоты приведу минимальный рабочий конфиг, а далее расскажу про наиболее интересные параметры, которые можно в него добавить:

$ cat /etc/samba/smb.conf
[global]
; Имя рабочей группы
workgroup = WRKGRP
; Уровень безопасности
security = SHARE
[myshare]
; Абсолютный путь к разделяемому ресурсу
path = /usr/somewhere/shared
; Доступ только на чтение
read only = Yes
; Доступ будет предоставлен с правами гостевого
пользователя (nobody)
guest ok = Yes

Функциональность этого конфига сводится к расшариванию папки /usr/somewhere/shared для всех пользователей рабочей группы WRKGRP без возможности записи. Конфиг состоит из нескольких секций (в данном случае двух), в секции global определяются общие параметры сервера, остальные секции могут называться произвольными именами (за исключением имен специальных секций), и в них задаются настройки для каждого разделяемого объекта (в примере использован объект myshare).

Для расшаривания принтеров существует специальная секция printers, которая в большинстве случаев имеет следующий вид:

[printers]
path = /usr/spool/public
guest ok = yes
printable = yes

Для автоматической активации принтеров в секцию global также следует добавить строку «load printers = yes».

Другие важные параметры конфига:

  1. security— определяет, каким образом клиенты соединяются с сервером. В примере выше этот параметр был установлен в значение SHARE — для такого соединения не будут запрашиваться имя пользователя и пароль. В большинстве случаев используется значение USER, которое подразумевает ввод логина и пароля существующего пользователя для доступа к шаре. Кроме того, у этого пользователя должны быть соответствующие права на содержимое папки.
  2. hosts allow— список хостов через пробел, с которых разрешен доступ к расшаренным ресурсам. Допускается задавать символические имена, IP-адреса или диапазоны адресов, например элемент вида «150.203.» разрешает соединения со всех IP-адресов подсети 150.203.0.0/16. Если параметр не задан, то соединения разрешены для всех. Параметр может также применяться к отдельным секциям, позволяя гибко разграничивать права доступа.
  3. log file— путь записывания логов. Здесь стоит отметить возможность задания переменных в конфиге: например, значение «/var/log/ samba/%m.log» позволит создавать отдельный лог-файл для каждой подключающейся машины, что весьма полезно для мониторинга активности отдельных клиентов.
  4. include— позволяет подключать произвольные конфиги. Наиболее эффективен при использовании с переменными, например «%m», в таком случае для разных клиентов можно задавать различные настройки: include = /usr/local/samba/lib/smb.conf.%m.
  5. interfaces— список сетевых интерфейсов, на которых будут висеть демоны Samba. По умолчанию задействуются все интерфейсы, кроме lo. Имена нужно задавать через пробел, либо указывать запись вида «адрес сети/маска».
  6. guest only— если этот параметр выставлен в «yes», то доступ к разделяемому ресурсу возможен только с правами гостя.
  7. invalid users— задает через пробел список пользователей, которым запрещен доступ к разделяемым ресурсам. Здесь же можно задать группу UNIX/NIS, использовав в качестве префикса «@» или «+» соответственно.
  8. create mask— маска прав доступа для созданных файлов. По умолчанию равна 0744, что означает сброс прав на исполнение для пользователей группы и остальных. Задается в секции разделяемого ресурса.
  9. directory mask— аналог предыдущей опции, только для директорий.
  10. browseable — определяет, будет ли объект отображаться в списке доступных общих ресурсов в сетевом окружении и в списке просмотра.

[public]
create mask = 0400
directory mask = 0700
path = /export/public
writeable = yes
[archive]
path = /export/archive
writeable = no
browseable = no

Исходные данные (подготовка хостов для осуществления общего доступа)

Сначала я опишу возможность организации доступа к ресурсам на Windows (Сервер) со стороны Linux (Клиент). Для организации данного взаимодействия нам необходимо наличие соединения по протоколу TCP/IP между хостами (то есть присвоен корректный IP, заданы правильные маски, в каждой системе должен быть корректный файл hosts и правильно настроена служба ДНС, если таковая используется), а так же наличие расшаренного ресурса в системе Windows. В примере, машина Windows будет иметь IP 192.168.2.1 и имя host, Linux - 192.168.2.2 и имя samba. Рабочую группу будем использовать WORKGROUP. Ресурс в общем доступе будет называться share.

Мы начнем с самого простого примера и предположим, что DNS для разрешения имен не используется и машины имеют статичные IP-адреса. Поэтому нам необходимо в /etc/hosts добавить следующую строку:

Утилитой ping мы проверили возможность разрешения имени и связь с удаленным хостом Windows. И как можно понять - все работает.

Бразильский танец с бубном: Настройка, оптимизация работы и обеспечение безопасности Samba-клиента

В наши нелегкие времена, когда большинство пользователей сидит под виндой, обычному линуксоиду приходится подстраиваться под обстоятельства. Файл уже не передашь с помощью nc или NFS, а документ не распечатаешь удаленно через CUPS. Остается только использовать Samba, про тотальную настройку и оптимизацию которой я сейчас и расскажу.

Основы взаимодействия Windows и Linux (протоколы и другие особенности)

В Linux для организации доступа к удаленной системе достаточно знать лишь IP адрес. Вместе с системой DNS, IP адресация представляет собой вполне законченный механизм взаимодействия между системами Linux. В Windows сложилась другая ситуация. Изначально, сети Windows находились в совершенно другом пространстве имен, это было следствием попытки организовать взаимодействие без участия протокола TCP/IP. Для чего был разработан родной для Windows протокол NetBEUI (Network Basic Extended Interface - основной расширенный сетевой пользовательский интерфейс). Не углубляясь в принципы сетевого взаимодействия можно сказать, что NetBEUI состоит из протокола SMB, транспортируемого по протоколу NetBIOS и обернутого в адресуемый протокол LLC, который является подуровнем канального уpовня. Из сказанной каши можно с трудом понять, что NetBEUI не принадлежит какому-либо из уровней модели OSI. В итоге, данный протокол получился не маршрутизируемым и малоэффективным.Через некоторое время, на основе NetBEUI был разработан протокол NetBIOS Frame (NBF) protocol (NetBIOS over IEEE 802.2 LLC). Следующим шагом была реализация NBT (NetBIOS over TCP/IP) .

Протокол NetBIOS (точнее SMB) обладает своим собственным пространством имен. Все имена могут иметь длину до 16 алфавитно-цифровых символов. При этом, использовать имена, начинающиеся с цифры не приемлемо для реализации протокола NetBIOS over TCP/IP, т.к. данное имя будет интерпретироваться как IP-адрес. В NetBIOS существует понятие Рабочая группа (в последствии замененное понятием домен). Компьютеры, имеющие одинаковое имя рабочей группы принадлежат одной группе.

NetBIOS over TCP/IP использует два основных протокола и два порта 139/tcp (порт службы сеанса NetBIOS) и 137/udp (порт сервера имен NetBIOS). Порт UDP используется для разрешения имен на основе широковещательных рассылок, что в большой сети порождает большой трафик. Чтобы уменьшить большой широковещательный трафик, необходимо использовать сервер имен NetBIOS (в Microsoft данный сервер получил название WINS - Windows Internet Naming Service). WINS для NetBIOS over TCP/IP это как DNS для TCP/IP.

С появлением Win2k и Active Directory, Microsoft полностью отказалась от NetBIOS. Вместо NetBIOS стал использоваться SMB через TCP/IP (без использования протокола NetBIOS, его же называют NetBIOS-less). Данный протокол позволял отказаться от WINS и резолвить имена с помощью DNS, используя связку системы безопасности Kerberos и службу каталогов Active Directory. Active Directory - это LDAP каталог (аналог OpenLDAP), которому я обязательно посвящу статью.

Чтобы SAMBA работала без поддкржки NetBIOS, необходимо, чтобы система была членом домена Active Directory. Если система НЕ член домена, то отключать поддержку NetBIOS не стоит!

Собственно, протокол SMB и дал начало названия проекта Samba. Через некоторое время SMB был переименован в CIFS (Common Internet File System). Samba версии 2 может использоваться только совместно с протоколом NetBT (NetBIOS over TCP/IP). Версия Samba 3 способна обеспечивать совместимость по протоколу SMB через TCP/IP (NetBIOS-less TCP/IP) и совместима с Active Directory. При использовании SMB через TCP/IP используется порт 445/tcp, а так же 135/tcp для обеспечения взаимодействия по протоколу DCE RPC (удаленные вызовы процедур).

При установке и настройке Samba (без членства в домене Active Directory) желательно использовать демон Samba как сервер WINS или как член сервера WINS для снижения нагрузки мультикаст трафика в сети.

Shit happens

При работе с Samba могут вылезти различного рода косяки и грабли. примеры, для распространенных из них. Для решения проблемы с отображением кириллических символов рекомендуется выставить следующие параметры в секции global:

dos charset = cp866
unix charset = UTF8
display charset = UTF8

А если в твоей системе нет и не планируется развертывание серверов печати CUPS, то в логах периодически будут появляться ошибки по этому поводу. В таком случае лучше отключить поддержку печати в Samba, добавив в секцию global следующие строки:

load printers = no
show add printer wizard = no
printing = none
printcap name = /dev/null
disable spoolss = yes

WinXP — достаточно древняя и глючная система, но, тем не менее, множество людей остаются ей верны. При использовании разделяемых ресурсов эта операционка открывает соединения сразу к двум портам: 139/tcp и 445/tcp. Если ей это удается, то на 139-м порту соединение она разрывает, что приводит к появлению в логах записи «getpeername failed. Error was Transport endpoint is not connected».

Чтобы ошибка не возникала, необходимо добавить в секцию global строчку «smb ports = 139».

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

Ликвидация безграмотности

Samba — это свободная программная реализация протокола SMB/ CIFS. Этот протокол, нэйтивно поддерживаемый семейством ОС Windows, позволяет получать удаленный доступ к файлам и сетевым принтерам. В винде рядовой пользователь может повлиять лишь на минимум настроек, связанных с доступом, остальные же опции глубоко скрыты в реестре либо отсутствуют вовсе. В никсах протокол SMB не является обязательным и не всегда доступен из коробки.


Для его использования требуется установить клиентскую (для доступа к уже расшаренным файлам и принтерам) и серверную (для расшаривания у себя на компе) части. После установки следует создать главный конфигурационный файл (если его нет) и запустить стартовый скрипт для активации серверной части. Например, для Arch Linux команды будут выглядеть так:

GUI в помощь

С помощью SWAT (Samba Web Administration Tool) можно конфигурировать самбу прямо из браузера. Интерфейс утилиты не выдерживает никакой критики, но она полезна с точки зрения тонкой настройки, поскольку показывает все возможные параметры конфига и дает контекстные подсказки к каждому из них. Для корректной работы необходимо доустановить пакет xinetd:

Затем привести файл /etc/xinetd.d/swat к следующему виду:

service swat
type = UNLISTED
protocol = tcp
port = 901
socket_type = stream
wait = no
user = root
server = /usr/sbin/swat
log_on_success += HOST DURATION
log_on_failure += HOST
disable = no
>

А также добавить в файл /etc/hosts.allow строку «swat:127.0.0.1». После чего запустить демон xinetd:

/etc/rc.d/samba start

В некоторых системах следует запустить два демона: smbd (файловый) и nmbd (демон имен). Собственно, за расшаривание папок и прочие функции отвечает серверная часть Samba, а за доступ к уже расшаренным на других компах — консольная утилита smbclient. В качестве фронт-энда к ней выступает часть функционала распространенных файловых менеджеров, таких как Dolphin или Nautilus.


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

  1. smbclient— клиент, который может общаться с SMB-сервером. Он предлагает интерфейс, схожий с интерфейсом программы ftp. Среди его возможностей — получение файлов с сервера на локальную машину, перемещение файлов с локальной машины на сервер, получение списка папок с сервера и так далее.
  2. smbtree— SMB-обозреватель в текстовом режиме. Аналог «Обозревателя сети», существующего на компьютерах под управлением Windows. Отображает дерево всех доменов, сервера этих доменов и общие ресурсы на серверах.
  3. mount.cifsи umount.cifsотвечают за монтирование и размонтирование файловой системы Linux CIFS. Эти программы работают только в Linux, ядро должно поддерживать файловую систему CIFS. Как вариант, для этих целей можно использовать команду mount с аргументом ‘-t cifs’, либо ‘-i’ (для размонтирования).

В старые версии пакета Samba входили утилиты smbmount и smbumount, которые, по сути, заменены на mount.cifs и umount.cifs.

Тонкая настройка и оптимизация

Samba предоставляет нам широкие возможности по оптимизации. Одной из них является директива sockets options. Однако не существует универсального способа добиться максимальной производительности, так как все сети различны (тип соединения, тип оборудования и так далее) Если ты хочешь увеличить скорость передачи файлов в своей сети, то придется поэкспериментировать. В своих рассуждениях я буду опираться на особенности реализации интерфейса сокетов в Linux (об этом можно почитать в руководстве socket(7)). Первым делом добавим в конфигурацию Samba следующую запись:

[global]
socket options = TCP_NODELAY IPTOS_LOWDELAY
SO_RCVBUF=65536 SO_SNDBUF=65536

  1. TCP_NODELAYотвечает за задержку пакетов. Начиная с Samba 2.0 данный параметр устанавливается по умолчанию, в более старых версиях его установка может привести к ускорению работы на 30%.
  2. IPTOS_LOWDELAY— еще один параметр для оптимизации пропускной способности. Но он затрагивает работу роутеров и конечных систем, а не сервера. Этот параметр должен использоваться вместе с TCP_NODELAY и может обеспечить прирост производительности до 20%.
  3. Опции SO_RCVBUFи SO_SNDBUFопределяют максимально возможный размер буферов приема и передачи Samba. Уменьшение размера буферов приводит к увеличению фрагментации пакетов, увеличение размера — к уменьшению фрагментации.

Чтобы найти оптимальные параметры для конкретных условий, надо провести эксперименты по передаче тестового файла размером 100 Мб и 100 тестовых файлов по 1 Мб, затем оценить время выполнения операций. Для создания 100-мегабайтного тестового файла выполни команду:

$ dd if=/dev/zero of=testfi le count=10240 bs=10240

Для создания 100 файлов размером 1 Мб поможет следующий скрипт:

Далее нужно примонтировать шару:

$ mount -t cifs -o guest //192.168.1.101/share
/home/user/share/

И провести копирование с замером времени:

$ time cp /home/user/share/testfi le /home/user/

Результаты, получившиеся у меня, можешь наблюдать на рисунке (шкала Y — время копирования в секундах). Примечание: сервер Samba имеет привычку кэшировать передаваемые данные, поэтому рекомендую перезапускать его при каждом новом тесте. В конфиге smb.conf можно задать ряд параметров, которые так или иначе будут сказываться на производительности:

  1. hide files— в этом параметре задается список файлов или директорий, которые будут скрыты при просмотре разделяемого ресурса (но будут доступны при прямом обращении). Список задается через знак «/», и чем список длиннее, тем больше будут задержки при просмотре разделяемого ресурса, так как все файлы прогоняются на соответствие каждого элемента списка. Без крайней необходимости лучше не использовать.
  2. strict sync— установленный в «yes», этот параметр заставляет сервер при каждом новом пакете с установленным битом sync сбрасывать дисковые буферы непосредственно на диск, что существенно снижает производительность при работе с некоторыми приложениями, но при установке в «no» появляется некоторая вероятность потери данных во время сбоя.
  3. sync always— включение этого параметра означает сброс содержимого каждого нового пакета на диск, минуя дисковые буферы и вне зависимости от бита sync. Весьма пагубно сказывается на производительности, поэтому включать рекомендуется только если сервер Samba работает нестабильно.
  4. wide links— параметр определяет, могут ли использоваться символические ссылки в разделяемых ресурсах. Выключение этого параметра приведет к дополнительному системному вызову при открытии каждого файла.
  5. deadtime— значением этого параметра является время бездействия в минутах, по истечении которого соединение с клиентом будет разорвано. По умолчанию установлено в 0, то есть соединение с клиентом не будет разорвано никогда. При большом количестве клиентов это может привести к проблемам в работе, поэтому рекомендую изменить значение на 15.
  6. max connections— максимальное число одновременных подключений к серверу. По умолчанию выставлено в 0 (то есть без ограничений), что может привести к отказу в обслуживании на слабых системах или в случае намеренной атаки. В большинстве случаев значения 10 вполне хватает.
  7. log level— детализация логов, задается числом от 0 до 10. Запись на диск — весьма затратная операция, поэтому не рекомендуется выставлять этот параметр в значение больше 2, за исключением отладочных ситуаций.
  8. syslog— параметр отвечает за попадание событий в системный syslog. По умолчанию равен 1, что означает запись ошибок и предупреждений. Можно понизить до 0, тогда будут записываться только ошибки.

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

aio read size = 16384
aio write size = 16384
aio write behind = true

Организация доступа к Windows с помощью клиента smbclient

Итак, в приведенном листинге нам удалось подключиться к шаре \\host\share от пользователя Администратор с паролем 12345. Мы получили содержимое каталога (причем русские символы прекрасно отображаются), перешли в подкаталог ime, получили его содержимое и получили на локальную машину файл SPTIP.dll, командой get (команда как и у FTP клиента). Вы, наверно, заметили, что в утилите smbclient путь к шаре указывается с прямым слешем, хотя в Windows принято задавать путь с обратным слешем. Утилита smbclient довольно гибка и используется как часть утилиты smbprint, для передачи потока данных, отправленных на принтер.

/etc/rc.d/webmin start

Читайте также: