Samba - создание общих подкаталогов с собственными разрешениями

9

У меня есть общий ресурс Samba, содержащий много таких папок:

share
  - folderA
  - folderB
  - folderC
  - folderD

Есть около 20 пользователей, которые получают доступ к этим ресурсам. Каждый пользователь может иметь индивидуальный доступ к некоторым из каталогов, например, Бен может обращаться к папке A и папке C, но не к папке B и папке D. Дженни может получить доступ к папке B и папке C и так далее.

Я не хочу, чтобы пользователи монтировали каждую нужную им папку. Я хочу, чтобы они смонтировали папку «share», которая содержит все подпапки. Затем доступ ограничивается установкой разрешений linux.

Я создал группу для каждого подкаталога и добавил пользователей в эти группы. Контроль доступа отлично работает для существующих файлов. Но всякий раз, когда пользователь создает файл в подкаталоге, он запрещается для любого другого пользователя, имеющего разрешение на чтение / запись в этом каталоге. Чтобы решить эту проблему, я поиграл с маскировкой самбы, но не смог заставить ее работать.

Мой Samba Conf выглядит так:

guest ok = no

[global]
workgroup = WORKGROUP
security  = user
encrypt passwords = yes

[Share]
path        = /var/samba
valid users = @everybody
read only   = no
writeable   = yes

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderA

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderB

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderC

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderD

Таким образом, очевидно, что каждый пользователь входит в группу, поэтому они могут смонтировать общий ресурс с подкаталогами. Доступ к каждому подкаталогу работает отлично. Но всякий раз, когда Бен создает файл в папке C, файл получает права доступа к файлу -rwxr - r--, но это должно быть -rwxrwx ---

Я думаю, что общие папки для отдельных папок вообще не работают, потому что я попытался установить writeable = no и read only = yes, чтобы проверить это. Перезапустил smbd и nmbd и перемонтировал сетевой ресурс (в Windows 10). Пользователи могли создавать файлы и изменять свои собственные.

Это работает на малиновом пи с малиновым. Жесткий диск с файлами отформатирован как ext4 и смонтирован через fstab.

Soner
источник
Для форсирования желаемых прав доступа к файлам используйте force create mode = 770оператор в folderCразделе вашей конфигурации.
Олег Болден
Спасибо, это на самом деле не решило проблему, но я заметил, что у меня есть пробелы в путях моего реального файла smb.conf: [folderA] path = / var / samba / некоторая папка с пробелами. Я решил эту проблему, заключив путь в "(" / var / samba / некоторая папка с пробелами "). Настройки в параграфе [folderA] используются только тогда, когда пользователь монтирует [folderA] напрямую, но настройки не являются используется, когда пользователь монтирует [share] и перемещается в папку A. Настройки для [share] используются для папки A. Как я могу обойти настройки [share] для папки A, не монтируя папку A напрямую, а получая к ней доступ из [share]?
soner

Ответы:

5

Попробуйте этот конфиг (для разделов общего доступа):

[Share]
path        = /var/samba
valid users = @everybody
force group = +everybody
writeable   = yes
create mask = 0660
force create mode = 0110
directory mask = 0770

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
force group = +users_folderA
browseable = no

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
force group = +users_folderB
browseable = no

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
force group = +users_folderC
browseable = no

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
force group = +users_folderD
browseable = no

Не забудьте проверить настройки и перезапустить samba:

# testparm
# service smbd restart
# service nmbd restart

Установить разрешения:

chown root:everybody /var/samba
chmod 770 /var/samba
chown root:users_folderA /var/samba/folderA
chmod 2770 /var/samba/folderA
chown root:users_folderB /var/samba/folderB
chmod 2770 /var/samba/folderB
chown root:users_folderC /var/samba/folderC
chmod 2770 /var/samba/folderC
chown root:users_folderD /var/samba/folderD
chmod 2770 /var/samba/folderD

Таким образом, прямой доступ к внутренним папкам не разрешен. Более того, они вообще не видны и доступны только через родительскую папку.

Олег Болден
источник
Спасибо, это сработало. Теперь у нас есть еще одна проблема - Excel 2016 не может сохранять файлы размером более 13 КБ в Samba. Но это другая тема. Большое спасибо за помощь!
soner