У меня есть определенный каталог, в котором есть проект, который используется несколькими пользователями. Эти пользователи используют SSH для получения доступа к этому каталогу и изменения / создания файлов.
Этот проект должен быть доступен для записи только определенной группе пользователей: давайте назовем его «mygroup». Во время сеанса SSH все файлы / каталоги, созданные текущим пользователем, должны по умолчанию принадлежать группе «mygroup» и иметь права на запись в группу.
Я могу решить проблему с разрешениями umask
:
$ cd project
$ umask 002
$ touch test.txt
Файл «test.txt» теперь доступен для записи в группе, но все еще принадлежит моей группе по умолчанию («mislav», так же, как мое имя пользователя), а не «mygroup». Я могу chgrp
рекурсивно установить желаемую группу, но я хотел знать, есть ли способ неявной установки некоторой группы, например, когда umask изменяет разрешения по умолчанию во время сеанса.
Этот конкретный каталог является общим репозиторием git с рабочей копией, и я хочу git checkout
и с помощью git reset
операций установить правильную маску и группу для новых файлов, созданных в рабочей копии. ОС Ubuntu Linux.
Обновление: коллега предлагает мне взглянуть на getfacl / setfacl POSIX ACL, но приведенное ниже решение в сочетании с umask 002
текущим сеансом достаточно для меня и гораздо проще.
Если вы хотите сделать это с существующей папкой, вам нужно убедиться, что бит setgid включен также для всех подпапок. Тем не менее, вам не нужно это для файлов, и вы, вероятно, не хотите это для файлов тоже. Вот как установить его для всех подпапок рекурсивно.
источник
Я не могу найти исходный код, но использование
setgid
для решения этой проблемы для обычных git-репозиториев, которое, как я полагаю, в вашем случае, устарело и может вызывать проблемы в некоторых случаях.Git может позаботиться обо всем этом через
core.sharedRepository
флаг. У меня была такая же проблема, и я решил ее следующим образом:Предполагая,
repogroup
что ваша группа, и у вас естьcd
в каталог репо:Сначала измените общий флаг на
group
:Примечание: здесь вы должны использовать ключевое слово
group
, а не имя группы. Это эквивалентно созданию пустого хранилища с опцией--shared=group
.Затем измените группу для всего хранилища:
Чтобы убедиться, что существующие каталоги являются group-writeable (
g+w
), а существующие исполняемые файлы также становятся исполняемыми группами (g+X
), вам также необходимо:После того, как вы это сделаете, git соблюдает
shared=group
флаг и позаботится о разрешениях группы в следующем, как для существующих, так и для новых файлов, так что вам больше не понадобится сноваumask
илиchgrp
.Я поставлю источник в комментарии, если найду его обратно.
источник
Я не очень разбираюсь в вопросах * nix, но я думаю, что то, что вы ищете, называется setgid.
Смотрите здесь .
источник
Трудно наследовать разрешения родительского каталога в Linux / UNIX без использования ACL. но есть способ назначить права доступа к файлу по умолчанию, проверьте ниже ссылку
Можете ли вы наследовать разрешения родительского каталога.
источник