Общая папка в Linux

Общая папка в Linux

как создать действительно общую папку на сервере 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.

Надеюсь, это будет полезно.

Связанный контент