Я размещаю свой собственный репозиторий git на VPS. Допустим, мой пользователь Джон.
Я использую протокол ssh для доступа к своему репозиторию git, поэтому мой URL-адрес что-то вроде ssh://john@myserver.com/path/to/git/myrepo/
.
Root является владельцем всего, что находится под /path/to/git
Я пытаюсь дать Джону доступ на чтение / запись ко всему, что находится под /path/to/git/myrepo
Я пытался как chmod
и setfacl
для контроля доступа, но и не в состоянии точно так же: они применяются права рекурсивно (с нужными опциями) для всех текущих существующих подкаталогов из /path/to/git/myrepo
, но как только будет создан новый каталог, мой пользователь не может написать в новом каталоге.
Я знаю, что в git есть хуки, которые позволили бы мне повторно применять права после каждого коммита, но я начинаю думать, что иду по неправильному пути, потому что это кажется слишком сложным для очень простой цели.
В : Как мне установить свое право на доступ к Джону для любого пользователя /path/to/git/myrepo
и сделать его устойчивым к изменениям древовидной структуры?
Q2 : Если я должен сделать шаг назад, изменить общий подход, пожалуйста, скажите мне.
Изменить : На вопрос был дан ответ как есть, но это был неправильный вопрос. Правильный вопрос был бы «Как настроить пустой git-репозиторий на сервере для использования с ssh-доступом?». Смотрите мой собственный ответ.
источник
g+s
. Конечно, вы должны сначала понять основыchmod
тоже.{}
- это заполнитель для замены имени файла.;
является терминатором команды, выполняемой-exec
. Как;
имеет особое значение вbash
этом должно быть экранировано с \. смman find
подробностиНа самом деле это был неправильный подход. После дополнительных исследований я обнаружил, что в моем случае я должен использовать встроенные функции git для управления правами файловой системы в хранилище.
В основном это делается с помощью
shared
опцииgit init
, которая может иметь (среди прочего) следующие значения:group
: инициализировать репозиторий, чтобы у файлов и каталогов были права на запись для пользователей и групп, а для всех остальных - права на чтение0660
: то же самое, но без доступа для чтения для других.Вновь созданные каталоги и файлы автоматически имеют необходимые разрешения. Вы также можете использовать
git init
существующий репозиторий, чтобы перенастроить его без потери его содержимого.Итак, в конце концов, что я должен был сделать:
mygitrepo
root:mygitrepo
И теперь каждый пользователь группы может тянуть / толкать, а никто другой не может, и это без суеты с правами файловой системы.
http://www.kernel.org/pub/software/scm/git/docs/git-init.html для получения дополнительной информации.
источник
Если ACL поддерживаются, вы можете сделать это с ACL по умолчанию. Помните, что о них легко забыть, так как они не появляются, когда вы делаете
ls -l
.Но я подозреваю, что вы можете сделать что-то более организованное. Развертывание гитолита может обеспечить лучшее решение.
источник
ls
(и я думаю, что Squeeze) вы получаете+
в конце разрешения, чтобы сказать, что есть ACL:drwxr-xr-x+ 2 anthony anthony 4096 Sep 28 11:16 i-have-an-acl
find ... -exec cmd {} +
синтаксис, где{}
заменяется как можно больше найденных имен файлов (в отличие от того,{} \;
где{}
заменяется только один найденный файл за один раз)