Назад | Перейти на главную страницу

Разрешить пользователю доступ к одному репозиторию Git

Рассмотрим сервер, на котором размещено несколько репозиториев Git:

$ ls -l /opt/git/
drwxrwxr-x 7 ubuntu root   4096 Jan  2  2014 george.git
drwxrwxr-x 7 ubuntu root   4096 Dec 29  2013 john.git
drwxrwsr-x 7 ubuntu root   4096 Jul  4  2013 paul.git
drwxrwsr-x 7 ubuntu root   4096 Jun 30  2013 ringo.git

До сих пор все разработчики имели доступ ко всем репозиториям Git через SSH. Сейчас я добавляю разработчика, который должен иметь доступ только к john.git репо. Я создал пользователя Linux yoko но я не уверен, как мне позволить yoko доступ к /opt/git/john.git каталог самым безопасным способом, не давая ему доступа к другим каталогам в /opt/git/.

Каков канонический способ ограничения доступа как такового?

Я склоняюсь к тому, чтобы john.git как группа foobar и добавьте эту группу к пользователю yokoгруппы. Однако что произойдет, если позже мне понадобится добавить еще одного пользователя, который сможет получить доступ к двум репозиториям? Например, я могу добавить пользователя cynthia с доступом к обоим john.git и чтобы paul.git. Должен ли я иметь отдельную группу для каждого репозитория Git? Я видел, что очень быстро становится громоздким

Обратите внимание, что эти пользователи должны иметь доступ к ничего кроме их собственного /home/user/ каталоги и, кроме того, разрешенные репозитории Git. Если есть способ символической ссылки, т.е. /home/yoko/john.git к /opt/git/john.git таким образом, чтобы предотвратить доступ к остальной /opt/git/ это было бы лучше всего, однако я не могу настроить систему как таковую.

На сервере работает Ubuntu Server 12.04, но я мог бы обновить его до 14.04, если в этом возникнет необходимость. Пользователи подключаются через SSH с использованием ключей RSA, без пароля. Они будут выступать git pull и git push на сервере ничего лишнего.

Для небольшого количества репозиториев групповой подход работает нормально. Да, каждому репо потенциально нужна своя собственная группа, и это становится громоздким, если у вас больше репозиториев. Как упоминал @AlexeyTen в комментариях, если у вас большее количество репозиториев или вы хотите более «высокоуровневый» интерфейс управления, вам следует взглянуть на менеджер репо, такой как gitolite или gitlab. Gitolite управляется с помощью текстовых файлов в репозитории git (файлы конфигурации и ключи SSH передаются в специальный репозиторий git и отправляются, и все настроено). Gitlab, с другой стороны, представляет собой универсальное веб-приложение, похожее по концепции на автономный Github. Если вам не нужны все навороты, гитолит почти наверняка отлично справится с этой задачей.