Я создаю резервный сервер с использованием 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
.