как мне создать действительно общую папку на сервере Linux? Я хочу, чтобы члены проектной группы могли читать и записывать каждый файл, как если бы они были их собственными, независимо от того, скопировали ли они или переместили файл в папку, создали его сами внутри папки или если файл был создан другие.
Пока что столкнулся со следующими проблемами:
chgrp -R projectteam /folder/
вызывает проблемы с производительностью, задержками и резервным копированием.Мое текущее решение - это общий ресурс SAMBA, установленный на одном сервере с force user
и force group
включен. Однако это обременительно для администрирования нескольких проектных групп, и я думаю, что у меня падает производительность.
Любая помощь или идея будут очень благодарны. Я запускаю Debian 10.
С наилучшими пожеланиями из Гамбурга, Германия.
Майкл
У вас есть несколько уровней конфигурации, которые нужно выстроить, и это может быть сделано для упрощения администрирования.
Как предположил Абхишек, установка бита setgid для каталога очень полезна, потому что это делает групповое владение каталогом наследуемым по умолчанию для вновь создаваемых файлов и каталогов.
Однако, как вы заметили, скопированные файлы сохраняют свои права собственности. Для переустановки группового владения хорош подход incrontab. Более современный подход будет использовать файл .path systemd для отслеживания изменений и соответствующий файл .service для запуска chgrp.
Чтобы ответить на ваш вопрос о настройке для поддержки многих групп проектов, примите во внимание следующее:
Во-первых, помните, что Samba обеспечивает только аутентификацию и зависит от разрешений файловой системы и учетных записей пользователей хоста.
Установите для umask значение 0002, что по умолчанию разрешает групповые права на запись.
Создайте учетную запись хоста для каждого пользователя:
sudo useradd andreas
sudo useradd beatrix
sudo useradd ciela
Создайте "суперпользователя" данных, отличного от root, для административных целей:
sudo useradd oberst
Создайте группу для каждого проекта:
sudo groupadd hund
sudo groupadd katz
Создайте каталог данных для каждого проекта, установите разрешения (включая бит setguid) и владельца. Следующее устанавливает бит setgid (2), дает полные разрешения (7) суперпользователю и указанной группе и не дает никаких разрешений другим (0), поэтому члены группы не могут читать, писать или выполнить:
sudo mkdir /srv/hund
sudo chown oberst:hund /srv/hund
sudo chmod 2770 /srv/hund
sudo mkdir /srv/katz
sudo chown oberst:katz /srv/katz
sudo chmod 2770 /srv/katz
Добавить пользователей в группы:
sudo usermod -a -G hund andreas
sudo usermod -a -G hund beatrix
sudo usermod -a -G katz beatrix
sudo usermod -a -G katz ciela
Добавьте пользователей в Samba:
sudo smbpasswd -a andreas
sudo smbpasswd -e andreas
sudo smbpasswd -a beatrix
sudo smbpasswd -e beatrix
sudo smbpasswd -a ciela
sudo smbpasswd -e ciela
Отредактируйте smb.conf для создания общих ресурсов. Read-only = no разрешает доступ для записи, а browsable = no запрещает другим (т. Е. Не членам группы) просматривать общий ресурс. Обратите внимание на префикс «@» в допустимой директиве users, которая определяет доступ по ссылке на группы узлов:
[hund]
path=/srv/hund
read only=no
browsable=no
force group=hund
valid users=@hund
[katz]
path=/srv/katz
read only=no
browsable=no
force group=katz
valid users=@katz
Теперь (возможно, после перезагрузки) / srv / hund доступны (чтение / запись) для andreas и beatrix, но не для ciela, а / srv / katz могут быть доступны (для чтения / записи) для beatrix и ciela, но не для andreas.
Все, что необходимо для изменения доступа пользователя, - это просто изменить членство в группе с помощью usermod.
Конечно, вы также должны настроить пароли для учетных записей хоста и Samba.
Надеюсь, это будет полезно.
Если всем пользователям проекта назначена общая группа проектов, вы можете установить бит setgid в каталоге проекта (а также в его подкаталогах):
find /path/to/teamfolder -type d -exec chmod g+s '{}' \;
Также установите разрешения ACL для каталога проекта, например:
setfacl -d -m u::rwx,g::rwx,o::r-x /path/to/teamfolder
Когда для каталога установлен бит setgid, все файлы, созданные в этом каталоге, наследуют групповое владение этим каталогом. Разрешения ACL позволят созданным файлам внутри каталога проекта иметь права записи для группы.
Нового пользователя можно добавить как:
sudo usermod -a -G projgrp newuser
Надеюсь это поможет.