Многопользовательский сервер bzr
В настоящее время я изучаю, можно ли использовать bzr в настройках, аналогичных тому, что gitolite делает для git. Это означает одну учетную запись Unix, с различными пользователями, управляемыми через свои открытые ключи ssh. Я был бы счастлив интегрировать это с Gitolite, в этом случае управление пользователями и создание подходящего ~/.ssh/authorized_keys
может быть делегирован. Это позаботится об аутентификации.
Что меня беспокоит, так это разрешение. Насколько я вижу, bzr serve
из коробки есть только --directory
флаг для обеспечения контроля доступа. Это хорошо подходит для предоставления каждому пользователю своего собственного набора репозиториев или для назначения пользователей в группы и предоставления каждой группе одного фиксированного набора репозиториев. Приложив немного больше работы, можно использовать один каталог для каждого пользователя, но использовать символические ссылки, чтобы предоставить общий доступ к репозиториям для нескольких пользователей.
Тем не менее, это все еще намного меньше, чем то, что может сделать гитолит. Используя этот подход, невозможно предоставить отдельным пользователям доступ только для чтения к некоторым, но доступ для чтения и записи к другим репозиториям. Также невозможно предотвратить перезапись толчков или создание новых репозиториев в каталогах пользователя.
Возможно, эти функции еще не реализованы. В связанном вопросе переполнения стека я спрашиваю о способах реализовать это самостоятельно. Здесь на Server Fault я концентрируюсь на существующих решениях. Есть ли готовые к использованию решения, которые наделяют bzr serve
с более детальным контролем доступа, чем простой --directory
ограничение? Полностью интегрированное решение, такое как gitolite, было бы наиболее интересным, но было бы неплохо знать даже какое-либо расширение, которое может быть настроено для решения одной из упомянутых мной проблем.
1 ответ
Если у вас нет жестких настроек только для одного пользователя, вы можете рассмотреть следующую настройку:
- У каждого пользователя есть свой UID.
- umask для всех пользователей bzr - 002.
- Каждый репозиторий имеет UID владельца и уникальную группу разрешений на запись.
- Каждый репозиторий имеет каталог, основанный на дереве UID владельца.
- Каждый каталог репозитория является sgid (
chmod g+s <repo>
). - Каждый каталог репозитория имеет владельца файла по умолчанию rwX (
setfacl -R -m d:u:UID:rwX <repo>; setfacl -R -m u:UID:rwX <repo>
). Это гарантирует, что владелец всегда может удалить. - Каждый каталог имеет режим 775 и каждый файл 664.
- При совместном использовании репозитория он помещается в каталог UID, как вы упомянули, используя ограничение каталога.
- При предоставлении доступа на запись в хранилище пользователь добавляется в группу разрешений на запись, связанную с этим хранилищем.
Таким образом, вы можете контролировать доступ на чтение с помощью "символической ссылки существует" и доступ на запись с помощью "пользователя в группе". Если вы хотите реализовать несколько мастер-пользователей для репозитория, вы можете добавить дополнительный d:u:UID:rwX,u:UID:rwX, по одному для каждого дополнительного мастера.