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

Другие вопросы по тегам