Библиотека сайта rus-linux.net
Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly1st Edition November 1999 1-56592-449-5, Order Number: 4495 416 pages, $34.95 |
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: Два компьютера, которые имеют ресурсы для доступа
Следует отметить главные термины, используемые для работы 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 шага:
Мы подробно рассмотрим взаимодействие компьютеров на каждом из этих шагов при помощи модифицированной программы 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=0x820000003.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 003.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\PUBLIC3.3.6 Получение доступа к ресурсу
Наконец сервер выдает TID клиенту, показывая тем самым, что пользователь прошел процедуру авторизации и ресурс готов к использованию. Он также устанавливает поле Service Type в значение ⌠А■ для обозначения, что используется служба доступа к файлам. Существуют следующие варианты служб:
Выглядит это так :
>>> 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 клиент может выполнять те команды, которые он обычно использует для работы с файлами на локальном диске. Он может открывать файлы, читать и изменять их, удалять, искать по имени и т.д.
International | About O'Reilly | Affiliated Companies
© 1999, O'Reilly & Associates, Inc.