
Недавно я настроил gitolite, где пользователи получают доступ к репозиторию git под пользователем «gitolite» через ssh.
Теперь я хотел бы интегрировать это в LDAP. У каждого пользователя есть публичный ключ в LDAP, и если у него есть "git" objectClass, он сможет получить доступ к пользователю "gitolite" через ssh.
Я знаю, что можно хранить открытые ключи в LDAP, но не уверен, возможно ли разрешить аутентификацию в учетной записи «gitosis» на основе objectClass.
РЕДАКТИРОВАТЬ:Для ясности, с помощью objectClass git пользователь "foobar" сможет войти как "gitolite" через ssh
решение1
Авторгитолитдобавил некоторые функции, которые помогают поддерживать внешние хранилища ключей и информацию о членстве в группах. ПоискИЗМЕНЕНИЯдля LDAP-протокола.
Чтобы использовать внешнее хранилище ключей,sshdнеобходимо поддерживать обычный .ssh/authorized_keys
файл (это файл, который говоритsshdбежатьgl-auth-командакогдагитолитПользователь входит в систему).
- Отключите обычную генерацию ключа аутентификации (на основе ключа
keydir
из репозиторияgitolite-admin
):
$GL_NO_SETUP_AUTHKEYS = 0;
в вашем.gitolite.rc
. - Периодически (всякий раз при изменении ключа, добавлении пользователя и т. д.):
- Извлеките все ключи SSH из вашего хранилища ключей в какой-нибудь удобный временный каталог (используйте те же имена для файлов ключей, как если бы они находились в обычном репозитории
keydir
). - Бегатьgl-setup-authkeysиметьгитолитперестроить свою часть файла
authorized_keys
.
- Извлеките все ключи SSH из вашего хранилища ключей в какой-нибудь удобный временный каталог (используйте те же имена для файлов ключей, как если бы они находились в обычном репозитории
Видетьсообщение о фиксации, которое представилоgl-setup-authkeysдля собственного описания автора.
Использование внешне определенных групп пользователей немного сложнее, поскольку обычно это подразумевает включение другой программы между ними.sshdиgl-auth-команда(членство в группах передается как дополнительные аргументыgl-auth-команда). Видеть«группы пользователей и LDAP/подобные инструменты».
решение2
Если вы хотите попробовать что-то немного необычное, вы делаете .ssh/authorized_keys2 именованным каналом и пишете скрипт/программу, которая запрашивает LDAP, выполняет надлежащую фильтрацию, а затем выдает содержимое ключей authorized_keys. Я предлагаю authorized_keys2, поскольку вы, вероятно, уже используете authorized_keys.
Вам придется быть осторожным со скриптом (следить за блокирующими записями, знать, когда делать новый запрос и т. д.), но он будет выдавать вам правильный ответ каждый раз, если вы все сделаете правильно.