
как создать действительно общую папку на сервере Linux? Я хочу, чтобы члены команды проекта могли читать и записывать каждый файл, как будто это их собственный файл, независимо от того, скопировали ли они или переместили файл в папку, создали ли его сами внутри папки или файл был создан другими.
На данный момент я столкнулся со следующими проблемами:
- umask работает только на общесистемном уровне и игнорирует существующие файлы
- Списки управления доступом игнорируют файлы, перемещенные в папку пользователем.
- inotify кажется хаком, потому что он впоследствии исправляет разрешения, что может вызвать проблемы с некоторыми офисными документами
- регулярно
chgrp -R projectteam /folder/
вызывает проблемы с производительностью, задержками и резервным копированием.
Мое текущее решение — это общий ресурс SAMBA, смонтированный на том же сервере force user
и force group
включенный. Однако это обременительно для администрирования нескольких групп проектов, и я думаю, что я получаю удар по производительности.
Любая помощь или идея будут оценены по достоинству. Я использую Debian 10.
С наилучшими пожеланиями из Гамбурга, Германия
Майкл
решение1
Если всем пользователям проекта назначена общая группа проекта, вы можете установить бит 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
Надеюсь это поможет.
решение2
Вам нужно выстроить несколько уровней конфигурации, и это может значительно упростить администрирование.
Как предположил Абишек, установка бита setgid для каталога весьма полезна, поскольку она делает группу владельцев каталога наследуемой по умолчанию для вновь создаваемых файлов и каталогов.
Однако, как вы заметили, скопированные файлы сохраняют свое право собственности. Для переустановки права собственности группы подход incrontab хорош. Более современный подход будет использовать файл systemd .path для отслеживания изменений и соответствующий файл .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) суперпользователю oberst и указанной группе и не дает никаких разрешений другим (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 запрещает другим (т. е. не членам группы) просматривать общие ресурсы. Обратите внимание на префикс "@" в директиве valid 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.
Надеюсь, это будет полезно.