Безопасность сервера SMB. Microsoft Windows 95 и Windows for Workgroups. Диалекты протокола SMB, страница 6

SMB_COM_TREE_CONNЕСТ

Сетевой ресурс, который обычно связан с одной из папок файловой системы сервера, называется в протоколе SMB деревом (tree). «Подключение дерева» выполняется, например, когда пользователь осуществляет привязку буквы диска на клиентском компьютере к сетевому ресурсу. При этом клиент SMB передает серверу имя сетевого ресурса и идентификатор пользователя UID, полученный при открытии сеанса. Сервер проверяет, имеет ли пользователь право подключать данное дерево, и возвращает клиенту идентификатор дерева TID. Клиент будет применять этот параметр в последующих командах (рис. 4-4).

Рис. 4-4. Обмен сообщениями SMB при «подключении дерева».

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

У указанного свойства есть и нетривиальные применения. Рассмотрим такую ситуацию. Администратор домена работает на компьютере, не входящем в этот домен. Обычные средства управления, такие как Диспетчер пользователей или Диспетчер серверов, работать не будут. При подключении к удаленному компьютеру они применяют имя и пароль текущего пользователя, который на этом удаленном компьютере администратором не является. Однако, если перед запуском этих средств подать команду Windows NT:

NET USE \\имя_сервера\1РС$ пароль /и5ЕК:домен\имя_пользователя

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

SMB_COM_OPEN

В сообщении с командой 8MB «открыть файл» клиент указывает идентификатор пользователя UID, идентификатор дерева TID и полный путь к файлу в данном дереве. Если указанный файл существует или может быть создан, а также если пользователь имеет право на выполнение данной операции, сервер возвращает идентификатор файла FID (рис. 4-5).

Рис. 4-5. Обмен сообщениями SMB при выполнении операции открытия файла.

SMB_COM_READ

С открытым файлом клиент может выполнять операции чтения и записи. В сообщении, содержащем команду чтения данных, указывается идентификатор пользователя UID, идентификатор дерева TID и идентификатор файла FID, а также номер байта в файле, с которого следует начать считывание, и количество байтов, которые нужно передать в ответе. В ответе на эту команду сервер передает считанную из файла информацию (рис. 4-6).

Рис. 4-6. Обмен сообщениями SMB при считывании данных из файла.

Сервер SMB в WindowsNT

В операционной системе Windows NT сервер 8MB (его называют также LAN Manager-сервер) реализован как драйвер файловой системы SRV.SYS. Он принимает пришедшие по сети запросы SMB и, проверив их допустимость, передает на исполнение соответствующему драйверу локальной файловой системы. Результат исполнения возвращается по той же цепочке обратно. Поскольку запрос SMB целиком исполняется в режиме ядра операционной системы без перехода в режим пользователя, накладные расходы снижаются, а производительность сервера заметно возрастает.

Помимо драйвера, в операционной системе имеется служба с названием Server. На самом деле это лишь сравнительно небольшая надстройка, обеспечивающая внешний интерфейс управления SMB-сервером и реализованная в виде одного из потоков процесса Services.