Вопрос или проблема
У меня есть сервер 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
:
-
Удалите или закомментируйте строки, которые ограничивают права доступа:
# create mask = 700 # directory mask = 700 # admin users = ...
Полное удаление этих строк позволит Windows-клиентам устанавливать права доступа без вмешательства Unix-подсистемы.
-
Убедитесь, что вы используете следующие параметры:
inherit acls = yes inherit permissions = yes
Эти параметры помогут передать разрешения от родительской папки к создаваемым подпапкам.
Шаг 2: Настройка разрешений UNIX и ACL
-
Измените права доступа на папку до 777:
Это временная мера, чтобы гарантировать, что права доступа не мешают работе Samba.chmod 777 /FS/test$
-
Проверьте поддержку ACL:
Убедитесь, что у вас включены необходимые параметры файловой системы для поддержки ACL. Если вы уже добавилиacl
иuser_xattr
в ваш/etc/fstab
, это значит, что вы на правильном пути:UUID=4ec48dfe-c45d-124b-8145-09fe59cfad9b /FS ext4 relatime,acl,user_xattr,errors=remount-ro 0 1
-
Установите необходимые ACL для папки:
Используйте командыsetfacl
, чтобы разрешить доступ пользователям на уровне Unix, если это необходимо.setfacl -m u:DOMAIN.LOCAL\username:rwx /FS/test$
Шаг 3: Проверка Samba и Windows
-
Перезапустите Samba:
После внесения изменений в конфигурацию обязательно перезапустите Samba для применения новых настроек:systemctl restart smbd
-
Используйте 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. Это обеспечит гибкость и удобство для конечных пользователей без необходимости каждый раз обращаться к администратору.