Рассмотрим сервер, на котором размещено несколько репозиториев 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. Если вам не нужны все навороты, гитолит почти наверняка отлично справится с этой задачей.