Как изменить права доступа к подпапке Samba?

Вопрос или проблема

У меня есть сервер Samba с ROLE_DOMAIN_MEMBER в Active Directory. Моя главная цель – установить разные разрешения для подпапок на каждой общей папке. Это можно сделать с помощью acl в Linux или графического интерфейса разрешений Windows, но я предпочитаю графический интерфейс Windows. В этом случае пользователи могут делать это сами.

Я уже пытался изменить разрешения с помощью chmod, chown, acl, графического интерфейса Windows и консольного графического интерфейса Windows, и я могу изменить разрешения для подпапки, но, похоже, это не работает, и только группы, добавленные к samba-share, работали для меня и для подпапок.

valid users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"
admin users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"

Я распечатываю здесь весь свой smb.cfg и тестовую общую папку:

[global]
# No .tld
workgroup = DOMAIN
netbios name = samba4
server string = %h server (Samba, Ubuntu)
# Active Directory System
security = ads
# With .tld
realm = DOMAIN.LOCAL
# Just a member server
domain master = no
local master = no
preferred master = no
dns proxy = no
# Disable printing error log messages when CUPS is not installed.
printcap name = /dev/null
load printers = no
printcap cache time = 0
#additional section
obey pam restrictions = yes
map to guest = bad user
dns proxy = no
vfs objects = acl_xattr
map acl inherit = yes
nt acl support = yes
acl map full control = yes
#acl compatibility = auto
store dos attributes = yes
map archive = no
map hidden = no
map read only = no
map system = no
# Works both in samba 3.2 and 3.6.
#idmap backend = tdb
# no .tld
idmap config * : backend = tdb
idmap config * : range = 10000-99999
winbind enum users = yes
winbind enum groups = yes
# This way users log in with username instead of [email protected]
winbind use default domain = yes
# Inherit groups in groups
winbind nested groups = yes
winbind refresh tickets = yes
winbind offline logon = true
#winbind separator = \
# Becomes /home/example/username
template homedir = /home/%D/%U
#logon drive = H:
#logon home = \\smb\%U
# No shell access
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
#password server = dc01.domain.local, dc02.domain.local
password server = *
encrypt passwords = yes
unix password sync = yes
pam password change = yes
smb passwd file = /etc/samba/smbpasswd
os level = 20
restrict anonymous = 2
log file = /var/log/samba/samba.log
log level = 3
#logging = syslog@1 /var/log/samba/log.%m
vfs objects = full_audit
full_audit:success = mkdir rmdir unlink pwrite
full_audit:prefix = %u|%I|%m|%S
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice
recycle:repository = /home/recycle/
recycle:keeptree = yes
recycle:versions = yes
max log size = 100000
panic action = /usr/share/samba/panic-action %d
guest ok = yes

[test$]
        path = /FS/test$
        browseable = yes
        read only = no
        inherit acls = yes
        inherit permissions = yes
        create mask = 700
        directory mask = 700
        valid users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"
        admin users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"

┌─[root@samba4]─[/FS]
└──╼ #ls -ld test\$/
drwxrwx---+ 6 root root 4096 Jun 25 15:44 test$/

Конфигурация ACL:

cat /boot/config-4.4.0-87-generic  | grep _ACL
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

Мой fstab:

UUID=4ec48dfe-c45d-124b-8145-09fe59cfad9b /FS ext4 relatime,acl,user_xattr,errors=remount-ro 0 1

В samba.log я вижу проблему с разрешениями acl, когда я пытаюсь изменить разрешения для тестового каталога.

set_nt_acl: не удалось установить acl файла на файл test (Операция не разрешена).

Также я изменил разрешение для тестового каталога на 777 и удалил параметры “create mask”, “directory mask”, “admin users”. Теперь я не могу даже добавить нового пользователя к разрешениям файла.

Если вы хотите использовать разрешения Windows, вам нужно убрать контроль разрешений UNIX/Linux, который их переопределяет.

chmod 777 '/FS/test$'

Удалите эти строки из определения вашей общей папки:

create mask = 700
directory mask = 700
admin users = ...

Ответ или решение

Для изменения прав доступа на подпапки Samba в вашей ситуации, учитывая, что вы используете Samba на сервере с ролью ROLE_DOMAIN_MEMBER в Active Directory, важно понимать, как одновременно управляются права доступа Samba и Unix/Linux. Вот пошаговое руководство по решению вашей проблемы и настройке прав доступа через графический интерфейс Windows.

Шаг 1: Подготовка конфигурации Samba

Чтобы добиться правильного функционирования прав доступа, сначала внести изменения в вашу конфигурацию Samba, в частности в секцию для расшаренной папки.

Измените опции в конфигурационном файле/etc/samba/smb.conf:

  1. Удалите или закомментируйте строки, которые ограничивают права доступа:

    # create mask = 700
    # directory mask = 700
    # admin users = ...

    Полное удаление этих строк позволит Windows-клиентам устанавливать права доступа без вмешательства Unix-подсистемы.

  2. Убедитесь, что вы используете следующие параметры:

    inherit acls = yes
    inherit permissions = yes

    Эти параметры помогут передать разрешения от родительской папки к создаваемым подпапкам.

Шаг 2: Настройка разрешений UNIX и ACL

  1. Измените права доступа на папку до 777:
    Это временная мера, чтобы гарантировать, что права доступа не мешают работе Samba.

    chmod 777 /FS/test$
  2. Проверьте поддержку ACL:
    Убедитесь, что у вас включены необходимые параметры файловой системы для поддержки ACL. Если вы уже добавили acl и user_xattr в ваш /etc/fstab, это значит, что вы на правильном пути:

    UUID=4ec48dfe-c45d-124b-8145-09fe59cfad9b /FS ext4 relatime,acl,user_xattr,errors=remount-ro 0 1
  3. Установите необходимые ACL для папки:
    Используйте команды setfacl, чтобы разрешить доступ пользователям на уровне Unix, если это необходимо.

    setfacl -m u:DOMAIN.LOCAL\username:rwx /FS/test$

Шаг 3: Проверка Samba и Windows

  1. Перезапустите Samba:
    После внесения изменений в конфигурацию обязательно перезапустите Samba для применения новых настроек:

    systemctl restart smbd
  2. Используйте Windows GUI для изменения прав:
    Теперь пользователи могут подключиться к расшаренной папке и использовать стандартные методы Windows для управления разрешениями:

    • Щелкните правой кнопкой мыши на папке, выберите "Свойства".
    • Перейдите на вкладку "Безопасность".
    • Вы можете изменять группы и пользователей, и настраивать их права доступа.

Шаг 4: Возможные ошибки и их устранение

Если вы все еще сталкиваетесь с ошибками, такими как set_nt_acl: failed to set file acl on file test (Operation not permitted), это может быть связано с:

  • Некорректными правами на уровне файловой системы: Возможно, что chmod не был корректно применен. Убедитесь, что права на папку правильно настроены.
  • Нет прав для учетной записи: Учитывайте, что права доступа в Windows могут быть ограничены учетными записями, и вам придется добавить эти учетные записи при необходимости.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...