Изучаем Linux, 302 (смешанные среды): Kонфигурация Samba

Настройка Samba для выполнения различных задач

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

Шон Уолберг, старший сетевой инженер, P.Eng

Шон Уолберг работал с Linux- и UNIX-системами с 1994 года в академических, корпоративных и "провайдерских" кругах. Он широко освещает вопросы системного администрирования в течение нескольких последних лет. С ним можно связаться по адресу sean@ertw.com.



24.05.2012

Об этой серии

Эта серия статьей поможет вам освоить задачи администрирования операционной системы Linux. Вы можете использовать материалы этих статей для подготовки к экзаменам программы LPIC третьего уровня (LPIC-3).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-3. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит текущие (по состоянию на ноябрь 2010 года) цели экзаменов сертификации LPIC-3.

В этой статье рассматриваются следующие темы:

  • Структура конфигурационного файла сервера Samba.
  • Использование конфигурационных параметров и переменных Samba.
  • Идентификация ключевых портов TCP/UDP, используемых в Server Message Block (SMB)/Common Internet File System (CIFS).
  • Настройка журналирования Samba.
  • Отладка и устранение неисправностей в работе Samba.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 302 (специализация "Смешанные среды") и содержит материалы цели 312.1 темы 312. Цель имеет вес 6.

Предварительные требования

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


Конфигурационный файл Samba

О факультативном экзамене LPI-302

Как и многие другие программы, программа сертификации Linux Professional Institute (LPIC) предусматривает различные уровни сертификации, где для получения каждого последующего уровня необходимо обладать более глубокими знаниями и практическим опытом. Экзамен LPI-302 – это факультативный экзамен третьего уровня программы LPIC, требующий продвинутых знаний в области системного администрирования Linux.

Для получения сертификата LPIC третьего уровня (LPIC-3) необходимо успешно сдать два экзамена первого уровня (101 и 102), два экзамена второго уровня (201 и 202), а также базовый экзамен 301 третьего уровня (LPIC-3). Если вы получили сертификат третьего уровня, вы можете сдавать факультативные экзамены по определенным специализациям, например, экзамен LPI-302.

Как и большинство других демонов UNIX, Samba настраивается с помощью простых текстовых файлов, которые можно просматривать в обычном текстовом редакторе (в отличие от двоичных файлов, работа с которыми требует использования графических средств). Самый важный конфигурационный файл называется smb.conf и содержит все параметры, необходимые Samba для работы в конкретном рабочем окружении.

Примечание. Не смотря на то, что с файлом smb.conf можно работать в текстовом редакторе, команда разработчиков Samba создала Web-инструмент под названием Samba Web Administration Tool. Также существуют и другие альтернативные инструменты, например, webmin. Важно помнить о том, что файл smb.conf можно редактировать как до, так и после использования этих инструментов, поскольку вся работа происходит с обычным текстовым файлом.

Конфигурационный файл Samba имеет достаточно простой формат и может содержать три различные конструкции:

  • Разделы – группируют параметры по различным независимым областям. Например, все параметры общих файловых ресурсов содержатся в отдельном разделе.
  • Параметры – представляют собой пары вида "ключ-значение". Ключи – это хорошо знакомые всем атрибуты, например, "read only" ("только для чтения").
  • Комментарии – позволяют оставлять заметки в конфигурационном файле, не влияющие на конфигурацию, например, описания файловых ресурсов.

Разделы

Создайте ваш собственный канал

Вы можете создать ваш собственный RSS, Atom или HTML канал обновлений и получать уведомления о новых или обновленных статьях нашего сайта. Для этого перейдите на страницу developerWorks RSS feeds, выберите зону Linux, установите флажок Статьи и введите в качестве ключевой фразы Linux Professional Institute, после чего выберите требуемый тип канала.

Разделы группируют параметры по различным независимым областям. Каждый раздел начинается с названия, заключенного в квадратные скобки ([]). Далее раздел продолжается до тех пор, пока не начнется новый раздел, или до конца файла.

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

  • global. Все параметры, содержащиеся в этом разделе, влияют на работу всего сервера. При необходимости параметры раздела global можно переопределить на уровне общего ресурса.
  • homes. Этот раздел является шаблоном для домашних директорий пользователей; Samba самостоятельно сопоставляет имена пользователей в соответствии с настройками этого раздела, избавляя от необходимости настраивать отдельный общий ресурс каждый раз, когда необходимо предоставить пользователю доступ к его домашней директории.
  • printers. Этот раздел аналогичен разделу homes, но используется для принтеров.

Если раздел называется по-другому, то считается, что он относится к общему файловому ресурсу или принтеру.

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

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

Параметры

Параметры имеют форму ключ = значение, т. е. каждому ключу присваивается значение. Все ключи описаны на man-странице smb.conf. Искусство конфигурирования Samba заключается, по большей части, в том, чтобы понять, какие ключи необходимо использовать для получения требуемого результата и какие значения им присваивать.

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

Если значение параметра не помещается в одной строке, то все содержащие его строки за исключением последней должны заканчиваться обратным слешем (\), так же, как и в командной оболочке UNIX.

Комментарии

Комментарии начинаются с символа точки с запятой (;) или символа решетки (#). Комментарии можно использовать для пояснения того, почему был использован тот или иной параметр, отслеживания изменений в конфигурации или обозначения границ разделов.

Пример конфигурации

В листинге 1 показаны различные фрагменты конфигурационного файла smb.conf.

Листинг 1. Пример конфигурационного файла Samba
# Это комментарий
; И это тоже
# Не забудьте внести все общие ресурсы в Wiki! -Opsteam
[global]
  workgroup = BIGCO
  # %v замещается версией Samba
  server string = Samba Server Version %v
  # По умолчанию все файлы, начинающиеся 
с точки будут иметь атрибут "скрытый"
  hide dot files = yes

# Домашние директории берутся из файла паролей UNIX
# этот раздел будет использоваться для всех пользователей
[homes]
  comment = Home directories
  # файлы, начинающиеся с точки, будут скрыты,
 т. к. это определено в разделе глобальных ключей

[printers]
  comment = System printers
  printable = yes

# Общедоступный ресурс
[projecta]
  path = /var/spool/projects/projecta
  # Переопределим глобальное значение
 для файлов, начинающихся с точки
  hide dot files = no

Эта конфигурация имеет следующие особенности:

  • В этой конфигурации используются два различных способа вставки комментариев. В первом случае комментарии начинаются с символа решетки, во втором случае – с символа точки с запятой.
  • В этой конфигурации определен один общий ресурс с именем projecta. Все остальные общие ресурсы будут созданы автоматически на основе пользователей и принтеров, определенных в системе
  • Частью параметра server string является макрос %v. При запуске вместо конструкции %v будет отображаться номер версии Samba.
  • В разделе глобальных переменных параметр hide dot files установлен в yes, но в разделе общего ресурса projecta он установлен в no. Для конфигурации домашних директорий используется раздел homes, при этом все файлы в этих директориях, начинающиеся с точки (например, .profile) будут скрыты. Файлы проекта projecta, начинающиеся с точки, будут отображаться.

Работа Samba в сетевом окружении

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

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

  • Службы общего доступа к файлам и принтерам – обеспечивают сетевой доступ к файлам и принтерам для устройств, на которых запущены эти службы.
  • Службы имен – службы разрешения имен, необходимые для работы в сетях Microsoft.
  • Доменные службы – позволяют Samba взять на себя различные роли сервера Microsoft, например, legacy domain controller, и обеспечивают интеграцию с новыми серверами Active Directory Domain Services (AD DS).

Общий доступ к файлам и принтерам

Общий доступ к файлам и принтерам реализован посредством smbd – одного из демонов Samba. Когда Microsoft впервые реализовала поддержку IP-сетей, для предоставления общего доступа к файлам она использовала механизм NetBIOS over TCP. Этот метод заключался в инкапсуляции трафика NetBIOS в сеанс TCP-протокола с использованием TCP-порта 139.

Протокол NetBIOS выполняет несколько функций. TCP-порт 139 используется только для служб сеансов, которые выполняют передачу файлов и сообщений. Службы имен не работают на этом порту.

Хотя механизм NetBIOS over TCP работает, существует частичное наложение между службами сеансов и надежностью, предоставляемыми с одной стороны NetBIOS, а с другой стороны – протоколом TCP. Путем некоторых изменений стало возможно обеспечить работу SMB/CIFS непосредственно поверх TCP. Этот метод известен как прямая передача и используется для упрощения протокола. Прямая передача использует для работы TCP-порт 445.

Когда протокол NetBIOS был удален из стека протоколов, перед Microsoft встала задача найти другой способ разрешения имен. Естественным выбором стала система доменных имен DNS (Domain Name System), и именно поэтому DNS лежит в основе доменных служб AD DS.

По умолчанию Samba прослушивает порты 139 и 445. Можно использовать другие порты, изменив глобальный параметр smb ports. Например, smb ports = 445 указывает Samba прослушивать только порт 445. Вы можете настроить Samba на прослушивание любого порта, но в этом случае клиентам, которые хотят подключиться к серверу, необходимо сообщить о том, что они должны использовать нестандартный порт.

Если вы не знаете точно, какой порт прослушивает Samba, то это можно выяснить с помощью команды netstat. В листинге 2 приведен практический пример ее использования.

Листинг 2. Использование команды netstat для поиска портов, прослушиваемого SBM
# netstat -antp | grep smbd
# netstat -antp | grep smb
tcp   0  0 :::445                    :::*                       LISTEN      2830/smbd
tcp   0  0 ::ffff:192.168.1.143:445  ::ffff:192.168.1.147:4724  ESTABLISHED 2877/smbd

В листинге 2 продемонстрирован запуск команды netstat, вывод которой был отфильтрован командой grep для поиска строки smb. Использовались следующие параметры netstat : показать все (-a) соединения TCP (-t) в числовом (-n) формате вместе с именами процессов (-p). В результате мы получили две строки. Первая строка содержит слово LISTEN, которое означает, что демон прослушивает порт в ожидании входящих подключений. В нашем случае прослушивается порт 445. Вторая строка содержит слово ESTABLISHED, которое означает, что с адреса 192.168.1.147 было установлено соединение с портом 445 локального хоста (192.168.1.143). Таким образом, листинг 2 позволяет сделать вывод о том, что smbd прослушивает только порт 445 и что в данный момент подключен один клиент.

Службы имен

В NetBIOS включены службы имен, отвечающие за просмотр сетевого окружения и разрешение имен. Например, путем отправки запроса службе имен, работающей на UDP-порту 137, узлу SERVER1 будет сопоставлен его IP-адрес. Для просмотра и выбора вспомогательных ролей, таких как главный обозреватель, используется UDP-порт 138, известный также как порт службы датаграмм. Службы имен реализованы посредством демона nmbd.

Важно отметить, что вместо TCP-порта службы имен используют UDP-порт, поскольку UDP-пакеты не устанавливают соединений и могут передаваться в широковещательных запросах сразу всем узлам сети, а не каждому отдельному узлу в одноадресной передаче. Поддержке широковещательных запросов протоколом UDP позволяет упростить работу служб имен NetBIOS.

Третья версия Samba не содержит каких-либо параметров для управления номерами портов, прослушиваемых демоном nmbd, однако в четвертой версии Samba появились глобальные параметры nbt port и dgram port, которые управляют портами службы имен и службы датаграмм, соответственно.

Чтобы просмотреть список портов, открытых демоном nmbd, можно использовать команду, подобную команде из листинга 2:

Листинг 3. Просмотр списка портов, прослушиваемых nmbd
# netstat -anup | grep nmbd
udp        0      0 192.168.1.255:137       0.0.0.0:*        2975/nmbd
udp        0      0 192.168.1.143:137       0.0.0.0:*        2975/nmbd
udp        0      0 0.0.0.0:137             0.0.0.0:*        2975/nmbd
udp        0      0 192.168.1.255:138       0.0.0.0:*        2975/nmbd
udp        0      0 192.168.1.143:138       0.0.0.0:*        2975/nmbd
udp        0      0 0.0.0.0:138             0.0.0.0:*        2975/nmbd

Помимо того, что вместо демона smbd был указан демон nmbd, команда из листинга 3 ищет не TCP-порты, а UDP-порты, для чего используется опция -u команды netstat. Результатом выполнения команды является список, показывающий, что nmbd прослушивает порты 137 и 138 на различных сетевых интерфейсах, а также на широковещательном адресе 192.168.1.255. Оба порта службы имен используют для работы как прямые взаимодействия между узлами сети, так и широковещательные взаимодействия.

Доменные службы

Команда разработчиков Samba постоянно усовершенствует свой программный продукт, все более тесно интегрируя его с сетями Microsoft и реализуя функции, которые позволили бы Samba полностью заменить инфраструктуру Microsoft. Для этого Samba должна уметь имитировать соответствующие службы сетевой инфраструктуры.

В большинстве этих служб так или иначе задействованы протокол безопасности Kerberos и протокол LDAP (Lightweight Directory Access Protocol). Эти протоколы будут более подробно рассмотрены в следующих статьях, а сейчас достаточно просто знать о том, что Samba может не просто предоставлять общий доступ к файлам, а делать нечто большее.

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

В таблице 1 перечислены все порты, которые использует Samba для предоставления общего доступа к файлам.

Таблица 1. Итоговый список портов, используемых Samba
ПортПротоколСлужбаДемонОписание
137UDPnetbios-nsnmbdСлужбы имен NetBIOS
138UDPnetbios-dgmnmbdСлужбы датаграмм NetBIOS
139TCPnetbios-ssnsmbdNetBIOS over TCP (службы сеансов)
445TCPmicrosoft-dssmbdNetBIOS over TCP (службы сеансов)

Названия в столбце Служба – это общеизвестные имена служб, перечисленные в файле /etc/services. Файл services помогает людям и приложениям сопоставлять имена служб и номера используемых ими портов. Несмотря на то, что многие службы резервируют как TCP-, так и UDP-порты, приложениям не обязательно использовать оба этих типа портов. Такое резервирование устраняет возможные конфликты в тех ситуациях, когда две различные службы пытаются использовать один и тот же номер порта для различных протоколов.

Нелишне также отметить, что вовсе не обязательно использовать именно те номера портов и имена служб, которые присутствуют в файле /etc/services. Если вы можете сообщить об этом клиентам, то можно запускать демонов на различных портах, отличных от портов по умолчанию. Например, можно запускать Samba на портах 5137-5139 и 5445, если использующие ее клиенты знают об этом и не будут использовать стандартные порты.


Устранение неисправностей в работе Samba

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

Проверка конфигурационного файла

Если Samba не запускается или вы просто хотите проверить правильность конфигурационного файла, то вам поможет утилита testparm. Эта утилита проверяет корректность файла smb.conf. В листинге 4 показан результат проверки файла, содержащего ошибку, с помощью testparm.

Листинг 4. Проверка файла smb.conf, содержащего ошибку, с помощью testparm
# testparm
Load smb config files from /etc/samba/smb.conf
Unknown parameter encountered: "hide dto files"
Ignoring unknown parameter "hide dto files"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        passdb backend = tdbsam
        log file = /var/log/samba/log.%m
        max log size = 50
        cups options = raw

<< rest of the output omitted >>

Вывод testparm начинается с указания местоположения файлов. Если вы хотите указать другой файл, то передайте его имя в качестве параметра командной строки, как показано в следующем примере:

testparm /home/me/smb.conf

Далее testparm сообщает о неверном параметре с именем hide dto files. На самом деле этот параметр должен называться hide dot files.

После обработки конфигурационного файла выводится информация о роли сервера и краткая версия конфигурационного файла. В этой версии отсутствуют комментарии, и она приведена к единому формату; иногда это позволяет обнаружить ошибку, которую вы пропустили, просматривая файл smb.conf в текстовом редакторе.

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

По умолчанию testparm выводит только те параметры конфигурации, которые определены в файле smb.conf. Если вы подозреваете, что в каком-то месте используются значения по умолчанию, то опция -v указывает testparm выводить также значения по умолчанию.

С помощью testparm можно также выводить только определенный раздел или значение определенного параметра. В листинге 5 показано, как с помощью testparm посмотреть значение параметра security mask.

Листинг 5. Вывод значения отдельного параметра с помощью testparm
# testparm -s --parameter-name "security mask"
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
0777

В листинге 5 параметр -s указывает testparm не ожидать пользовательского ввода в промежутке между анализом файла smb.conf и выводом его содержимого на экран. Конструкция --parameter name "security mask" запрашивает значение параметра security mask. Результатом является значение 0777, которое является значением по умолчанию. В этом режиме необязательно указывать опцию -v для вывода значений по умолчанию.

Подключение в качестве клиента

Вместо того, чтобы запускать графическую оболочку пользователя и самостоятельно пробовать выполнять все действия, можно проверить работу Samba с помощью командной строки вашего компьютера. Первая и самая простая проверка заключается в том, чтобы суметь подключиться к порту Samba. Проще всего сделать это с помощью утилиты telnet, как показано в листинге 6.

Листинг 6. Проверка подключения с помощью утилиты telnet
# telnet bob 139
Trying 192.168.1.134...
telnet: connect to address 192.168.1.134: Connection refused

В листинге 6 пользователь root подключается к порту 139 сервера bob. Для проверки прямого подключения SMB можно использовать порт 445. Результатом является сообщение Connection refused, которое говорит о том, что либо демон не прослушивает указанный порт по этому адресу, либо подключение блокируется брандмауэром. То же самое могут означать и другие сообщения, например, No route to host или Connection timed out.

Обычно клиенты подключаются к серверу по его имени, а не по IP-адресу. Если с помощью telnet вы подключаетесь к серверу по имени, а не по IP-адресу, то обратите особое внимание на возвращаемый IP-адрес. В вышеприведенном примере серверу bob был сопоставлен IP-адрес 192.168.1.134. Иногда в DNS могут содержаться ошибочные записи, в результате чего клиенты подключаются по неверному адресу.

Если вы не используете DNS для разрешения Windows-имен, то можно использовать команду nmblookup для поиска имен NetBIOS. В листинге 7 показан запрос для сервера bob.

Листинг 7. Выполнение запроса NetBIOS-имени для сервера bob
# nmblookup bob
querying bob on 192.168.1.255
192.168.1.138 bob<00>

Согласно листингу 7, сервер bob имеет IP-адрес 192.168.1.138, а не 192.168.1.134, как было определено в листинге 6. Этот результат указывает на проблему с DNS, особенно если порты 139 и 445 отзываются по адресу 192.168.1.138.

Другая проверка заключается в том, чтобы выяснить, не запрещен ли доступ к определенному хосту в конфигурационном файле. Для этого мы снова используем утилиту testparm, как показано в листинге 8.

Листинг 8. Проверка доступа с помощью testparm
# testparm /etc/samba/smb.conf  seanspc 192.168.1.147
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Deny connection from seanspc (192.168.1.147) to homes
Deny connection from seanspc (192.168.1.147) to printers
Deny connection from seanspc (192.168.1.147) to public

Брандмауэр или приложение?

Существует множество способов заблокировать подключение к компьютеру, однако все их можно разделить на две категории: сеть и приложение. Заблокировав доступ на сетевом уровне с помощью корпоративного или персонального (например, iptables) брандмауэра, вы увидите, что подключение telnet из листинга 6 отклоняется или разрывается по таймауту. Это происходит потому, что пакеты никогда не доходят до приложения Samba.

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

В листинге 8 программе testparm передаются три аргумента:

  • Путь к конфигурационному файлу Samba.
  • NetBIOS-имя проверяемого компьютера.
  • IP-адрес проверяемого компьютера.

Из листинга 8 видно, что для указанного компьютера доступ ко всем общим ресурсам запрещен. В этом режиме testparm не выполняет фактического подключения к компьютеру, а вместо этого обращается к конфигурационному файлу и проверяет, разрешен ли этому компьютеру доступ или нет.

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

Листинг 9. Просмотр общих ресурсов компьютера
[sean@bob source3]$ smbclient -L '\\bob'
Enter sean's password:
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.6-69.fc13]

        Sharename       Type      Comment
        ---------       ----      -------
        extdrive        Disk
        Sean Walberg's iMac Disk
        timemachine     Disk
        IPC$            IPC       IPC Service (Samba Server Version 3.5.6-69.fc13)
        test            Printer   test
        Downstairs_Laser Printer   HP 6L
        Cups-PDF        Printer   Cups-PDF
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.6-69.fc13]

        Server               Comment
        ---------            -------
        BOB                  Samba Server Version 3.5.6-69.fc13

        Workgroup            Master
        ---------            -------
        MYGROUP              BOB
        WORK                 SWALBERG-XPLT
        WORKGROUP            IMAC-1FC525

В листинге 9 с помощью параметра -L пользователь запрашивает список общих ресурсов сервера с именем bob. Поскольку имя сервера – это UNC-путь, то перед ним ставятся две обратных косых черты (\\). Будьте внимательны и не перепутайте одиночные кавычки с двойными. Две обратные косые черты, заключенные в одиночные кавычки, интерпретируются как символы escape-последовательности.

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

Наконец, можно попытаться подключиться к общему ресурсу, не используя параметр -L, а указав полный UNC-путь к общему ресурсу. В листинге 10 показано клиентское подключение к серверу с использованием другой рабочей группы и имени пользователя.

Листинг 10. Подключение к общему ресурсу с использованием другого имени пользователя и домена
[sean@bob source3]$ smbclient '\\swalberg-xplt\photos' -U swalberg -W WORK
Enter swalberg's password:
Domain=[WORK] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \> dir
  .                                   D        0  Thu Jan  6 11:39:50 2011
  ..                                  D        0  Thu Jan  6 11:39:50 2011
<< files omitted >>
                38156 blocks of size 4194304. 2938 blocks available
smb: \>>

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


Журналирование и отладка

Журналирование и устранение неисправностей идут рука об руку. Журналы позволяют видеть, не возникали ли какие-либо ошибки в работе Samba, и получать дополнительную информацию о них. Если вы пытаетесь выяснить, почему что-то не работает, то можно настроить более подробный уровень журналирования, позволяющий определить источник проблемы. В файле smb.conf имеется ряд полезных параметров для управления журналированием, которые можно использовать для создания журналов определенных типов.

Работа Samba не отличается от работы обычного демона UNIX в том плане, что она может записывать события для определенной категории syslog, а также создавать собственные файлы журналов. Более того, можно извлекать журналы с сервера Samba с помощью инструмента Microsoft Event Viewer (MMC-оснастка "Просмотр событий"). В последнем случае существует небольшая проблема, которая заключается в том, что Samba не может записывать события в формате журнала регистрации событий Windows, поэтому журналы Samba нуждаются в предварительной обработке.

Уровни журналирования

Каждое генерируемое Samba сообщение имеет уровень от 0 до 10. Наиболее важные сообщения (например, сообщения о новых подключениях и важные сообщения об ошибках) имеют более низкие уровни. Отладочные сообщения имеют более высокие уровни. Т. е. чем выше уровень журналирования, тем подробнее будет журнал. Можно управлять количеством журналируемых сообщений, задавая их максимальный уровень. На уровне журналирования 1 в журнал попадают только сообщения с приоритетами 0 и 1. Если вам требуется более подробное журналирование, указывайте более высокие уровни.

Все сообщения уровня 4 и выше предназначены для разработчиков и не особо полезны для системных администраторов. Уровень журналирования 0 отключает запись всех сообщений за исключением некоторых сообщений запуска и сообщений о критических ошибках.

Для настройки уровня журналирования используйте параметр log level в разделе global; например, параметр log level = 2 устанавливает уровень журналирования 2, на котором будут записываться все события с приоритетом равным или меньшим 2.

Примечание к экзамену

В рамках экзамена LPIC упоминается, что очень важно знать о параметре debuglevel. debuglevel – это синоним уровня журналирования, и оба этих параметра взаимозаменяемы.

Можно изменить уровень журналирования во время выполнения, послав процессу Samba сигнал SIGUSR1 для повышения уровня или сигнал SIGUSR2 для его понижения.

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

  • all. Необязательный параметр, используется, если не указано никакое другое ключевое слово.
  • tdb. Запись событий, относящихся к базам данных TDB – хранилищам типа "ключ-значение", которые использует Samba.
  • printdrivers. Функции управления драйверами принтеров.
  • lanman. Отладка протокола NTLM (NT LAN Manager).
  • smb. Отладка протокола SMB.
  • rpc_parse. Анализ вызовов удаленных процедур (RPCs).
  • rpc_srv. Вызовы удаленных процедур на стороне сервера.
  • rpc_cli. Вызовы удаленных процедур на стороне клиента.
  • passdb. Старый способ хранения паролей на сервере Samba.
  • sam. Локальная база данных паролей Samba.
  • auth. Различные внутренние модули авторизации пользователей Samba.
  • winbind. Компонент, предназначенный для прозрачного подключения пользователей Microsoft к UNIX-системам.
  • vfs. Сообщения отладки модулей виртуальной файловой системы Virtual File System, позволяющих расширять функциональность Samba с помощью подключаемых модулей.
  • idmap. Сопоставление сущностей, имеющих идентификаторы пользователей UNIX и идентификаторы безопасности Microsoft.
  • quota. Сообщения, относящиеся к обработке квот как политиками Microsoft Windows NT, так и политиками файловой системы UNIX.
  • acls. Обработка списков контроля доступа.
  • locking. Статус и ошибки блокировки файлов.
  • msdfs. Сообщения, относящиеся к поддержке Samba распределенной файловой системы.
  • dmapi. Функциональность API-интерфейса управления данными. Для использование этой функциональности Samba должна быть скомпилирована с поддержкой сторонней реализации DMAPI.
  • registry. Эмуляция системного реестра Windows.

Для использования этого дополнительного журналирования добавьте ключевое слово и значение к параметру уровня журналирования, разделенные двоеточием (:). Например, log level = 1 winbind:3 устанавливает системный уровень журналирования по умолчанию 1 и увеличивает уровень журналирования событий winbind до 3. Это позволяет отслеживать проблемы, не путаясь в большом количестве ненужных log-файлов.

Расположение log-файлов

Чтобы изменить имя log-файла, используйте параметр log file. Значение этого параметра может содержать макросы. Часто используется подход, в котором для каждого клиента создается отдельный log-файл. Это можно сделать следующим способом:

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

Эта команда создает отдельный log-файл для каждого клиента, а остальные сообщения продолжают сохраняться в файле log.smbd.

Если необходимо отправлять события в syslog, то можно задать параметр syslog = 1 для отправки всех сообщений уровня 1 или 0 на локальный syslog-сервер. Samba использует категорию (facility) LOG_DAEMON и сопоставляет уровни журналирования Samba с приоритетами syslog следующим образом:

  • LOG_ERR. Уровень журналирования 0.
  • LOG_WARNING. Уровень журналирования 1.
  • LOG_NOTICE. Уровень журналирования 2.
  • LOG_INFO. Уровень журналирования 3.
  • LOG_DEBUG. Уровни журналирования от 4 и выше.

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

Метаданные журналов

Можно добавлять или удалять определенную информацию, отображаемую во всех log-файлах, с помощью дополнительных глобальных параметров:

  • debug timestamp. Добавляет отметку времени к сообщению в журнале; этот параметр включен по умолчанию.
  • debug uid. Записывает идентификаторы пользователя и группы, с которыми был запущен процесс Samba, сгенерировавший событие.
  • debug prefix timestamp. Оставляет отметки времени, но удаляет информацию о месте в исходном коде Samba, которое сгенерировало событие.
  • debug pid. Записывает идентификатор процесса Samba, сгенерировавшего событие.
  • debug hires timestamp. Записывает метки времени с точностью до миллисекунд, а не секунд.
  • debug class. Записывает класс сообщения, который помогает в тех случаях, когда необходимо повысить подробность событий определенного класса (эта опция позволяет вам определить, какой класс вам нужен).

Журналирование может помочь обнаружить проблему, а может высыпать на вас тонны ненужного мусора. У Samba имеется множество различных параметров журналирования – используйте их с умом.


Трассировка системных вызовов

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

В листинге 11 показано, как пользователь root выполняет трассировку процесса Samba, посылающего ошибку клиенту.

Листинг 11. Трассировка процесса с помощью strace
# ps -ef | grep smb
sean     13375 28812  0 21:54 ?        00:00:00 smbd -D
root     14294 13593  0 21:55 pts/2    00:00:00 grep smb
root     16132 28812  0 Feb27 ?        00:00:36 smbd -D
root     28812     1  0 Feb14 ?        00:00:28 smbd -D
root     28814 28812  0 Feb14 ?        00:00:00 smbd -D
[root@bob /]# strace -e trace=file -p 13375
Process 13375 attached - interrupt to quit
<< Output omitted >>
chdir("/home/sean")                     = 0
stat64("somedir", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
stat64("somedir/*", 0xbfcb5f60)         = -1 EACCES (Permission denied)
getcwd("/home/sean", 4096)              = 11
lstat64("/home/sean/somedir", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat64("/home/sean/somedir/*", 0xbfcb5ffc) = -1 EACCES (Permission denied)

Первая команда выводит список всех процессов Samba. Поскольку Samba присваивает идентификатор подключенного пользователя, легко понять, что процесс 13375 принадлежит пользователю. Далее запускается команда strace с двумя параметрами. Первый параметр, -e trace=file, ограничивает вывод только системными вызовами, выполняющими действия с файлами. Для решения определенных типов проблем, с которыми вы можете столкнуться, неплохо начать именно с этого. Второй параметр, -p 13375, указывает команде strace подключиться к запущенному процессу с указанным идентификатором.

Если посмотреть на вывод этой команды, то видно, что smb постоянно проверяет директории предмет изменения. Если пользователь пытается выполнить действие, приводящее к ошибке, то можно увидеть нечто похожее на содержимое листинга 11. Последние несколько команд пытаются получить информацию о файле, находящемся в директории, с помощью вызова stat64. В результате выдается сообщение permission denied, которое означает, что доступ пользователю был запрещен на системном уровне, а не сервером Samba. Эта команда может предоставить дополнительную информацию для решения проблемы, например, информацию об изменении атрибутов директории или о том, что пользователю запрещен доступ в директорию.


Что дальше

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

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=811567
ArticleTitle=Изучаем Linux, 302 (смешанные среды): Kонфигурация Samba
publish-date=05242012