Вопрос или проблема
Когда я подключаюсь к серверу Windows, используя smbclient
из Linux, как указано ниже:
smbclient //SERVER/FOLDER -U user%password
Это успешно подключается к серверу, но когда я использую команду stat для конкретной папки, возникают ошибки:
smb: > stat folder
Server doesn't support UNIX CIFS calls.
Есть ли способ получить разрешения на папки общего ресурса Windows на Linux с помощью samba?
Разрешения Windows обычно регулируются ACL, которые не отображаются smbclient
. Вместо этого попробуйте smbcacls //SERVER/SHARE FILENAME -U user%password
. Вы должны получить что-то вроде:
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:NT AUTHORITY\SYSTEM
GROUP:NT AUTHORITY\SYSTEM
ACL:NT AUTHORITY\SYSTEM:ALLOWED/OI|CI/FULL
ACL:BUILTIN\Administrators:ALLOWED/OI|CI/FULL
ACL:LAPTOP-CD837F\localuser:ALLOWED/OI|CI/FULL
ACL:Everyone:ALLOWED/OI|CI/READ
Вы также можете использовать smbclient
, действительно. Просто используйте переключатель showacls
:
smb: \> ? showacls
HELP showacls:
toggle if ACLs are shown or not
smb: \> showacls
smb: \> ls filename_or_dirname
Пример:
smb: \> showacls
smb: \> dir users
FILENAME:Users
MODE:DR
SIZE:0
MTIME:Fri Nov 17 09:02:31 2023
revision: 1
type: 0x9404: SEC_DESC_DACL_PRESENT SEC_DESC_DACL_AUTO_INHERITED SEC_DESC_DACL_PROTECTED SEC_DESC_SELF_RELATIVE
DACL
ACL Num ACEs: 6 revision: 2
---
ACE
type: ACCESS ALLOWED (0) flags: 0x03 SEC_ACE_FLAG_OBJECT_INHERIT SEC_ACE_FLAG_CONTAINER_INHERIT
Specific bits: 0x1ff
Permissions: 0x1f01ff: SYNCHRONIZE_ACCESS WRITE_OWNER_ACCESS WRITE_DAC_ACCESS READ_CONTROL_ACCESS DELETE_ACCESS
SID: S-1-5-18
[...]
Ответ или решение
Когда вы подключаетесь к Windows серверу с использованием smbclient
из Linux, у вас может возникнуть проблема с отображением разрешений для папок, поскольку smbclient
по умолчанию может не поддерживать команды для отображения таких атрибутов, как разрешения доступа. Эта проблема обычно возникает из-за различий в обработке разрешений между Windows и UNIX-подобными системами.
Теория
В Windows управление доступом в основном осуществляется через ACL (списки управления доступом), которые часто недоступны для стандартных UNIX команд, таких как stat
. Этот факт объясняет, почему при попытке выполнить команду stat
на Windows сервере вы получаете сообщение об ошибке "Server doesn’t support UNIX CIFS calls.".
Пример
Для получения информации о разрешениях вы можете использовать команду smbcacls
, которая более приспособлена для работы с ACL на Windows серверах. Она предоставит вам подробные данные об ACL, включая владельца и группу ресурса, а также информацию о конкретных разрешениях, например:
smbcacls //SERVER/SHARE FILENAME -U user%password
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:NT AUTHORITY\SYSTEM
GROUP:NT AUTHORITY\SYSTEM
ACL:NT AUTHORITY\SYSTEM:ALLOWED/OI|CI/FULL
...
Применение
Для эффективной работы с smbclient
, вы можете активировать опцию showacls
, которая позволит вам просматривать информацию о ACL непосредственно через интерфейс smbclient
. Вот как это можно сделать:
- Подключитесь к серверу с помощью
smbclient
. - Используйте команду
showacls
, чтобы включить отображение ACL. - Затем выполните
ls
илиdir
, чтобы просмотреть ACL для конкретного файла или директории.
Пример использования:
smb: \> showacls
smb: \> dir users
FILENAME:Users
MODE:DR
SIZE:0
[сведения об ACL, которые будут предоставлены]
Таким образом, вы сможете получить доступ к важной информации о разрешениях, используя инструменты, адекватно поддерживающие особенности Windows серверов при работе с Linux.