Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 4
15. Ключевые флаги доступа
В SMB2 CREATE поле DesiredAccess определяет права. Ниже типовые значения.
| Флаг | Назначение |
|---|---|
FILE_READ_DATA |
Чтение данных |
FILE_WRITE_DATA |
Запись данных |
FILE_APPEND_DATA |
Добавление данных |
FILE_READ_EA |
Чтение расширенных атрибутов |
FILE_WRITE_EA |
Запись расширенных атрибутов |
FILE_EXECUTE |
Выполнение/доступ к каналу |
FILE_DELETE_CHILD |
Удаление дочерних объектов |
FILE_READ_ATTRIBUTES |
Чтение атрибутов |
FILE_WRITE_ATTRIBUTES |
Запись атрибутов |
DELETE |
Право на удаление |
READ_CONTROL |
Чтение security descriptor |
WRITE_DAC |
Изменение DACL |
WRITE_OWNER |
Смена владельца |
SYNCHRONIZE |
Синхронизация |
ACCESS_SYSTEM_SECURITY |
Доступ к системной безопасности |
MAXIMUM_ALLOWED |
Запрос максимально разрешённого доступа |
GENERIC_READ |
Обобщённое чтение |
GENERIC_WRITE |
Обобщённая запись |
GENERIC_EXECUTE |
Обобщённое выполнение |
GENERIC_ALL |
Обобщённый полный доступ |
16. Команды ОС и утилит для работы с SMB
Если под “командами SMB” имеются в виду не команды протокола, а команды администрирования, ниже основные варианты.
16.1. Windows: классические команды
| Команда | Назначение |
|---|---|
net use |
Подключение/отключение сетевых дисков |
net use \\server\share |
Подключить шару |
net use * /delete |
Удалить подключения |
net view |
Список доступных серверов/ресурсов |
net share |
Управление локальными общими ресурсами |
net session |
Просмотр сессий к серверу |
net file |
Просмотр открытых файлов |
net config server |
Информация о конфигурации сервера |
sc qc lanmanserver |
Состояние службы сервера |
sc query lanmanworkstation |
Состояние рабочей станции |
Примеры:
net use Z: \\server\share /user:DOMAIN\User
net use Z: /delete
net share MyShare=C:\Data /grant:Everyone,read
net share MyShare /delete
16.2. Windows: PowerShell
| Команда | Назначение |
|---|---|
Get-SmbServerConfiguration |
Конфигурация SMB-сервера |
Set-SmbServerConfiguration |
Изменение конфигурации SMB-сервера |
Get-SmbShare |
Список общих ресурсов |
New-SmbShare |
Создание общего ресурса |
Remove-SmbShare |
Удаление общего ресурса |
Get-SmbShareAccess |
Права доступа к шаре |
Grant-SmbShareAccess |
Выдать доступ |
Revoke-SmbShareAccess |
Отозвать доступ |
Block-SmbShareAccess |
Заблокировать доступ |
Unblock-SmbShareAccess |
Разблокировать доступ |
Get-SmbSession |
Активные сессии |
Close-SmbSession |
Закрыть сессию |
Get-SmbConnection |
Активные подключения |
Get-SmbMapping |
Подключённые диски |
New-SmbMapping |
Создать подключение |
Remove-SmbMapping |
Удалить подключение |
Get-SmbClientConfiguration |
Конфигурация SMB-клиента |
Set-SmbClientConfiguration |
Изменение конфигурации клиента |
Get-SmbServerNetworkInterface |
Сетевые интерфейсы сервера |
Get-SmbClientNetworkInterface |
Сетевые интерфейсы клиента |
Примеры:
Get-SmbServerConfiguration | Format-List
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Set-SmbServerConfiguration -EncryptData $true -Force
Get-SmbShare | Format-Table Name, Path, Description
New-SmbShare -Name Data -Path C:\Data -ReadAccess Everyone
Get-SmbSession
Close-SmbSession -SessionId 123456
Get-SmbMapping
New-SmbMapping -LocalPath Z: -RemotePath \\server\share
16.3. Linux / Samba
| Команда | Назначение |
|---|---|
smbclient |
Клиент SMB/CIFS |
smbstatus |
Состояние Samba-сервера |
testparm |
Проверка smb.conf |
mount.cifs |
Монтирование SMB-шары |
smbcacls |
Работа с ACL через SMB |
smbcquotas |
Работа с квотами |
smbtree |
Обзор сетевых ресурсов |
nmblookup |
NetBIOS-поиск |
net |
Административные операции Samba/AD |
Примеры:
smbclient -L //server -U user
smbclient //server/share -U user
smbclient //server/share -U user -c 'ls; get report.txt'
mount.cifs //server/share /mnt/smb -o user=user,domain=DOMAIN,vers=3.1.1,seal
smbstatus
testparm
17. Диагностика SMB-трафика
17.1. Полезные фильтры захвата
Для Wireshark можно использовать:
tcp.port == 445
smb || smb2
smb2.cmd == 0x0000
NEGOTIATE
smb2.cmd == 0x0001
SESSION_SETUP
smb2.cmd == 0x0003
TREE_CONNECT
smb2.cmd == 0x0005
CREATE
smb2.cmd == 0x0008
READ
smb2.cmd == 0x0009
WRITE
smb2.cmd == 0x000b
IOCTL
smb2.cmd == 0x0012
OPLOCK_BREAK
17.2. Windows-журналы
Полезные журналы и источники:
Microsoft-Windows-SMBServer/Operational;Microsoft-Windows-SMBClient/Connectivity;Microsoft-Windows-SMBClient/Security;- события безопасности при доступе к файлам;
- логи файрвола и сетевые захваты.
17.3. Быстрая проверка
Get-SmbConnection
Get-SmbSession
Get-SmbMapping
Get-SmbShare
net use
net share
tcpdump -i any tcp port 445
18. Безопасность SMB
18.1. Основные рекомендации
1. Отключить SMB1
SMB1 имеет известные уязвимости и должен быть запрещён.
2. Использовать SMB 3.x
Желательно SMB 3.1.1, если поддерживается клиентами и серверами.
3. Включать подпись сообщений
Если совместимость позволяет, лучше требовать подпись.
4. Использовать шифрование там, где нужно
Например: - для чувствительных шар; - в недоверенных сетях; - при доступе через Интернет с SMB over QUIC.
5. Ограничить доступ по сети
Порты 139/445 не должны быть открыты в Интернет.
6. Не использовать гостевой и анонимный доступ без необходимости
Особенно важно запретить небезопасные гостевые входы.
7. Использовать Kerberos вместо NTLM там, где возможно
Это снижает риски передачи слабых хэшей и relay-атак.
8. Обновлять системы
Многие SMB-уязвимости закрыты патчами.
9. Аудитировать доступ к файлам и шарам
Полезно включать аудит и мониторинг подозрительных сессий.
10. Проверять старые клиенты
Иногда старый сканер, принтер или сетевое устройство тянет сеть вниз, требуя SMB1 или слабый NTLM.
18.2. Пример отключения SMB1 в Windows
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Set-SmbClientConfiguration -EnableSMB1Protocol $false -Force
Проверка:
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol
Get-SmbClientConfiguration | Select-Object EnableSMB1Protocol
18.3. Пример усиления конфигурации
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
Set-SmbServerConfiguration -EnableSecuritySignature $true -Force
Set-SmbServerConfiguration -EncryptData $true -Force
Set-SmbServerConfiguration -RejectInsecureGuestLogons $true -Force
18.4. Samba: минимальный протокол
В smb.conf обычно задают:
[global]
server min protocol = SMB2_02
client min protocol = SMB2_02
Или выше, в зависимости от требований.
19. Частые ошибки администрирования
| Проблема | Причина | Решение |
|---|---|---|
| Клиент подключается, но не видит файлы | Недостаточно прав на шаре или файловой системе | Проверить права шары и NTFS/файловой системы |
STATUS_BAD_NETWORK_NAME |
Шара не существует или недоступна | Проверить имя сервера, имя шары, доступность |
STATUS_ACCESS_DENIED |
Нет прав | Проверить аутентификацию, группы, ACL |
STATUS_LOGON_FAILURE |
Неверный логин/пароль | Проверить учётные данные |
| Старое устройство требует SMB1 | Устройство не поддерживает SMB2/3 | Обновить прошивку или изолировать устройство |
| Медленная работа | Сеть, подписи без offload, старые версии | Использовать SMB 3.x, SMB Direct при возможности |
| Не работает шифрование | Клиент/сервер не согласовали диалект или политики | Проверить версии, политики, Get-SmbConnection |
| Гостевой доступ не работает | Современные ОС запрещают небезопасные гостевые входы | Использовать нормальную аутентификацию |
20. Шпаргалка: что смотреть в первую очередь
Если нужно быстро разобраться с SMB:
1. Какой диалект используется?
Смотреть NEGOTIATE и ответ сервера.
2. Успешна ли аутентификация?
Смотреть SESSION_SETUP и статусы.
3. Подключается ли шара?
Смотреть TREE_CONNECT.
4. Открывается ли файл?
Смотреть CREATE, DesiredAccess, CreateDisposition.
5. Есть ли чтение/запись?
Смотреть READ, WRITE.
6. Есть ли отказы в доступе?
Искать STATUS_ACCESS_DENIED.
7. Используется ли SMB1?
В современных сетях это уже повод для исправления.
8. Есть ли шифрование/подпись?
Проверять конфигурацию сервера/клиента и согласование.
21. Итоговая таблица самых важных команд
21.1. Главные команды SMB1
| Команда | Зачем нужна |
|---|---|
SMB_COM_NEGOTIATE |
Выбор диалекта |
SMB_COM_SESSION_SETUP_ANDX |
Аутентификация |
SMB_COM_TREE_CONNECT_ANDX |
Подключение к шаре |
SMB_COM_NT_CREATE_ANDX |
Открытие/создание файла |
SMB_COM_READ_ANDX |
Чтение |
SMB_COM_WRITE_ANDX |
Запись |
SMB_COM_CLOSE |
Закрытие |
SMB_COM_TRANSACTION2 |
Расширенные файловые операции |
SMB_COM_NT_TRANSACT |
Безопасность, уведомления и др. |
SMB_COM_TREE_DISCONNECT |
Отключение от шары |
SMB_COM_LOGOFF_ANDX |
Выход из сессии |
21.2. Главные команды SMB2/SMB3
| Команда | Зачем нужна |
|---|---|
SMB2 NEGOTIATE |
Согласование версии и возможностей |
SMB2 SESSION_SETUP |
Аутентификация |
SMB2 TREE_CONNECT |
Подключение к шаре |
SMB2 CREATE |
Открытие/создание объекта |
SMB2 READ |
Чтение |
SMB2 WRITE |
Запись |
SMB2 CLOSE |
Закрытие |
SMB2 IOCTL |
Управляющие операции |
SMB2 QUERY_INFO |
Запрос метаданных |
SMB2 SET_INFO |
Изменение метаданных |
SMB2 QUERY_DIRECTORY |
Список файлов |
SMB2 CHANGE_NOTIFY |
Отслеживание изменений |
SMB2 ECHO |
Проверка доступности |
SMB2 LOGOFF |
Завершение сессии |
SMB2 TREE_DISCONNECT |
Отключение от шары |
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.