Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Using Samba

Using Samba

Robert Eckstein, David Collier-Brown, Peter Kelly
1st Edition November 1999
1-56592-449-5, Order Number: 4495
416 pages, $34.95

Buy the hardcopy

Table of Contents


3.3 Введение в SMB/CIFS

Мы рассмотрим данный раздел как короткое введение в SMB/CIFS. SMB/CIFS √ это протокол для соединения компьютеров с ОС типа Windows 95/98 и NT  между собой или с сервером Samba. На высоком уровне представление протокола  SMB довольно просто. Он включает в себя все возможные операции для работы с файлами и принтерами, которыми вы пользуетесь на обычном компьютере, например :

  • открыть и закрыть файл

  • создание и удаление директорий

  • чтение и запись в файл

  • поиск файлов

  • посылка на печать и отмена печати на принтере

Все эти операции могут быть помещены в сообщение SMB и переданы к и от сервера. Название  SMB происходит от названия формата данных √  разновидности стандартных системных вызовов DOS к различным структурам данных или Server Message Blocks, адаптированная для передачи данных другому компьютеру по сети.

3.3.1 Формат SMB

   Richard Shape из команды разработчиков Samba дал определение протоколу SMB как ⌠запрос-ответ■.[4] На практике это означает, что клиент посылает запрос  SMB к серверу и сервер отвечает сообщением на этот запрос. Сервер редко формирует ответы, которые не относятся к клиенту.

[4] Загляните на http://anu.samba.org/cifs/docs/what-is-smb.html для более детальной информации о SMB, выполненной Richard-ом.

Сообщение SMB  не так сложно, как вы могли бы предположить. Давайте повнимательнее рассмотрим структуру этого сообщения. Его можно разделить на две части: заголовок фиксированного размера и поле команды, размер которой меняется динамически в зависимости от состава сообщения.

3.3.1.1 Формат заголовка SMB

Таблица 3.1 показывает формат заголовка SMB. Команды SMB не обязательно должны заполнять все поля заголовка SMB. Например, когда клиент впервые пытается соединиться с сервером, то значение идентификатора дерева (TID) пусто √ он появляется после успешного соединения и нулевое значение TID (0xFFFF) устанавливается в соответствующее поле заголовка. Другие поля могут также устанавливаться в ноль, когда не используются.

Значения полей заголовка SMB перечислены в Таблице 3.1.


Таблица 3.1: Поля заголовка SMB

Поле

Размер (байты)

Описание

0xFF 'SMB'

1

Идентификатор протокола

COM

1

Код команды, от 0x00 до 0xFF

RCLS

1

Класс ошибки

REH

1

Зарезервирован

ERR

2

Код ошибки

REB

1

Зарезервирован

RES

14

Зарезервирован

TID

2

ID Дерева; уникальное ID для ресурса, исп. клиентом

PID

2

ID Вызывающего процесса

UID

2

Идентификатор пользователя

MID

2

Мультиплексный ID; используемый для передачи запросов внутри процесса

3.3.1.2 Формат команды SMB

После того, как заголовок представлен определенным числом байт, происходит выполнение команды SMB. Любая команда, например такая, как открыть файл (ID поля  COM: SMBopen ) или получить запрос на печать (SMBsplretq), имеет свой набор параметров и данные. Как и в поле заголовка SMB, здесь также могут быть заполнены не все командные поля, все зависит от команды. Например, команда GetServerAttributes (SMBdskattr) устанавливает поля WCT BCC в 0. Поля командных сегментов показаны в Таблице 3.2.


Таблица 3.2: Содержание команды SMB

Поле

Размер в байтах

Описание

WCT

1

Счетчик слов

VWV

Переменная

Параметр слов (размер, определяемый WCT)

BCC

2

Параметр счетчика байт

DATA

Переменная

Данные (размер, определяемый BCC)

   Не волнуйтесь, если вы не понимаете значения всех этих полей; их не нужно знать для использования Samba на уровне администратора. Но, тем не менее, они необходимы для отладки системных сообщений. Мы покажем вам несколько наиболее распространенных сообщений SMB, формируемые клиентами и серверами, используя далее модифицированную версию программы tcpdump. (Если вы желаете использовать сниффер SMB с графическим интерфейсом, попробуйте "ethereal," который использует библиотеки GTK; загляните на домашнюю страницу Samba для более полной информации об этой утилите.)

Если вы хотите получить более полную информацию обо всех командах протокола SMB, загляните в документацию по SMB/CIFS ftp://ftp.microsoft.com/developr/drg/CIFS/.

3.3.1.3 Версии SMB

Протокол SMB несколько раз дополнялся новыми командами после выпуска первой версии. Но каждая новая версия совместима с предыдущей. Это дает возможность иметь в одной сети как клиентов, так и серверы с различными версиями протокола.

Таблица 3.3 показывает основные версии протокола SMB. Под каждым ⌠диалектом■ SMB подразумевается несколько подверсий, включающих команды самых распространенных  версий ОС. Поле ID используется клиентами и серверами для выяснения версии протокола, по которому они будут общаться.


Таблица 3.3: Диалекты протокола SMB

Название протокола

Поле ID

Кем используется

Core

PC NETWORK PROGRAM 1.0

Core Plus

MICROSOFT NETWORKS 1.03

LAN Manager 1.0

LANMAN1.0

LAN Manager 2.0

LM1.2X002

LAN Manager 2.1

LANMAN2.1

NT LAN Manager 1.0

NT LM 0.12

Windows NT 4.0

Samba's NT LM 0.12

Samba

Samba

Common Internet File System

CIFS 1.0

Windows 2000

Samba использует спецификацию NT LM 0.12 для NT LAN Manager 1.0. Samba имеет обратную совместимость со всеми предыдущими вариантами SMB. Формат CIFS, на самом деле, NT LAN Manager 0.12, с несколькими добавлениями.

3.3.2 Клиенты и серверы SMB

SMB- это клиент/серверный протокол. Это означает, что клиент сначала посылает запрос на сервер, сервер принимает его и дает ответ. Например, взглянем на два компьютера на Рисунке 3.28. Компьютер под именем WIZZIN предоставляет в виде ресурса для доступа принтер, а компьютер под именем ESCRIME в виде ресурса директорию на диске. WIZZIN выступает в роли клиента, когда получает доступ к сетевому диску ESCRIME▓а и роль сервера, при выполнении задачи печати для ESCRIME.

Рисунок 3.28: Два компьютера, которые имеют ресурсы для доступа

Figure 3.28

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

  • Сервер -   это компьютер, предоставляющий доступ к ресурсу

  • Клиент -   это компьютер, который желает воспользоваться данным ресурсом

  • Сервер может стать клиентом в любое время

Следует отметить, что для работы сервера нет особых ограничений, таких как объем диска или частота процессора. Сервером может служить, например, старый компьютер с 486 процессором и принтером или рабочая станция UltraSparc с объемом диска в 10 Гб.

   Операционные системы от Microsoft  имеют встроенную поддержку клиентской и серверной части протокола SMB. Wndows NT 4.0 использует более новый протокол  SMB, чем Windows for Workgroups, а также имеет расширенную форму безопасности, которая будет рассмотрена позже в Разделе 6. Плюс существует большое количество коммерческих продуктов для серверов SMB от компаний Sun, Compaq, SCO, HP, Syntax и IBM. К сожалению клиентская сторона представлена гораздо меньше, ограничиваясь продуктами от Digital Equipment Pathwork и Samba.

3.3.3 Простое соединение SMB

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

Установка соединения между клиентом и сервером происходит в 4 шага:

  1. Установить виртуальное соединение

  2.    Выбрать протокол для  ⌠общения■

  3.   Установить параметры сессии

  4. Получить доступ к ресурсу

Мы подробно рассмотрим взаимодействие компьютеров на каждом из этих шагов при помощи модифицированной программы tcpdump, доступной на www сервере Samba.

Вы можете загрузить данную программу с samba.org из директории  samba/ftp/tcpdump-smb; последняя версия на момент издания данной книги 3.4-5. Используйте данную программу, также, как и стандартную программу tcpdump, но добавьте ключ -s 1500 для того, чтобы получить пакет целиком, а не только первые несколько байт.

3.3.3.1 Установка виртуального соединения

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

>>> NBT Packet
NBT Session Request
Flags=0x81000044
Destination=ESCRIME      NameType=0x20 (Server)
Source=WIZZIN            NameType=0x00 (Workstation)

>>> NBT Packet
NBT Session Granted
Flags=0x82000000

3.3.4 Выбор версии протокола

   С этого момента открыт канал между клиентом и сервером. После этого клиент посылает сообщение серверу для выбора варианта протокола SMB. Как было отмечено ранее, клиент устанавливает идентификатор TID в 0, поскольку пока он не знает какой TID ему использовать. Идентификатор TID √ это номер, показывающий на соединение к ресурсу сервера.

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

  На запрос SMBnegprot сервер отвечает записью в списке, предложенным клиентом, начиная с 0 или со значения 0xFF, если ни один из вариантов предложенных протоколов не подходит. Продолжая предыдущий пример, предположим, что сервер отвечает значением 5, означающим, что будет использоваться диалект NT LM 0.12 для продолжения сессии:

>>> NBT Packet
NBT Session Packet
Flags=0x0
Length=154

SMB PACKET: SMBnegprot (REQUEST)
SMB Command   =  0x72
Error class   =  0x0
Error code    =  0
Flags1        =  0x0
Flags2        =  0x0
Tree ID       =  0
Proc ID       =  5371
UID           =  0
MID           =  385
Word Count    =  0
Dialect=PC NETWORK PROGRAM 1.0
Dialect=MICROSOFT NETWORKS 3.0
Dialect=DOS LM1.2X002
Dialect=DOS LANMAN2.1
Dialect=Windows for Workgroups 3.1a
Dialect=NT LM 0.12

>>> NBT Packet
NBT Session Packet
Flags=0x0
Length=69

SMB PACKET: SMBnegprot (REPLY)
SMB Command   =  0x72
Error class   =  0x0
Error code    =  0
Flags1        =  0x0
Flags2        =  0x1
Tree ID       =  0
Proc ID       =  5371
UID           =  0
MID           =  385
Word Count    =  02
[000] 05 00

3.3.5 Установка параметров сессии и входа

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

   В следующем примере наличие команды Session Setup позволяет добавить в нее несколько команд SMB. Буква X поля имени команды показывает это и шестнадцатеричный код следующей команды 0x75 задан в поле Com2. В нашем случае дана команда 0x75, означающая команды TreeConnect и X. Сообщение SMBtconX ищет имя ресурса в буфере smb_buf (в данном запросе это последнее поле). В нашем примере поле smb_buf содержит запись \\ESCRIME\PUBLIC, показывающее полный путь к доступной директории на компьютере ESCRIME. Использование команд типа ⌠and X■ значительно ускоряет каждую передачу данных, поскольку сервер не должен ожидать второго запроса от клиента.

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

>>> NBT Packet
NBT Session Packet
Flags=0x0
Length=139

SMB PACKET: SMBsesssetupX (REQUEST)
SMB Command   =  0x73
Error class   =  0x0
Error code    =  0
Flags1        =  0x10
Flags2        =  0x0
Tree ID       =  0
Proc ID       =  5371
UID           =  1
MID           =  385
Word Count    =  13
Com2=0x75
Res1=0x0
Off2=106
MaxBuffer=2920
MaxMpx=2
VcNumber=0
SessionKey=0x1FF2
CaseInsensitivePasswordLength=1
CaseSensitivePasswordLength=1
Res=0x0
Capabilities=0x1
Pass1&Pass2&Account&Domain&OS&LanMan=  
  KRISTIN PARKSTR Windows 4.0 Windows 4.0
PassLen=2
Passwd&Path&Device=
smb_bcc=22
smb_buf[]=\\ESCRIME\PUBLIC

3.3.6 Получение доступа к ресурсу

Наконец сервер выдает TID клиенту, показывая тем самым, что пользователь прошел процедуру авторизации и ресурс готов к использованию. Он также устанавливает поле Service Type в значение ⌠А■ для обозначения, что используется служба доступа к файлам. Существуют следующие варианты служб:

  • A■ для диска или файла

  • LPT1■ для вывода на печать

  • COMM■ для прямого соединения принтеров и модемов

  • IPC■ для идентификации при доступе к ресурсу

   Выглядит это так :

>>> NBT Packet
NBT Session Packet
Flags=0x0
Length=78

SMB PACKET: SMBsesssetupX (REPLY)
SMB Command   =  0x73
Error class   =  0x0
Error code    =  0
Flags1        =  0x80
Flags2        =  0x1
Tree ID       =  121
Proc ID       =  5371
UID           =  1
MID           =  385
Word Count    =  3
Com2=0x75
Off2=68
Action=0x1
[000] Unix Samba 1.9.1
[010] PARKSTR

SMB PACKET: SMBtconX (REPLY) (CHAINED)
smbvwv[]=
Com2=0xFF
Off2=78
smbbuf[]=
ServiceType=A:

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


Previous: 3.2 Setting Up Windows NT 4.0 Computers Next: 4. Disk Shares
3.2 Настройка компьютеров с Windows NT 4.0  Book Index 4. Ресурсы для доступа

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.