Gitolite
Обновлено 6 мая 2019
Gitolite — удобное средство, позволяющее управлять Git-репозиториями через один пользовательский аккаунт. Управление доступом пользователей к репозиториям осуществляется на основе SSH-ключей. Gitolite позволяет гибко настраивать доступ к репозиториям, управляя несколькими репозиториями под одной учетной записью пользователя, с использованием SSH-ключей для идентификации. Конечным пользователям не нужны учетные записи на сервере, они будут входить через один общий аккаунт, который не позволит им запускать произвольные команды.
Заметка
Статья написана с учётом работы Git-клиента в ОС Windows.
Установка Gitolite
Для установки программы выполните:
emerge -a dev-vcs/gitolite
После установки будет создан пользователь git без пароля с домашней директорией /var/lib/gitolite/.
Настройка Gitolite
Создайте ключи для root:
ssh-keygen -t rsa
Будут созданы два файла:
- /root/.ssh/id_rsa.pub - публичный ключ
- /root/.ssh/id_rsa - закрытый ключ
Создание репозитория с настройками
Скопируйте открытый ключ:
cp /root/.ssh/id_rsa.pub /tmp/id_rsa.pub
Инициализация Gitolite
Выполните настройку от пользователя git
su git
cd
gitolite setup -pk /tmp/id_rsa.pub
exit
Заметка
Ключ -pk позволяет удалить данные прошлой настройки Gitolite, если они присутствовали на момент выполнения команды.
Удалите временную копию открытого ключа:
rm /tmp/id_rsa.pub
Если планируется использовать GitWeb, измените права доступа к директории, чтобы репозиторий с настройками не был виден в Web:
chmod 700 /var/lib/gitolite/repositories/gitolite-admin.git
Настройка репозитория пользователя
Склонируйте конфигурационный репозиторий в /tmp/gitolite-admin:
git clone git@имя_сервера:gitolite-admin.git /tmp/gitolite-admin
Перейдите в директорию с настройками:
cd /tmp/gitolite-admin
Скопируйте открытый ключ пользователя gituser в директорию /tmp/gitolite-admin/keydir любым удобным способом - например, командой для защищенного копирования файлов scp
:
scp root@userhostname:/home/gituser/.ssh/id_rsa.pub ./keydir/gituser.pub
Заметка
При этом имя файла открытого ключа клиента в каталоге /tmp/gitolite-admin/keydir является также именем пользователя в Gitolite.
Настройте новый репозиторий project1 пользователя gituser:
/tmp/gitolite-admin/conf/gitolite.conf
repo gitolite-admin RW+ = id_rsa repo project1 RW+ = gituser
Права могут быть указаны следующим образом:
"R - только чтение
"RW" - чтение добавление коммитов, запрещен rewind (push --force)
"RW+" - полный доступ
"RWC" - возможность создавать ветку
"RWD" - возможность удалять ветку
"-" - запретить запись
Объектами доступа могут быть:
"master@"" - ветки
"ref/tags" - теги (версии)
"NAME/имя_файла" - имена файлов/каталогов
Для создания группы используется следующий синтаксис:
"@groupname" = user1 user2 user3
Он же используется для группировки веток:
@importantbranches = master$ developer$ test$
repo testing
RW @importantbranches = @groupname
- @importantbranches = @groupname
RW+ = @groupname
Зафиксируйте и запишите настройки:
git commit -am "Granted full access for gituser@remotehost to project1""
git push origin master
Создание нового репозитория
В Gitolite можно предварительно не создавать репозиторий через --bare init - достаточно добавить его в конфигурационный файл. Соответствующий репозиторий будет доступен пользователю на его компьютере по открытому ключу SSH, без ввода пароля:
git clone ssh://git@имя_сервера/project1.git
Проверка sshd
sshd [ started ]
Должен быть разрешен доступ по SSH пользователю git:
/etc/ssh/sshd_config
AllowUsers git
Настройка Git-демон
/etc/conf.d/git-daemon
GITDAEMON_OPTS="--syslog --port=9418 --reuseaddr --base-path=/var/lib/gitolite/repositories/ --export-all" GIT_USER="apache"
Заметка
При проблеме перезапуска измените номер порта --port=9418 на другой номер, перезапустите git-daemon, измените обратно и ещё раз перезапустите демон git-daemon.
Создание пользовательского ключа в Linux
В сеансе пользователя на пользовательском компьютере выполните:
ssh-keygen -t rsa
В директории ~/.ssh будут созданы два файла:
- id_rsa - закрытый ключ
- id_rsa.pub - публичный ключ
Если публичный ключ записан в директорию keys репозитория настроек Gitolite на сервере, а в файле conf/gitolite.conf настроены права к репозиториям, то пользователь получит доступ к репозиториям на сервере.
Создание пользовательского ключа в Windows
Генерация пользовательского RSA-ключа производится с помощью встроенной в MinGW32-окружение утилиты ssh-keygen.exe
.
В результате в каталоге C:\Users\имя_пользователя\.ssh будут созданы созданы два файла:
- id_rsa - закрытый ключ
- id_rsa.pub - публичный ключ
Важно
Не переименовывайте приватный и публичный ключи SSH, так как cборка MinGW32 + Git-2.6.3 (32-bit) умеет работать только с ключом с именем id_rsa.
Настройка прав на файлы репозиториев
При сохранение файлов репозиториев gitolite присваивает их пользователю и группе git. Права же устанавливаются согласно параметру UMASK в файл /var/lib/gitolite/.gitolite.rc. Это может быть важно, если Git-демон запускается не под пользователем git.
Примеры прав доступа к репозиториям
Разрешить группе developers производить любые действия с репозиторием, кроме модификации ветки master:
conf/gitolite.conf
repo myrep - master$ = @developers RW+ = @developers
Запретить rewind для ветки master (это правило означает, что группа @developer может добавлять коммиты только в ветку master):
conf/gitolite.conf
repo myrep RW master$ = @developers
Разрешить группе developers выполнять любые действия с репозиторием, кроме создание тегов (теги может создавать только maindeveloper):
conf/gitolite.conf
repo myrep RW+ refs/tags = maindeveloper - refs/tags = @developers RW = developers