Папка Samba с проблемой setgid

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

Я настраиваю файловый сервер с общим каталогом. Внутри находятся папки для каждого пользователя, которые доступны для чтения всем пользователям, и общий каталог, который доступен для чтения и записи всем пользователям. Папки для каждого пользователя довольно просты. Однако у меня есть некоторые проблемы с общим каталогом. Я выполнил стандартную процедуру создания каталога с установленным GID:

# chown root shared
# chmod -R ug+rwX shared
# chgrp -R users shared
# find shared -type d -exec chmod g+s "{}" \;
# find shared -type d -exec setfacl -m "default:group::rwx" "{}" \;

После того как я убедился, что все пользователи находятся в группе ‘users’, это прекрасно работает через прямой вход в консоль, ssh, rsync и т.д. Однако есть некоторые проблемы с samba.

При стандартной конфигурации samba бит SGID и GID распространяются, но новые файлы и папки не имеют установленного разрешения на запись для группы. Это, кажется, происходит потому, что ACL игнорируется. Согласно Samba игнорирует POSIX ACL, решение заключается в добавлении vfs objects = acl_xattr в smb.conf. Когда я это установил, разрешение на запись для группы было установлено правильно. Однако группа затем устанавливается как основная группа пользователя вместо группы родительского каталога, что в значительной степени подрывает цель установки бита GID. Я пробовал другие корректировки smb.conf, указанные в ссылке (map acl inherit = yes, store dos attributes = yes и inherit acls = yes), но это не дало результата. Как правильно это сделать?

Чтобы установить группу, пользователя и разрешения для новых файлов и папок, я использую эту конфигурацию на сервере (в smb.conf):

[shared-folder]
   writeable = yes
   force user  = "user"
   force group = "users"
   create mask = 0664
   force create mode = 0664
   directory mask = 0775
   force directory mode = 0755

Вы могли бы обрабатывать общий каталог таким образом, через отдельный общий каталог.

Примечание: как указано в комментариях, эта настройка может быть несовместима с ACL. Я рекомендую делать это только если вы собираетесь полагаться исключительно на UNIX-разрешения.

Если vfs objects = acl_xattr, то автоматически inherit acls = yes, в соответствии с мануалами, описывающими inherit acls в smb.conf:

Обратите внимание, что использование VFS модулей acl_xattr или acl_tdb, которые сохраняют
родные Windows как метаданные, автоматически включит эту опцию для
любого общего ресурса, для которого они загружены, так как они требуют этой опции для
правильной эмуляции Windows ACL.

И как только inherit acls включен,unix-режим, используемый для создания новых файлов/каталогов, будет 0777 (по сути, обнуляя бит setgid):

Включение этой опции устанавливает unix-режим на 0777, тем самым гарантируя,
что стандартные ACL каталогов пропагируются.

Явное указание inherit acls = no вместе с vfs objects = acl_xattr кажется работающим, но, вероятно, они не предназначены для совместного использования таким образом и могут иметь неизвестные или скрытые побочные эффекты.

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

Проблема с папкой Samba с установленным битом SGID

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

Текущая ситуация

Вы создали файловый сервер с общей директорией, в которой находятся пер-user папки и общая папка, доступная для чтения и записи. Однако возникли проблемы с настройкой общей папки: после установки битов SGID новосозданные файлы не унаследовали правильные права доступа и группу.

Причины проблемы

При настройке Samba в базовой конфигурации, применение битов SGID и GID происходит, но права на запись для группы не устанавливаются. Это связано с тем, что ACL игнорируются. Ваша попытка включить vfs objects = acl_xattr исправила некоторые аспекты, но вызвала проблему с назначением группы по умолчанию для пользователей.

Рекомендации по конфигурации Samba

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

  1. Измените smb.conf:

    [shared-folder]
       path = /путь/к/вашей/shared
       browsable = yes
       writable = yes
       force user = "user"
       force group = "users"
       create mask = 0664
       directory mask = 0775
       vfs objects = acl_xattr
       inherit acls = no

    Здесь мы фактически отключаем inherit acls, так как это может привести к неочевидным последствиям, как вы уже упоминали.

  2. Проверьте группы пользователей:

    Убедитесь, что все пользователи, которые должны иметь доступ к общей папке, находятся в группе users. Вы можете использовать команду groups имя_пользователя для проверки.

  3. Настройте права доступа на уровне системы:

    Если вы применяете POSIX ACL, проверьте, правильно ли они настроены на вашей файловой системе. Например, для установки прав по умолчанию на папку:

    setfacl -R -m "g:users:rwx" /путь/к/вашей/shared
    setfacl -R -d -m "g:users:rwx" /путь/к/вашей/shared

Проверка результатов

После внесенных изменений остановите и запустите Samba:

sudo systemctl restart smb nmb

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

Заключение

Правильная настройка прав доступа в Samba с использованием SGID и ACL может быть сложной задачей. Следуя предложенным рекомендациям, вы сможете обеспечить надежный доступ к общим ресурсам для всех пользователей. Если проблема не будет устранена, стоит обратиться к документации Samba или проконсультироваться с сообществом пользователей для более глубокого анализа.

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

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