Пытаюсь понять, как Samba обрабатывает разрешения UNIX

Пытаюсь понять, как Samba обрабатывает разрешения UNIX

Я создаю резервный сервер с использованием Linux, ZFS и Samba. Все клиенты, кроме меня, будут использовать Windows 10, поэтому я сосредоточен на поддержке Windows 10 должным образом, но это не означает, что разрешения на стороне Linux должны быть небезопасными (т. е. доступными для чтения и записи для всех).

После того, как я по ошибке удалил списки контроля доступа POSIX для всех файлов, думая, что они изначально настроены на разрешение группового доступа, все разрешения для файлов на стороне Windows оказались нарушены.

Это было исправлено путем просмотра всех опций в руководстве и переделки конфигурации. Я выяснил, какие опции установить, чтобы получить желаемое поведение, а именно установить разрешения только на стороне Windows, сохранив при этом разрешения UNIX в безопасности. Однако есть еще два момента, которые я не понимаю в том, как Samba работает с разрешениями UNIX.

Настройка acl_xattr:ignore system acls = noприводит к тому, что разрешения UNIX становятся записями в списках ACL Windows (записи CREATOR, GROUP и EVERYONE), чего я не хотел, однако при установке значения yesвладелец, группа и разрешения, похоже, все еще влияют на разрешения на стороне Windows, они по-прежнему применяются Samba. Если у каталога были root:backup 0660разрешения, то случайный пользователь Domain Userне будет иметь доступа к этому каталогу, даже если в списках ACL Windows была запись для Domain Users. Изменение группы с backupна , usersгде usersсопоставлено с группой NT Domain Users, тогда это сработает. Так что ясно, что разрешения UNIX по-прежнему применяются.

Есть ли настройка, чтобы Windows ACL наложили вето на остальное, т. е. если Windows ACL разрешают Domain Users, то они будут разрешены независимо от того, что могут сказать разрешения UNIX? Или я могу просто отключить Samba, используя разрешения UNIX?

Другой вопрос, как Samba хранит разрешения UNIX. В новой конфигурации у меня было inherit owner = yes. Это, казалось, работало как и ожидалось как в Windows, так и в UNIX, за исключением случаев, когда я пытался изменить группу UNIX на что-то другое. Изначально бит setgid был установлен на общих ресурсах с johnих группой, думая, что inherit ownerэто влияет только на владельца, а не на группу. Однако при удалении бита setgid из общих ресурсов и изменении группы на usersрекурсивно, с inherit owner = yesновыми файлами и каталогами, созданными из клиента Windows 10, они все еще создавались с группой john. Нигде в дереве каталогов не осталось каталога с группой john, я попробовал перезапустить свой клиент Windows и сервер Samba на всякий случай, но это ничего не изменило.

Сохраняет ли Samba разрешения UNIX в другом месте, так что мое изменение группы UNIX непосредственно из файловой системы не влияет на группу, отслеживаемую Samba? Или в чем может быть причина того, что Samba все еще использует эту старую группу для новых файлов и каталогов?

Ниже вы можете найти потенциально релевантные параметры конфигурации Samba версии 4.7.6. Если вам нужна дополнительная информация, дайте мне знать.

[global]
access based share enum = yes
acl group control = no
acl map full control = yes
acl_xattr:ignore system acls = yes
acl_xattr:default acl style = windows
create mask = 0775
directory mask = 0775
dos filemode = yes
dos filetime resolution = no
dos filetimes = yes
ea support = no
force create mode = 0600
force directory mode = 0600
force unknown acl user = no
guest account = nobody
guest ok = no
guest only = no
inherit acls = no
inherit owner = unix only
inherit permissions = no
invalid users = root
map acl inherit = yes
map archive = no
map hidden = no
map readonly = no
map system = no
map to guest = never
nt acl support = yes
obey pam restrictions = no
read only = yes
restrict anonymous = 2
security = user
server role = active directory domain controller
store dos attributes = yes
unix extensions = yes
vfs objects = dfs_samba4 acl_xattr shadow_copy2

[backups]
create mask = 0660
directory mask = 0770
ea support = yes
path = /mnt/pool/backups
read only = no

решение1

Сохраняет ли Samba разрешения UNIX в другом месте, так что мое изменение группы UNIX непосредственно из файловой системы не влияет на группу, отслеживаемую Samba? Или в чем может быть причина того, что Samba все еще использует эту старую группу для новых файлов и каталогов?

Я смог найти ответ только на этот второй вопрос. Во время моих экспериментов с inherit ownerя в какой-то момент захотел узнать, какие значения были сохранены как часть списков контроля доступа NT, поэтому я проверил каталог с samba-tool ntacl get /path/to/dirи к своему удивлению увидел старый GID как значение group_sid. И поскольку у меня больше не было никаких других ссылок на старый GID где-либо еще в файловой системе, это кажется вероятной причиной того, что Samba удерживает старую группу UNIX, особенно потому, что всякий раз, когда я устанавливаю inherit owner на unix onlyили no, у него не будет старой группы UNIX. Таким образом, очевидно, установка inherit ownerна yes(ie unix and windows), заставляет Samba устанавливать группу UNIX на группу, сохраненную в списках контроля доступа NT.

Я все еще хотел бы получить ответ на первый вопрос, но я нашел обходной путь, найдя способсопоставить группу NT Domain Usersс моей предпочитаемой группой UNIXи установка разрешений для других на 0 с помощью POSIX ACL: setfacl -Rm d:o:---,o:--- /my/share.

Связанный контент