Загальний доступ до мережевих ресурсів. Доступ до загальних ресурсів MS Windows (протокол SAMBA)

1.3 Технології CIFS та SMB

Загальний протокол доступу до файлів Internet(Common Internet File System- CIFS) своїм походженням завдячує технології блоку серверних повідомлень (Server Message Block - SMB), яка вперше з'явилася в MS DOS 3.3. У стандарті SMB описаний протокол відправлення команд файлової системи (відкрити файл, рахувати, записати, блокувати та закрити) від клієнта до файлового сервера.
Перед обговоренням технічних подробиць технологій CIFS та SMB необхідно з'ясувати основні відмінності між ними. Спочатку існувала тільки технологія SMB, яка використовувалася як клієнт-серверний файловий протокол у світі персональних комп'ютерів. У середині 1980-х років компанія Microsoft дала своєї реалізації протоколу SMB назву CIFS і почала позиціонувати CIFS як прямого конкурентастандартів WebNFS та NFS. Компанія Microsoft надала ознайомлювальний документ RFC на розгляд IETF (Internet Engineering Task Force), і згодом термін дії документа минув без спроб перетворити RFC на одну зі специфікацій IETF.
Незалежні від компанії Microsoft постачальники пристроїв NASрозпочали розробку специфікації CIFS та організували кілька заходів для популяризації CIFS. Асоціація SNIA (Storage Networking Industry Association) взяла на себе завдання публікації CIFS. Компанія Microsoft також випустила специфікацію CIFS (вона називалася Common Internet Filesystem Access Protocol), що поширювалася безкоштовно.
У схожих один на одного специфікаціях SNIA CIFS та CIFS від компанії Microsoft описується протокол, який використовується клієнтами Windows NT 4.0 для отримання доступу до ресурсів серверів Windows NT. В обох специфікаціях не розглядається протокол SMB, який застосовується в нових версіях Windows (наприклад, не торкається клієнтського кешування, яке підтримується у Windows 2000). Крім того, у специфікаціях не описано всіх протоколів взаємодії між серверами. Новий стандарт SMB, що не стосується безкоштовних специфікацій, описаний у відповідній специфікації, яка за певну плату поширюється компанією Microsoft, що стало можливим завдяки судовим рішенням Європейського Союзу та уряду США.
Таким чином, компанія Microsoft знову стала називати свою реалізацію описаної технології блоком SMB. По суті, SMB від Microsoft - це закритий протокол, що є розширеною версією індустріального стандарту CIFS.
Крім того, слід звернути увагу на історичний зв'язок між SMB/CIFS та NetBIOS. Програмний інтерфейс NetBIOS (рівень сеансу моделі OSI) на даний момент безнадійно застарів. Інтерфейс реалізує рівень абстракції, який дозволяє програмам працювати з різними транспортними протоколами, наприклад TCP/IP, NetWare або вже забутим протоколом XNS (Xerox Network System). Необхідність у програмному інтерфейсі додатків, який надає можливість створення додатків, які не залежать від мережевого протоколу, існує й досі. Однак зараз для цього зазвичай використовується інтерфейс сокетів, зокрема в світі Windows- Інтерфейс Winsock.
Компанія Microsoft використовувала NetBIOS для перетворення імен (перетворення імені сервера на мережеву адресу), але зараз для цього призначена стандартна служба DNS.
Спочатку Microsoft не використовувала TCP/IP як транспортний протокол, що кардинально змінилося з часом, проте підтримка NetBIOS продовжувала бути присутньою. Проте роль NetBIOS постійно зменшувалася. Після призначення порту TCP/IP для файлових серверів SMB залежність від NetBIOS була повністю "вилікована", Крайній міріу контексті базового протоколу. Але ситуація залишалася заплутаною, оскільки деяким вторинним службам клієнтів та серверів Windows все одно був потрібний протокол NetBIOS. Гарним прикладомбуде оголошення серверами про свою присутність у мережі та надання списку доступних служб, а також надсилання цих оголошень клієнтам іншими серверами. Згодом служби були перероблені і NetBIOS повністю знято з рахунків з виходом Windows 2000.
Нарешті, спадщину SMB можна помітити в кожному запиті CIFS, оскільки кожен запит і відповідь повинні починатися зі значення "0xFF", після чого слідують такі символи ASCIIяк "SMB".

1.3.1 Різновиди стандарту CIFS

На жаль, точного визначення стандарту CIFS немає. Різні типипротоколи SMB називаються діалектами. Ось кілька можливих варіантів:
■ застосовуваний клієнтами DOS та Windows 3.x;
■ використовується при підключенні до серверів, які не працюють під керуванням Windows;
■ застосовуваний клієнтами під керуванням Windows NT.
Найчастіше клієнт надсилає серверу запит на встановлення сеансу і передає список всіх варіантів протоколу, що підтримуються. Сервер вибирає найбільш функціональний варіант та надсилає клієнту відповідний запит. Залежно від протоколу, про який домовилися клієнт і сервер, деякі запити та відповідні їм відповіді можуть бути неприпустимими. Узгоджений варіант протоколу не однозначно визначає фактичну реалізацію функцій протоколу, що вносить ще більшу плутанину; для вказівки підтримки певних функцій деякі прапори можуть бути встановлені або скинуті. Іншими словами, навіть при виборі протоколу існують різні варіанти функцій, що надаються: наприклад, один з прапорів може вказувати на наявність підтримки довгих імен файлів.
Як описано в документі RFC компанії Microsoft (за правилами IETF на даний момент він уже застарів), протокол CIFS забезпечує взаємодію клієнта та сервера для доступу до файлів та управління ними. Такі функції, як оголошення про наявність у мережі доступних принтерів та серверів, виходять за межі можливостей протоколу CIFS.
Організація SNIA продовжує роботу над специфікацією CIFS. Крім того, SNIA проводить щорічну конференцію, присвячену CIFS, та організовує інші заходи, на яких обговорюються питання взаємодії систем за протоколом CIFS.
Специфікація SMB стала стандартом з 1992 року (X/Open CAE Specification С209) і описує SMB як протокол забезпечення взаємодії між комп'ютерами під управлінням DOS, Windows, OS/2 і UNIX.

1.3.2 Опис протоколу CIFS

Запити та відповіді CIFS мають чітку, зрозумілу структуру. Поля пакетів SMB також стандартизовані, і відмінності залежать від обраного різновиду CIFS і функцій, що підтримуються як клієнтом, так і сервером.
Зверніть увагу, що показано лише загальні елементи для всіх варіантів SMB. Подробиці будови кожного варіанта пакета SMB виходять за межі теми цієї статті.
Деякі поля у таблиці вимагають більше повного опису. Поле команди має розмір один байт і визначає тип запиту. Сервер копіює це значення у відповідь, що дозволяє клієнту аналізувати останній. Специфікація CIFS містить значення та визначення для цього поля. Описані команди дозволяють виконувати такі операції, як відкриття файлу, читання, запис та блокування певного діапазону файлу. Всі ці операції виконуються як відповідь на запит програми.
Крім того, запити клієнта CIFS (і пов'язані з ними відповіді сервера) ініціюються кодом перенаправника без явного втручання програми. Прикладами будуть кешування та опортуністичні блокування (opportunistic locking). У специфікаціях CIFS RFC та SNIA, а також Open Group визначено значення та семантика коду команди CIFS розміром 1 байт.

ТаблицяСтруктура заголовка SMB

Поле

Розмір

Опис

Завжди має значення 0 xFFSMB

Вказівка ​​типу запиту

32-розрядний код помилки (генерується серверами Windows NT і повертається у вигляді 32-розрядного коду помилки клієнтам, які підтримують коди помилок Windows NT) АБО

Для старіших клієнтів, які не підтримують 32-розрядні коди помилок, повідомлення про помилку перетворюється на старий структурний тип. Старий тип включає:

■ 8-розрядний клас помилки, який свідчить про її різновид, тобто. повідомляється ця помилка операційною системою сервера чи самим сервером; крім того, це може бути помилка апаратного забезпеченняабо протоколу SMB;

■ 8 розрядів ігноруються;

■ 16-розрядний код помилки, який має значення лише в межах певного класу помилки

Семантика представлена ​​у табл. 3.2

Семантика представлена ​​у табл. 3.3

Заповнення/

Заповнення/підпис. Розглядається

у тексті розділу

Tid- значення

Використовується для ідентифікації сервера, який запитується клієнтом. Вказується за допомогою запиту SMB TreeConnect

Опис

Ідентифікатор

2 байт, але

Встановлюється клієнтом. Вказівка ​​на

процесу (Pid)

при необхо-

клієнтський процес, який здійснює

запит. Використовується сервером для

може бути

відстеження режиму відкриття файлів

розширено до

та для блокувань. Надсилається сервером

назад клієнту разом із ідентифікатором мультиплексора (mid) для унікальної. ідентифікація запитів, на які відповідає сервер

Ідентифікатор

Встановлюється та використовується клієнтом.

мультиплексора

Сервер повертає отриманий Mid у відповіді

на запит. Клієнт використовує значення Mid та Pid, ​​щоб ідентифікувати запит, для якого надійшла відповідь

Uid-значення

Призначається сервером після автентифікації клієнта. Клієнт повинен використовувати Uid у всіх запитах

Параметри

Змінна

Складається з 16-розрядного лічильника слів, який вказує на кількість 16-розрядних слів, що наступають за лічильником. Для кожної команди SMB цей лічильник зазвичай є фіксованим значенням з одним лічильником слів для команди і другим - для відповіді. Зазвичай цей лічильник має значення 5 або менше

Змінна

Складається з 16-розрядного лічильника слів, що вказує на кількість наступних за лічильником байт (8-розрядних слів) даних. У порівнянні з полем параметрів, поле даних може мати набагато більший розмір, наприклад 1 Кбайт і більше. У запитах SMB на читання та запис це поле містить фактичні дані, які зчитуються або записуються

Пам'ятайте, що нові значення та семантика полів можуть з'явитися без попередження з виходом нових версій Windows, оскільки протокол CIFS продовжує розвиватися.
Існує кілька команд для виконання однакових базових операцій; наприклад, для відкриття, читання та запису існує кілька разів особистих команд. Деякі команди вже не застосовуються, а в ряді випадків можуть використовуватись альтернативні команди, залежно від вибраного діалекту протоколу.
Далі наведено приклади функцій, описаних у полі команди.
■ Вибір SMB.
■ Встановлення сеансу зв'язку.
■ Перехід до каталогів та перерахування файлів та каталогів.
■ Відкривання, створення, закриття або видалення файлів.
■ Блокування та розблокування певних фрагментів файлу.
■ Операції друку.
■ Сповіщення про зміну файлів та каталогів.
■ Транзакції, у яких вказуються дані, параметри та операції. Сервер CIFS виконує запитану операцію та повертає результат - дані та параметри. Прикладами транзакцій можуть бути посилання у розподіленій файловій системі та управління розширеними атрибутами.

ТаблицяСемантика поля Flags

Значення

Опис

Зарезервувало. Використовується застарілими запитами

Зарезервовано. Повинно бути рівним нулю

Вказує на необхідність урахування регістру в іменах файлів

та каталогів

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

Зарезервовано. Використовується застарілими запитами

Зарезервовано. Використовується застарілими запитами

Вказівка, що це відповідь SMB

У полі Flag2 описано ще більше необов'язкових функцій. Значення цього поля наведено у таблиці нижче.
Поле Заповнення/підпис спочатку являло собою послідовність "холостих" байт. Згодом значення цього поля змінилося. Поле заповнення тепер може включати такі елементи:

ТаблицяСемантика поля Flags2

Значення

Опис

Клієнт підтримує довгі імена файлів. Сервер може повертати довгі імена файлів

Клієнт підтримує розширені атрибути OS/2

Увімкнено підписування пакетів SMB

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

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

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

Кожне ім'я шляху в запиті є довгим ім'ям

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

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

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

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

Вказівка ​​на використання розширеного механізму безпеки, що розглядається у розділі 3.3.3

Шляхи у запиті мають бути перетворені засобами розподіленої файлової системи

Сторінне введення-висновок, що вказує на те, що читання має бути дозволене, коли клієнт має відповідний дозвіл

Вказує на повернення 32-розрядного коду помилки. Якщо прапор не встановлено, використовується код помилки у стилі DOS

Якщо прапорець встановлений, шляхи SMB вказані у форматі Unicode . В іншому випадку застосовується кодування ASCII

■ 2 байти ідентифікатора процесу, що дозволяє вказувати 32-розрядні ідентифікатори процесу;
■ 8 байт для зберігання підпису пакета SMB, якщо ця функція активована (див. опис поля Flags2);
■ 2 байти, що не використовуються.

1.3.3 Безпека CIFS

Протокол CIFSзабезпечує безпеку засобами сервера. Адміністратор може вимкнути систему вбудованої безпеки CIFS, в чому навряд чи з'явиться необхідність, тому система безпеки увімкнена за умовчанням.
У старих варіантах CIFS дозволяється надсилати незашифрований текстовий пароль від клієнта до сервера, що категорично не рекомендується. Протокол CIFS дозволяє захистити ресурси сервера за допомогою паролів окремих користувачів (це називається безпекою на рівні користувача). Для забезпечення зворотної сумісності сервери CIFS підтримують захист спільного ресурсу на основі пароля, однакового для всіх користувачів. Оскільки ресурс буде надано у спільне користування, цей метод називається безпекою на рівні ресурсу. Використовувати механізм безпеки на рівні ресурсу не рекомендується, і Windows 2000 Server ця система відсутня. Перший пакет SMB, який надсилається серверу клієнтом, називається SMB_NEG0TIATE_PR0T0C0L. Пакет використовується для вибору типу CIFS. У відповідь на запит SMB_NEG0TIATE_PR0T0C0L сервер повідомляє про механізм безпеки (рівень користувача або ресурсу).
Починаючи з Windows NT4 SP3 та Windows 2000, компанія Microsoft надала можливість розміщення у пакетах SMB цифровий підпис. Сервер може бути налаштований на обов'язкову вимогу цифрового підпису від клієнта; інакше клієнту буде заборонено доступ до ресурсів. Використання цифрового підпису відбивається на продуктивності сервера і клієнта, але це ціна, яку доводиться платити за безпеку. Зауважте, що підписування і перевірка мають двонаправлену природу, тобто. клієнт підписує запити, що надсилаються, сервер перевіряє підпис клієнта і підписує відповіді, що відправляються, після чого клієнт перевіряє підпис сервера. Підпис SMB зберігається в полі Заповнення/підпис.
Відповідь на запит SMB_NEG0TIATE_PR0T0C0L використовується для надання клієнту інформації про підтримку сервером підписування пакетів SMB та необхідність обов'язкового підписування пакетів SMB.

1.3.4 Аутентифікація CIFS

Протокол CIFS дозволяє визначати рівень безпеки під час взаємодії серверів та клієнтів. Сервер може бути налаштований на відмову в обслуговуванні клієнтів, які пропонують дуже низький рівень безпеки.
Протокол CIFS надає механізми автентифікації, необхідні серверудля автентифікації клієнта. Крім того, надаються методи автентифікації сервера клієнтом. У базовому рівніавтентифікації клієнт повідомляє ім'я користувача та незашифрований пароль. З очевидних причин такий підхід є небажаним. Більше того, сервер можна налаштувати на відмову в обслуговуванні клієнтів, які надсилають паролі у незашифрованому вигляді.
Аутентифікація може виконуватися за допомогою технології, яка називається протокол запит/відповідь (challenge/response protocol). При надсиланні клієнтом пакета SMB_NEGOTIATE_PROTOCOL для вибору типу CIFS прапор у відповіді сервера вказує на можливість використання протоколу запит/відповідь. Якщо сервер підтримує цей протокол, у відповіді сервера надається 8-байтовий запит. Запит – це випадкове значення з дуже низькою ймовірністю повторної генерації. І клієнт та сервер формують ключ із пароля користувача. Після цього запит шифрується за допомогою ключа та алгоритму DES (Data Encryption Standart). Клієнт відправляє запит серверу, а сервер порівнює відповідь із власним підрахованим значенням. Якщо два значення збігаються, клієнт доводить знання пароля та підтверджує свою автентичність.
Крім того, протокол CIFS підтримує систему розширеної безпеки (можете і не сподіватися, що читач, який здогадається про вказівку на підтримку розширеної безпеки у відповіді сервера на запит SMB_NEGOTIATE_PROTOCOL, отримає нагороду). Механізм розширеної безпеки надає можливість підтримки довільного протоколу автентифікації у рамках протоколу CIFS. При виборі розширеної безпеки перший двійковий об'єкт безпеки надається у відповідь на запит SMB_NEGOTIATE_PROTOCOL. Двійкові об'єкти безпеки не обробляються протоколом CIFS. У цьому він покладається на механізми клієнта та сервера, призначені для генерації та обробки двійкових об'єктів. Наступні двійкові об'єкти безпеки можуть передаватись з даними SMB.
Використання механізму розширеної безпеки дозволило Microsoft забезпечити підтримку протоколу Kerberos у Windows 2000 та пізніших версіях. Реалізація Kerberos у Windows 2000 є прикладом використання закритих елементів. Наприклад, деякі поля мандатів Kerberos застосовуються передачі інформації про групи, куди входить клієнт. Реалізація Kerberos від Microsoft допускає взаємну аутентифікацію, коли сервер проводить аутентифікацію клієнта, а й навпаки, клієнт аутентифікує сервер.
Компанія Microsoft пропонує ще один спосіб встановлення сеансу зв'язку між клієнтом та сервером, який називається Netlogon. При цьому використовуються дані про комп'ютер (а не про користувача). Протокол Netlogon необхідний для встановлення безпечного сеансу RPC та має набагато більше можливостей, оскільки підтримує маркери доступу користувачів, які не підтримуються під час реєстрації засобами протоколу CIFS. Зазвичай Netlogon використовується зв'язку між серверами (один сервер виступає ролі клієнта іншого сервера).
Нарешті, сервер CIFS не обов'язково має забезпечувати роботу механізму автентифікації. Протокол CIFS підтримує наскрізну автентифікацію, коли сервер отримує запит у іншого сервера, передає запит клієнту і повертає відповідь клієнта серверу аутентифікації. Якщо сервер автентифікації відповідає позитивно, клієнту надається доступ до запитаних ресурсів. Цей механізм відомий як наскрізна автентифікація.

1.3.5 Можливості оптимізації CIFS

Протокол CIFS має різні можливості оптимізації взаємодії між клієнтом і сервером.

1.3.5.1 Функція CIFS AndX

Протокол CIFS дозволяє формувати послідовність запитів, що взаємно залежать один від одного, тому оптимізація цих операцій дозволяє завершити виконання запиту за одне звернення до сервера. Ця функція називається AndX; Файлова система NFS 4 версії забезпечує подібну функцію у вигляді процедури COMPOUND. Приклад може бути відправка запитів OpenAndRead або WriteAndClose серверу CIFS. При цьому замість відправлення окремих двох запитів, наприклад Open, а потім Read, та отримання двох відповідей надсилається один запит OpenAndRead і виходить одна відповідь. Це має особливе значення в тому випадку, коли час звернення запит/відповідь занадто великий.

1.3.5.2 Оппортуністична блокування

Протокол CIFS підтримує таку технологію оптимізації продуктивності, як опортуністична блокування (opportunistic locking або oplock). Існує дві основні причини для використання опортуністичного блокування.
Перша полягає у блокуванні файлу та ініціалізації його локального кешування. Коли умова блокування більше не підтримується, протокол допускає певну затримку, протягом якої клієнт повинен очистити кеш. Блокування та розблокування виконуються непомітно для застосування за допомогою механізмів CIFS клієнтської та серверної систем. Для підвищення продуктивності модифікації програми не потрібно.

Уявіть собі програму, яка відкриває файл на мережному сервері для читання та запису та записує у файл 128-байтові записи. Без опортуністичного блокування кожен запис розміром 128 байт вимагатиме передачі даних по мережі. Використання oplock дозволяє локально кешувати файл на клієнтській системі та об'єднувати кілька операцій запису в одну, що призводить до передачі даних через мережу. Наприклад, припустимо, що клієнт використовує буфери розміром 4096 і записує послідовно у файл по 128 байт. Перший буфер міститиме дані 32 операцій запису (4096/128 = 32), і всі дані 32 записів будуть передані по мережі одним запитом на запис файлу. Якщо операція запису не може бути кеширована, по мережі буде передаватися 32 операції запису (а не одна, як при кешуванні). Скорочення кількості операцій запису з 32 до однієї призводить до значного зниження навантаження на мережу та суттєвого підвищення продуктивності.
Другим призначенням опортуністичного блокування є розширення умов, за яких подібне блокування можливе. При використанні оплок можна збільшити ефективність кешування. Розширення умов, за яких можливе опортуністичні блокування, надає кілька додаткових переваг. Припустимо, що екземпляр програми відкриває файл (на мережному сервері) для читання та запису. При цьому запитується та надається опортуністична блокування. Програмний код клієнта може кешувати операції запису у файлі. Припустимо, що інший екземпляр тієї ж програми запущено іншому клієнті. Одним із виходів з подібної ситуації буде зняття опортуністичного блокування та використання мережного вводу-виводу для передачі запитів на запис у файл від обох додатків. Ще одним способом буде зняття опортуністичного блокування в той момент, коли другий екземпляр програми спробує виконати операцію запису. Дуже часто програми взагалі не виконують операції запису.
При зміні умов сервер надсилає повідомлення клієнту про зняття опортуністичного блокування. Як приклад ситуації, коли сервер надсилає сповіщення про зняття опортуністичного блокування, можна вказати запит на доступ до файлу або запис даних у файл іншим клієнтом. Сервер забезпечує очищення даних стану сервера (включаючи закриття сеансу клієнта), якщо клієнт не відповідає на запит про зняття опортуністичного блокування. Клієнт запитує oplock тільки у разі потреби; наприклад, якщо програма запитує відкриття файлу для ексклюзивного доступу, запит опортуністичного блокування просто не має сенсу.
Оппортуністичні блокування реалізуються у трьох варіантах:

Послідовність операцій при ексклюзивному опортуністичному блокуванні

■ ексклюзивне опортуністичне блокування;
■ пакетне опортуністичне блокування;
■ опортуністичне блокування другого рівня. Далі ці сценарії описуються докладніше.

Ексклюзивне опортуністичне блокування

Цей варіант блокування запитується міні-перенаправником CIFS, коли програма відкриває файл для читання або запису. Сервер надає опортуністичне блокування, якщо файл ще не відкритий іншим клієнтом. Послідовність операцій показано малюнку.
Для початку перший клієнт надсилає запит на відкриття файлу, запитуючи ексклюзивне опортуністичне блокування. Сервер виконує необхідну перевірку та надає її. Перший клієнт починає кешування файлу, виконуючи операції запобіжного читання та відкладеного запису. Через деякий час інший клієнт, наприклад, клієнт 2 відправляє серверу запит на відкриття того ж файлу. Сервер зазначає, що клієнт 1 володіє ексклюзивним опортуністичної блокуванням для запитаного файлу, і надсилає повідомлення про зняття блокування клієнту 1. Клієнт 1 очищає буфери даних, відправляючи необхідні запити на запис та блокування файлу. Як тільки дані стану файлу будуть записані, клієнт 1 повідомляє серверу, що обробка повідомлення про зняття опортуністичного блокування завершено. На цьому етапі сервер надсилає відповідь клієнту 2, дозволяючи йому відкрити файл. Клієнт 1 продовжує роботу з файлом, не проводячи локального кешування. У даному випадкупередбачається, що клієнт 1 відкрив файл у режимі, що припускає відкриття файлу іншими клієнтами.

Оппортуністична блокування другого рівня

Дуже часто клієнти відкривають файл у режимі читання/запису та нічого не записують у файл до його закриття. Оппортуністична блокування другого рівня проектувалась для забезпечення спільного використання та кешування файлів у такій ситуації. Ексклюзивне опортуністичне блокування та пакетне опортуністичне блокування (воно розглядається в наступному розділі) завжди надаються на запит клієнта. Але опортуністична блокування другого рівня ніколи не запитується клієнтом. Клієнт починає з запиту ексклюзивного опортуністичного блокування. Якщо таке блокування надається, сервер при виконанні певних умов (вони описані далі) може знизити ексклюзивне опортуністичне блокування до блокування другого рівня.
Клієнт 1 починає роботу із запиту ексклюзивного опортуністичного блокування і приступає до локального кешування файлу. Зокрема, клієнт 1 проводить попереджувальне читання і локально кешує дані, що блокуються. Пам'ятайте, що клієнт не збирається записувати дані у файл. На певному етапі клієнт 2 запитує доступ до цього файлу. Сервер відправляє клієнту 1 повідомлення з вимогою знизити ексклюзивне опортуністичне блокування до блокування другого рівня. Клієнт анулює блокування та повідомляє, що обробка повідомлення завершена. Далі сер вер надсилає клієнту 2 повідомлення про успішне відкриття файлу і надає клієнту опортуністичну блокування другого рівня. В даному випадку передбачається, що клієнт 1, відкриваючи файл, повідомив сервер, що інші клієнти також можуть отримати доступ до файлу.
При використанні опортуністичного блокування другого рівня клієнтам заборонено буферизувати блоковані дані. Перевага цієї схеми полягає в спрощеній когерентності даних на стороні сервера, в той час як клієнт кешуватиме дані, що зчитує, що дозволяє скоротити обсяг інформації, що передається по мережі. Як тільки один із клієнтів видає запит на запис, сервер знімає опортуністичне блокування другого рівня, після чого блокувань взагалі не залишається. Оскільки жоден із клієнтів не буферизує блоковані дані за наявності блокувань другого рівня, успішна операція запису означає, що запис виконувався в область файлу, не заблоковану іншими клієнтами. Після зняття опортуністичного блокування другого рівня клієнтам забороняється буферизувати лічені дані.

Оппортуністична блокування другого рівня

Пакетне опортуністичне блокування

Цей варіант блокування використовується для оптимізації швидкодії обробки командних файлів. Командний процесорзазвичай відкриває файл, шукає необхідний рядок, зчитує його, закриває файл і обробляє прочитаний рядок засобами інтерпретатора командного рядка. Після цього файл знову відкривається, в ньому знаходиться наступний рядок, файл закривається, і наступний рядок обробляється інтерпретатором командного рядка. Цей цикл виконується, поки всі рядки командного файлу не закінчаться.

Пакетне опортуністичне блокування

Вище наведено послідовність операцій. Клієнт 1 відкриває командний файлі запитує пакетне опортуністичне блокування. Припустимо, що сервер надає пакетне блокування, оскільки ніхто не виконує запис даних у файл. Клієнт 1 шукає у файлі певний рядокта здійснює операцію читання. Інтерпретатор виконує прочитаний рядок. Потім файл закривається. Міні-перенаправник CIFS не виконує жодних дій при отриманні запиту закриття файлу (тобто виконується операція відкладеного закриття). Інтерпретатор командного рядка відкриває файл, але міні-перенаправник CIFS не виконує операцію відкриття, а просто скасовує розміщену в черзі операцію відкладеного закриття файлу. Коли інтерпретатор командного рядка виконує операції пошуку та читання рядка, міні-перенаправник CIFS надсилає запити на пошук та читання.
В результаті скорочується обсяг даних, що передаються по мережі (виконується менше запитів на відкриття та закриття файлу). Крім того, оптимізується використання ресурсів сервера, так як від сервера не потрібно негайно обробляти запит на закриття файлу з подальшим його повторним відкриттям.

У зв'язку з нещодавньою епідемією шифрувальника WannaCry, що експлуатує вразливість SMB v1, у мережі знову з'явилися поради щодо відключення цього протоколу. Більш того, Microsoft рекомендувала відключити першу версію SMB ще у вересні 2016 року. Але таке відключення може призвести до несподіваних наслідків, аж до курйозів: особисто стикався з компанією, де після боротьби з SMB перестали грати бездротові колонки Sonos.


Спеціально для мінімізації ймовірності пострілу в ногу я хочу нагадати про особливості SMB і докладно розглянути, чим загрожує непродумане відключення його старих версій.


SMB(Server Message Block) – мережевий протокол для віддаленого доступудо файлів та принтерів. Саме він використовується при підключенні ресурсів через \servername\sharename. Протокол спочатку працював поверх NetBIOS, використовуючи порти UDP 137, 138 та TCP 137, 139. З виходом Windows 2000 почав працювати безпосередньо, використовуючи порт TCP 445. SMB також використовується для входу в домен Active Directoryта роботи у ньому.


Крім віддаленого доступу до ресурсів протокол використовується ще й міжпроцесорного взаємодії через «іменовані потоки» – named pipes . Звернення до процесу здійснюється шляхом \.\pipe\name.

Перша версія протоколу, також відома як CIFS (Common Internet File System), була створена ще в 1980-х роках, а ось друга версія з'явилася тільки з Windows Vista, в 2006. Третя версія протоколу вийшла з Windows 8. Паралельно з Microsoft протокол створювався і оновлювався у його відкритій імплементації Samba.


У кожній новій версії протоколу додавалися різноманітні поліпшення, спрямовані на збільшення швидкодії, безпеки та підтримки нових функцій. Але при цьому залишалася підтримка старих протоколів для сумісності. Зрозуміло, у старих версіях було і є достатньо вразливостей, однією з яких користується WannaCry.


Під спойлером ви знайдете зведену таблицюзмін у версіях SMB.

Версія Операційна система Додано, порівняно з попередньою версією
SMB 2.0 Windows Vista/2008 Змінилася кількість команд протоколу зі 100+ до 19
Можливість «конвеєрної» роботи – надсилання додаткових запитів до отримання відповіді на попередній
Підтримка символьних посилань
Підпис повідомлень HMAC SHA256 замість MD5
Збільшення кешу та блоків запису\читання
SMB 2.1 Windows 7/2008R2 Поліпшення продуктивності
Підтримка більшого значення MTU
Підтримка служби BranchCache – механізм, що кешує запити глобальну мережуу локальній мережі
SMB 3.0 Windows 8/2012 Можливість побудови прозорого відмовостійкого кластераз розподілом навантаження
Підтримка прямого доступу до пам'яті (RDMA)
Керування за допомогою командлетів Powershell
Підтримка VSS
Підпис AES-CMAC
Шифрування AES-CCM
Можливість використовувати мережеві папкидля зберігання віртуальних машин HyperV
Можливість використання мережних папок для зберігання баз Microsoft SQL
SMB 3.02 Windows 8.1/2012R2 Поліпшення безпеки та швидкодії
Автоматичне балансування у кластері
SMB 3.1.1 Windows 10/2016 Підтримка шифрування AES-GCM
Перевірка цілісності до аутентифікації з використанням хешу SHA512
Обов'язкові безпечні переговори при роботі з клієнтами SMB 2.x і вище

Вважаємо умовно постраждалих

Переглянути використовувану в поточний моментверсію протоколу досить просто, використовуємо для цього командлет Get-SmbConnection:



Виводить командлет при відкритих мережевих ресурсах на серверах з різною версією Windows.


З висновку видно, що клієнт, який підтримує всі версії протоколу, використовує для підключення максимально можливу версію підтримуваних сервером. Зрозуміло, якщо клієнт підтримує лише стару версію протоколу, а на сервері її буде відключено – з'єднання встановлено не буде. Включити або вимкнути підтримку старих версій у сучасних системах Windowsможна за допомогою командлета Set-SmbServerConfiguration, а подивитися стан так:


Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol


Вимикаємо SMBv1 на сервері з Windows 2012 R2.



Результат при підключенні до Windows 2003.


Таким чином, при відключенні старого, вразливого протоколу можна втратити працездатність мережі зі старими клієнтами. При цьому, крім Windows XP і 2003, SMB v1 використовується і в ряді програмних і апаратних рішень (наприклад NAS на GNU\Linux, що використовує стару версію samba).


Під спойлером наведу список виробників та продуктів, які повністю або частково перестануть працювати при відключенні SMB v1.

Виробник Продукт Коментар
Barracuda SSL VPN
Web Security Gateway backups
Canon Сканування на мережевий ресурс
Cisco WSA/WSAv
WAAS Версії 5.0 та старші
F5 RDP client gateway
Microsoft Exchange Proxy
Forcepoint (Raytheon) «Деякі продукти»
HPE ArcSight Legacy Unified Connector Старі версії
IBM NetServer Версія V7R2 і старша
QRadar Vulnerability Manager Версії 7.2.x та старші
Lexmark Прошивки Firmware eSF 2.x та eSF 3.x
Linux Kernel Клієнт CIFS З 2.5.42 до 3.5.x
McAfee Web Gateway
Microsoft Windows XP/2003 та старше
MYOB Accountants
NetApp ONTAP Версії до 9.1
NetGear ReadyNAS
Oracle Solaris 11.3 та старше
Pulse Secure PCS 8.1R9/8.2R4 та старше
PPS 5.1R9/5.3R4 та старше
QNAP Усі пристрої зберігання Прошивка старша 4.1
RedHat RHEL Версії до 7.2
Ricoh БФП, сканування на мережевий ресурс Крім низки моделей
RSA Authentication Manager Server
Samba Samba Старше 3.5
Sonos Бездротові колонки
Sophos Sophos UTM
Sophos XG firewall
Sophos Web Appliance
SUSE SLES 11 і старше
Synology Diskstation Manager Тільки управління
Thomson Reuters CS Professional Suite
Tintri Tintri OS, Tintri Global Center
VMware Vcenter
ESXi Старше 6.0
Worldox GX3 DMS
Xerox БФП, сканування на мережевий ресурс Прошивки без ConnectKey Firmware

Список взятий із сайту Microsoft, де він регулярно поповнюється.


Перелік продуктів, що використовують стару версію протоколу, досить великий – перед вимкненням SMB v1 обов'язково потрібно подумати про наслідки.

Все-таки відключаємо

Якщо програм та пристроїв, які використовують SMB v1 в мережі немає, то, звичайно, старий протокол краще відключити. При цьому якщо вимкнення на SMB сервері Windows 8/2012 виробляється за допомогою командлета Powershell, то для Windows 7/2008 знадобиться редагування реєстру. Це можна зробити також за допомогою Powershell:


Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 -Force

Або будь-яким іншим зручним способом. При цьому для застосування змін знадобиться перезавантаження.


Для відключення підтримки SMB v1 на клієнті достатньо зупинити службу, що відповідає за його роботу, і поправити залежності служби lanmanworkstation. Це можна зробити такими командами:


sc.exe config lanmanworkstation depend=bowser/mrxsmb20/nsi sc.exe config mrxsmb10 start=disabled

Для зручності відключення протоколу по всій мережі зручно використовувати групові політики, зокрема Group Policy Preferences. За допомогою них можна зручно працювати із реєстром.



Створення елемента реєстру через групові політики.


Щоб вимкнути протокол на сервері, достатньо створити наступний параметр:

    шлях: HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters;

    новий параметр: REG_DWORD з ім'ям SMB1;

  • Значення: 0.


Створення параметра реєстру для вимкнення SMB v1 на сервері через групові політики.


Для відключення підтримки SMB v1 на клієнтах потрібно змінити значення двох параметрів.


Спочатку відключимо службу протоколу SMB v1:

    шлях: HKLM:\SYSTEM\CurrentControlSet\services\mrxsmb10;

    параметр: REG_DWORD з іменем Start;

  • значення: 4.


Оновлюємо один із параметрів.


Потім виправимо залежність роботи LanmanWorkstation, щоб вона не залежала від SMB v1:

    шлях: HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation;

    параметр: REG_MULTI_SZ з ім'ям DependOnService;

  • значення: три рядки – Bowser, MRxSmb20 та NSI.


І замінюємо інший.


Після застосування групової політикипотрібно перезавантажити комп'ютери організації. Після перезавантаження SMB v1 перестане використовуватись.

Працює – не чіпай

Як не дивно, ця стара заповідь не завжди корисна - в інфраструктурі, що рідко оновлюється, можуть завестися і трояни. Тим не менш, неакуратне відключення та оновлення служб можуть паралізувати роботу організації не гірше за віруси.


Розкажіть, а ви вже відключили у себе першу версію SMB? Чи багато було жертв?

Комп'ютерна мережа за визначенням є розподіленою системою. Її призначення – спільна робота користувачів. Така робота має на увазі доступ до мережевих ресурсівяк файли і каталоги, принтери і т.д. Для користувача звернення до мережевих ресурсів має бути прозорим, тобто:

  1. Віддалені ресурси мають виглядати так, ніби вони є локальними і звернення до них із додатків відбувається однаково.
  2. Клієнту має бути байдуже, яка платформа використовується як сервер загального доступу.

При цьому потрібно враховувати і те, що не кожен користувач повинен мати доступ до конкретного ресурсу, і не будь-який ресурс повинен бути доступним для всіх. Тобто. необхідно забезпечити можливості управління загальним доступом як на рівні користувачів, так і на окремих ресурсах.

Наведені можливості надають спеціальні протоколи загального доступу. Найбільш поширеними є SMB/CIFS для ОС Windows і NFS, що використовується в UNIX-подібних системах.

Протоколи загального доступу

SMB/CIFS

SMB (Server Message Block)- це протокол, запропонований IBM для організації спільного доступу до файлів, принтерів, послідовним портам, поштовим осередкам (mail slots), іменованим каналам (named pipes) та API мережевих комп'ютерів. Протокол SMB може бути використаний поверх мережевих протоколів стека TCP/IP, а також поверх інших мережевих протоколів.

SMB – це типовий клієнт-серверний протокол, який дозволяє клієнтському додаткувиконувати операції доступу до спільного ресурсу (читання, запис тощо) через запити до сервера. SMB вимагає встановлення та підтримки з'єднання, але може працювати і в датаграмному режимі.

У 1992 році з'явилася Samba – вільна реалізація протоколу SMB для UNIX-подібних операційних систем. Оскільки Microsoft не публікувала специфікації SMB та доповнень до нього, творцю Samba Ендрю Тріджеллу (Andrew Tridgell) довелося провести зворотну розробку протоколу на основі аналізу пакетів.

Просування протоколу SMB забезпечила корпорація Microsoft, включивши підтримку у свої продукти. У мережевий середовищі Microsoft Windows SMB був основним протоколом прикладного рівнядля роботи з ресурсами ЛОМ. Він призначений для виконання функцій спільного доступу до файлів та принтерів, авторизації користувачів та обміну повідомленнями.

Протокол SMB представляє чотири види севісів:

  • Управління сесіями. Створення, підтримка та розрив логічного каналу між робочою станцією та мережевими ресурсами файлового сервера.
  • Файловий доступ. Робоча станціяможе звернутися до файл-сервера із запитами на виконання типових файлових операцій(відкриття файлу, читання даних тощо).
  • Сервіс друку. Робоча станція може ставити файли в чергу для друку на сервері та отримувати інформацію про чергу друку.
  • Сервіс повідомлень. SMB підтримує просту передачу адресних та широкомовних повідомлень локальною мережею.

Якщо режим керування сеансами в SMB прозорий для користувача, то рештою сервісів користувач може керувати безпосередньо за допомогою команди net(Див. net /? в консолі ОС Windows).

Мал. 1. NetBIOS/SMB

Для управління сесіями протокол SMB спочатку використовував NetBIOS у реалізації NetBEUI (NetBIOS Extended User Interface) – розширений користувальницький інтерфейсдейтаграмної передачі NetBIOS, розрахований на мережі близько 20-200 робочих станцій. Мережі, засновані на протоколі NetBEUI, легко реалізуються, але їх важко розширювати, оскільки протокол NetBEUI не маршрутизується.

Для використання SMB у мережах з більш складною топологією в NetBIOS було додано підтримку транспортних протоколів TCP (NBT, NetBIOS over TCP), IPX, DECNet та Xerox Networking (XNS) ()

Сервіси SMB, що працюють у середовищі TCP/IP, використовують різні порти (стандартні назвипортів підкреслюють тісний зв'язок SMB з NetBIOS):

Netbios-ns 137/tcp # NETBIOS Name Service netbios-ns 137/udp netbios-dgm 138/tcp # NETBIOS Datagram Service netbios-dgm 138/udp netbios-ssn 139/tcp

У SMB перших версій була відсутня аутентифікація - тобто будь-який користувач міг використовувати будь-які ресурси, що, звичайно, обмежувало сферу застосування малими локальними мережами. Сучасні версії SMB підтримують два рівні доступу:

  1. Доступ на рівні ресурсів. Обмеження накладаються серверною стороною каталоги загального доступу. Кожен мережевий каталогможе бути захищений паролем і клієнт повинен вказати пароль для отримання доступу до файлів із загального каталогу.
  2. Доступ на рівні користувачів. Обмеження накладаються на кожен файл у кожному загальному каталозі і вони засновані на правах користувача. Кожен користувач (клієнт) повинен увійти на сервер під своїм обліковим записом та пройти автентифікацію. Після завершення автентифікації клієнт отримує відповідний ідентифікатор користувача (user ID), який він повинен пред'являти для отримання доступу до ресурсів сервера.

Прив'язка до NetBIOS обмежувало використання SMB невеликими локальними мережами. Перша причина — відсутність у NetBIOS поняття мережі як і засобів перенаправлення трафіку (маршрутизації). Друга - у прийнятій схемі адресації: ім'я ресурсу, по суті, рядок з 15 символів плюс байт типу ресурсу: сервер, контролер домену і т.д. Звичайно, така однорангова система імені не годиться для інтернету.

Для усунення цих обмежень у останніх версіях SMB використовувався протокол NBT (NetBIOS over TCP), який працював поверх стека TCP/IP.

CIFSстворювався спільно розроб-чиками Samba Team, незалежним співтовариством і Microsoft. Після того як про-кол CIFS був представлений як відкритий стандарт, Microsoft припинила фінансування проекту і співпрацю з Samba Team, а підтримка CIFS в переробці Microsoft для сумісності з колишніми версіями SMB було включено до ОС Windows 2000.

CIFS (Common Internet File System)- це відкритий стандартний протокол(див. CIFS) на основі SMB, який забезпечує доступ до файлів та сервісів на віддалених комп'ютерах у мережах TCP/IP. На відміну від SMB, основним транспортом для CIFS протокол TCP. Для серверів CIFS зареєстровані порти 445/TCP та 445/UDP (microsoft-ds # Microsoft Naked CIFS, див. /etc/services)

CIFS забезпечує функціональність схожу на FTP (File Transfer Protocol), але надає клієнтам покращений (схожий на прямий) контроль за файлами. Основні можливості CIFS наведені у .

Табл. 1. Можливості протоколу CIFS

Можливість Опис
Доступ до файлової системи Підтримка файлових операцій, таких як відкриття, читання, запис, пошук та закриття файлу або каталогу
Блокування файлів та записів Неблокуючі програми не мають доступу до заблокованого файлу або запису.
Безпечне кешування (випереджальне читання (read-ahead) та відкладений запис (write-behind)) Підтримується одночасний доступ на читання/запис файлу безліччю клієнтів
Повідомлення про зміну файлу Програми можуть реєструватися на сервері для отримання повідомлень про зміни у файлах або каталогах
"Переговори" про версію протоколу Коли клієнт та сервер встановлюють перший мережевий контакт, вони обмінюються інформацією про версію протоколу (діалекту), який використовуватиметься. Різні діалекти можуть включати нові типи повідомлень, а також відмінності у форматах інших діалектів.
Розширені атрибути Підтримуються атрибути, які не належать до атрибутів файлової системи. Такі, наприклад, атрибути як ім'я автора можуть бути додані до вбудованих системних атрибутів файлу (дата створення, дата модифікації та ін.)
Розподілені репліковані віртуальні томи Протокол підтримує багатотомну віртуальну файлову систему, в якій всі "піддерева" файлової ієрархіїдля клієнта виглядають як одне ціле. CIFS прозоро для користувача обробляє доступ до фізично переміщених чи реплікованих елементів такої файлової системи.
Незалежність від серверів розпізнавання імен Клієнти можуть використовувати будь-який механізм розпізнавання імен. Наприклад, сервери DNS можна використовуватиме отримання доступу до файлових ресурсів сервера через Internet.
Пакетні запити Багато файлових запитів можуть бути "упаковані" в одне повідомлення, що скорочує час очікування відповіді сервера. Пакетна обробкаможлива навіть тоді, коли наступні запити залежить від результатів виконання попередніх.
Підтримка символів Unicode Рядки у форматі Unicode можуть використовуватися в іменах файлів, ресурсів та облікових записах користувачів.

Мережна файлова система NFS

NFS (Network File System, мережна файлова система)- це стандарт, який включає опис розподіленої файлової системи та мережного протоколу для роботи з нею. Перша специфікація NFS була розроблена компанією Sun у 1989 році та призначалася для використання тільки в UNIX. Пізніше реалізації клієнтської та серверної частинстали поширеними та інших системах. Поточна версія (на момент написання цього матеріалу) має назву NFS v4 відкритим стандартом(RFC 3010).

Ця система дозволяє користувачеві працювати з віддаленими даними так само, як з локальними – тобто абсолютно прозоро. Крім, звичайно, тимчасових затримок.

Протокол NFS, як і SMB/CIFS, використовує клієнт-серверну модель взаємодії. У ранніх версіях NFSдля транспортування даних використовувався UDP-протокол, у сучасних – використовується TCP. NFS працює на наступних зареєстрованих портах:

NFS 2049/tcp # Network File System - Sun Microsystems nFS 2049/udp # Network File System - Sun Microsystems

Застосування протоколу TCP як транспорт дозволило вирішити питання спільного доступу прямолінійно, без обхідних маневрів, проте ціною цього є деяке зниження продуктивності порівняно з UDP.

NFS є "рідною" файловою системою для UNIX і відповідає логіці файлових операцій цієї операційної системи. Це стосується як простору імен файлів, так і файлових атрибутів, що підтримуються. Підтримка NFS має всі популярні системи на основі UNIX.

Структура NFS включає три компоненти різного рівня:

  • Прикладний рівень (власне NFS) - це виклики віддалених процедур (rpc), які виконують необхідні операції з файлами і каталогами на стороні сервера.
  • Функції презентаційного рівня виконує протокол XDR(eXternal Data Representation), що є міжплатформним стандартом абстракції даних. Протокол XDR визначає уніфіковану, канонічну, Форму подання даних, яка не залежить від архітектури обчислювальної системи. При передачі пакетів RPC-клієнт переводить локальні дані в канонічну форму, а сервер робить зворотну операцію.
  • Сервіс RPC(Remote Procedure Call), що забезпечує запит віддалених процедур клієнтом та їх виконання на сервері, представляє функції сеансового рівня.

Процедура підключення мережного ресурсу засобами NFS називається "експортуванням". Клієнт може запросити у сервера список ресурсів, що ним експортуються. Сам сервер NFS, на відміну від, наприклад, сервера SMB, не займається широкомовною розсилкою списку своїх ресурсів, що експортуються.

Залежно від заданих опцій, ресурс, що експортується, може бути змонтований «тільки для читання», можна визначити список хостів, яким дозволено монтування, вказати використання захищеного RPC (secureRPC) та ін. Одна з опцій визначає спосіб монтування: «жорстке» (hard) або "м'яке" (soft).

  • При «жорсткому» монтуванніклієнт намагатиметься змонтувати файлову систему будь-що-будь. Якщо сервер не працює, це призведе до того, що весь сервіс NFS зависне: процеси, що звертаються до файлової системи, перейдуть у стан очікування закінчення виконання запитів RPC. З точки зору процесів користувача файлова система буде виглядати як дуже повільний локальний диск. При поверненні сервера в робочий стан NFS продовжить функціонування.
  • При «м'якому» монтуванніклієнт NFS зробить кілька спроб підключитися до сервера. Якщо сервер не відгукується, система видає повідомлення про помилку і припиняє спроби зробити монтування. З точки зору логіки файлових операцій при відмові сервера "м'яке" монтування емулює збій локального диска.

На запитання, який із режимів, «м'який» чи «жорсткий», краще однозначно відповісти неможливо. Якщо дані на клієнті та сервері повинні бути синхронізовані при тимчасовій відмові сервісу, то жорстке монтування виявляється кращим. Цей режим незамінний також у випадках, коли файлові системи, що монтуються, містять у своєму складі програми та файли, життєво важливі для роботи клієнта, зокрема для бездискових машин. В інших випадках, особливо коли йдеться про системи «тільки для читання», режим «м'якого» монтування є зручнішим.

З точки зору безпеки перші реалізації NFS були вкрай слабкі: автентифікація виконувалася, по суті, лише за IP-адресою клієнта. Використання NIS не набагато збільшувало захищеність системи. У версіях NFS 3 і 4 ці питання були перероблені шляхом додавання підтримки списків доступу (ACL), захищеного rpc та інших рішень, які дозволили сертифікувати NFS в міноборони США.

Загальний доступ до змішаної мережі

Сервіс NFS ідеально підходить для мереж на основі UNIX, оскільки поставляється практично з усіма версіями операційної системи. Більше того, підтримка NFS реалізована лише на рівні ядра UNIX. На жаль, використання NFS на клієнтських комп'ютерах з Windows створює певні проблеми, пов'язані з необхідністю встановлення спеціалізованого та досить дорогого клієнтського програмного забезпечення. У таких мережах використання засобів поділу ресурсів на основі протоколу SMB/CIFS, зокрема ПЗ Samba, виглядає кращим.

Низькорівневі засоби загального доступу. Протокол DAFS

Архітектура віртуального інтерфейсу

Архітектура віртуального інтерфейсу (VIA) – це спільна розробка Microsoft, Intel та Compaq, яка визначає абстрактну модель низькорівневої технології введення/виводу. VIA використовується для організації високошвидкісного обміну даними між двома процесами, які працюють на різних серверах або системах зберігання центрів обробки даних (ЦОД).

Virtual Interface(VI) - це протокол зв'язку в архітектурі Virtual Interface Architecture

DAFS ( Direct Access File System)- це стандартний протокол файлового доступу на базі NFS v4. Він дозволяє прикладним завданням передавати дані в обхід операційної системи та її буферного простору безпосередньо до транспортних ресурсів, зберігаючи семантику, властиву файловим системам. DAFS використовує переваги новітніх технологійпередачі даних за схемою пам'ять-пам'ять. Його використання забезпечує високі швидкостіфайлового введення-виводу, мінімальну завантаження CPUі всієї системи, завдяки значному зменшенню кількості операцій та переривань, які зазвичай необхідні для обробки мережевих протоколів. Особливо ефективним є використання апаратних засобів підтримки.

Коротко описати алгоритм роботи DAFS можна наступним чином: нехай є дві програми, що здійснюють доступ до мережі за допомогою мережного інтерфейсу рівня користувача (VI, ), тоді:

  1. Драйвер пристроїв операційної системи керує апаратними засобами інтерфейсу традиційним способомздійснюючи контроль за доступом додатків до обладнання.
  2. Програми виділяють буфери повідомлень у власному адресному просторі та звертаються до драйвера пристроїв для отримання доступу до мережного інтерфейсу. Після відповідного налаштування вони автоматично ініціюють процес передачі та прийому, а інтерфейс пересилає інформацію в буфери додатків та в зворотному напрямку, використовуючи простий механізм прямого доступу до пам'яті (direct memory access, DMA)

Мал. 3. Загальний принципроботи DAFS

Програми мають доступ до мережі за допомогою віртуального інтерфейсу. Драйвер NIC ОС керує мережевим контролером та забезпечує прямий доступ додатків до інтерфейсу. Програми виділяють буфери у власному адресному просторі, куди приймають та звідки надсилають повідомлення за допомогою DMA.

Архітектура мережного інтерфейсу рівня користувача залежить від особливостей конкретних додатків і мереж - від способу визначення програмами розташування повідомлень, що пересилаються, від місцезнаходження виділених для прийому інформації буферів, від порядку повідомлення додатків про повідомлення, що надійшли. У деяких мережевих інтерфейсах (наприклад, в інтерфейсах Active Message або Fast Message) операції передачі та прийому реалізовані у вигляді функцій, поміщених у бібліотеку користувача, яка завантажується при ініціалізації кожного процесу. В інших (наприклад, в U-NET та VIA) для кожного процесу створюються черги, якими маніпулюють самі програми. Ці черги обслуговуються апаратними засобами інтерфейсу.

DAFS спроектований для мереж зберігання даних (NAS) і використовується в кластерному та серверному оточенні баз даних та різноманітних Інтернет-додатків, орієнтованих на безперервну роботу. Він забезпечує найменші затримки доступу до загальних файлових ресурсів та даних, а також підтримує інтелектуальні механізми відновлення працездатності системи та даних.

Контрольні питання

  1. Який протокол використовується для спільного доступу до ресурсів у мережах Windows?
  2. Які ресурси можна виділити у спільний доступ за допомогою протоколу SMB?
  3. Навіщо NFS виділено спеціальний протокол презентаційного рівня?
  4. Чим відрізняється "жорстке" монтування томів NFS від "м'якого"?

Постійна адреса цієї сторінки:

Це треба вам, якщо у вашого Дрімбокса немає жорсткого диска, а ви рано чи пізно захочете записати якийсь фільм, або навпаки — переглянути або прослухати аудіо-відео файли з комп'ютера, або для вирішення інших завдань.

Що для цього потрібно?

Насамперед бажання та уважність. Комп'ютер із мережевою картою, кросоверний мережевий кабель та Dreambox.

Також потрібно місце, і притому багато місця, на жорсткому диску вашого комп'ютера.

Як це працює?

На комп'ютері під керуванням Windows XP створюється загальнодоступна (розшарована) папка, їй призначаються дозволи для певного користувачана читання та запис.

А в Dreambox від імені цього користувача монтує (підключає) цю папку до себе в систему по мережі, отримуючи тим самим доступ до жорсткому дискукомп'ютера.

Налаштування мережі цієї статті не розглядається. Але подивися тут:

Роутер або маршрутизатор TP-Link TL-WR340G/TL-WR340GD.

Установка роутера d-link DI-604.

Проблема з маршрутизатором чи роутером

Передбачається, що ви вже налаштували з'єднання між комп'ютером і Дрімом. А то… МАГЕМ.

Деякі застереження.

Працюючи в командному рядку всі команди, символи та розділові знаки пишемо тільки в англійській розкладці!!!

Шляхи до папок та файлів у тій розкладці, мовою якої вони названі. Тому, як, наприклад, російська а» та англійська « a» це різні літери для комп'ютера.

Також особливу увагу звертайте на прогалини.

Пробіл сприймається комп'ютером так само, як і інші літери. Якщо в дорозі до папок і файлів зустрічаються прогалини, то укладайте такі шляхи в подвійні лапки, наприклад, як у такій команді:

net share dreamshare="C:\Documents and Settings\Коля\Мої Документи\Мої Записи" /unlimited.

Відразу домовимося, що:

IP-комп'ютера = 192.168.0.1
IP-Дрімбокса = 192.168.0.2
Папка, що розшарується = C:\dream_share
Її псевдонім = dreamshare
Користувач = abc
Його пароль = def

Зрозуміло, що у вас може «ip» відрізнятися, але дуже небагато… зазвичай остання циферка.

Працюватимемо тільки з командним рядком. Далі вводимо команди і тиснемо клавішу Enter!!!

Поїхали:

У Windows: Пуск -> Виконати -> cmd.exe

Додамо користувача « abc» з паролем « def«:
net user abc def /add /active:yes /passwordchg:no

(До речі, якщо у вас ім'я користувача записано аглицькими літерами, наприклад Kolya, і є пароль (також англійськими чи цифрами), то користувача можна і не додавати.

Для запису папку, що розшарується, бажано створювати на швидкісному гвинті з NTFS файловийсистемою та в несистемному розділі. Тобто. якщо у вас Windows знаходиться у розділі C:, то папку бажано створювати у розділі D:або E:(якщо такі є), і місця в розділі має бути більшим (20 GB і більше).

А це важливо…

Створимо папку для кулі:
mkdir C:\dream_share

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

Створимо підпапку, обов'язкову для відеозапису:
mkdir C:\dream_share\movie

Створимо тестовий файл для перевірки (про всяк випадок):
echo test only - %date% > C:\dream_share\test.txt
Відключимо простий доступ до спільних файлів і папок (рядок довгий, але треба):
reg add "HKLM\SYSTEM\ControlSet001\Control\Lsa" /v "forceguest" /t REG_DWORD /d 0 /f

Розшаримо папку і привласним їй псевдонім dreamshare, через який Дрім буде звертатися до папки по мережі:
net share dreamshare=C:\dream_share /unlimited

Дозволимо користувачеві « abc» підключати папку по мережі та мати до неї повний доступ (запис, читання тощо):
cacls C:\dream_share /e /g abc:f

(Якщо команда caclsпочала лаятися, то ваша папка, що розшарується, знаходиться в FAT32-розділі, і доведеться трішки поклати мишкою:

  1. Пуск -> Панель управління -> Властивості папок-> Закладка Вид. Знімемо галку з пункту « Використовувати простий доступ до спільних файлів“. Зберігаємось.
  2. Правий клік мишіна папці, що розшарується -> Властивості-> Закладка Загальний доступ-> кнопка Дозволи. Додамо користувача « abcі дамо йому повний доступ. Зберігаємось.

Ну, що ж, нам залишилася зовсім небагато: підмонтувати нашу папку до Дріма і перевірити чи все працює.

Можливо, на цьому етапі потрібно перезавантажити комп'ютер і увійти знову під своїм обліковим записом. Хоча в мене і так минає без перезавантаження.

Якщо перезавантажилися, то повертаємось у cmd.exe .

Підключимося до Дріма по Telnet, для цього наберемо:
telnet 192.168.0.2

Не забули, що 192.168.0.2 це IP-адреса вашого Дрімбокса, як ми й домовлялися на початку.

Вводимо логін:

Вводимо пароль (за замовчуванням dreambox):

dreambox

Монтуємо розшаровану папку dreamshareз комп'ютера до папки /var/mnt/hddна Дрімбоксі від імені

користувача abc(або як там вас кличуть) і з паролем def(Звичайно своїм), можливо це займе деякий час:

Mount -t cifs -o rw,soft,udp,nolock,rsize=8192,wsize=8192,iocharset=utf8,user=abc,password=def //192.168.0.1/dreamshare /var/mnt/hdd

Перевіряємо:
mount -t cifs

І отримаємо приблизно такий висновок, який говорить, папка що dreamshareзмонтована:
//192.168.0.1/dreamshare on /var/mnt/hdd type cifs (rw,nodiratime,unc=\192.168.0.1\dreamshare,usernam e=abc,rsize=8192,wsize=8192)

Подивимося, що є в розшарованій папці:
ls -l /var/mnt/hdd

І отримаємо вміст /var/mnt/hdd, де є наші створені файл test.txtта папка movie :
drwxrwxrwx 1 root root 7 Jul 29 2008 movie
-rwsrwsrwt 1 root root 7 Jul 29 2008 test.txt

Перевіримо, чи можемо ми створювати файли в розшарованій папці з Дрімбоксу:
echo «Тест від Dreambox» > /var/mnt/hdd/test_box.txt

Знову перевіримо командою ls:
ls -l /var/mnt/hdd

Видалимо тестові файли:
rm /var/mnt/hdd/test.txt /var/mnt/hdd/test_box.txt

Розмонтуємо:
umount /var/mnt/hdd

Всі!!!

Важко?

Так, мало не забув. Для постійного монтуваннярядок:
Код:

Mount -t cifs -o rw,soft,udp,nolock,rsize=8192,wsize=8192,iocharset=utf8, user=abc,password=def //192.168.0.1/dreamshare /var/mnt/hdd

можна додати в якийсь стартовий скрипт Дрімбоксу, або вчинити стандартно:
(Для Gemini: Menu -> 6 -> 5 -> 1 -> Синя кнопка)


IP комп'ютера = 192.168.0.1
Тип монтування = CIFS
Директорія = dreamshare
Локальна директорія = /var/mnt/hdd
Опції = rw,soft,udp,nolock,iocharset=utf8
Екстра опції = nolock, rsize = 8192, wsize = 8192
USER = abc
PASSWORD = def
Automount = ТАК(тобто відзначити галкою)

Ну зараз точно Все !!!

P.S. Цей метод тестувався та працює у Windows XP Pro, Windows XP Pro SP1, Windows XP Pro SP2. З Windows XP Pro SP3 і Window 7 не тестувався, але найімовірніше також працюватиме.

І запам'ятай … робота по CIFS та в Африці робота

Існує маса різних реалізаційроздачі «мережева куля» в локальній мережі, але вдалося отримати щось середньо-бюджетне і захищене.

Zyxel Keenetic

Підключили та прибрали… ну, наприклад, у шафу.

Конфігурація

Для початку потрібно створити масив.
Створимо не складними маніпуляціями RAID на CFI B8253-JDGG із встановленими 4ТВ дисками.

На задній частині пристрою розташовані DIP-перемикачі та виразна схема апаратного RAID-контролера. Я виставив RAID5 на дисках 4 TB. Ініціалізуємо диски просто підключивши накопичувач до ПК на Win 7. На цьому етапі конфігурація DAS закінчена. Отримали GPT NTFS розміром 16ТВ.

Тепер перейдемо до конфігурації роутера Zyxel Keenetic
Переходимо на WebUI та ставимо кілька галок.

Включаємо CIFS на роутері, автоматичне монтування, щоб не відвалювався наш пристрій і дозволимо доступ без авторизації (далі докачаємо та встановимо пакет для роутера, який дозволить розмежувати права доступу за уч. записами)
Маршрутизатор надає можливість налаштовувати права доступу мережного диска. Ми можемо створювати облікові записи мережного протоколу доступу до файлів, принтерів та інших мережних ресурсів у мережах Windows. Можна налаштувати права доступу кожного користувача та папку. Можливі такі види прав доступу:

При підключенні DAS'a до роутера бачимо наш розділ:

Тепер розмежуємо права доступу, для цього я встановив декілька компонентів:

Ці компоненти дозволили потрапити у вкладку «Права доступу»

Створення користувачів також передбачено й керування доступом.

Роздача прав доступу

Навіщо нам взагалі підключати DAS до роутера?
Все просто, в роутері є вбудований bittorrent клієнт, завдяки якому можна одразу качати на DAS фільми/музику тощо. і роздавати все це через мережу.
Даємо адміну права на torrent

Увімкнемо файл підкачки, для чого він описаний на скріншоті.

Transmission вже встановлений у моєму роутері, перейдемо в браузері 192.168.1.1 :8090/ та авторизуємось під admin

"Сгодуємо" torrent-файл.

Як ми можемо спостерігати, система працює і встановлений на роутер Transmission з успіхом зміг скористатися наданою йому зовнішньою ємністю для складування одержуваного контенту.
І тепер до найголовнішого все працює, але яка ж швидкість читання/запису при доступі до DAS по мережі?
Спробуємо записати/завантажити файл за SAMBA
Результат:

Треба розуміти, що отриманий швидкісний результат обміну мережею прямо залежить від продуктивності процесора та інтерфейсу роутера. Тобто в даному випадку ми бачимо не швидкість DAS CFI, а швидкість, яку здатний «перетравити і видати» Zyxel Keenetic через USB в мережу по SAMBA. Показники не великі, але для домашнього та бюджетного рішенняцього достатньо. Незважаючи на те, що швидкість прямого доступу невелика, хоча теж прийнятна - для отримання з DAS потоку відео на TV або медіаплеєр, або, планшет по квартирі через wi-fi - більш ніж достатня.

Підключимо DAS до ПК USB3.0 і переконаємося в тому, що швидкість обмежується пропускною здатністю USB інтерфейсу Zyxel Keenetic.
Результат:

Сам по собі DAS при прямому підключенні до ПК видає у мене більше 200МБ/с при RAID5. Відповідно, зі зростанням продуктивності роутерів або просто виборі іншого роутера (при можливості звичайно ж перевірю і прикріплю UPD), швидкість може змінюватися і хочеться сподіватися на краще.

Та й комерційна сторона зібраної системи на момент написання:
CFI-B8253JDGG - від 10 756 рублів, Zyxel Keenetic - 990 рублів. У сумі менше ніж 12 000 рублів. І якщо порівняти з 4-х дисковим NAS(ціна починається від 18 000 рублів) економічна вигода очевидна.
Вирішення завдання не єдине, але дуже працездатне і цікаве.