Как я совместно использую репозиторий Мерзавца с многочисленными пользователями на машине?

Один инструмент, который я нашел удобными для сетевого укрепления, является nessus

В основном Вы настраиваете его на внешнем сервере, и это пытается напасть на Вашу сеть целым сильным ударом известного использования. Можно установить его для безопасного режима (где ни одно из нападений не должно разрушать сервер), или если Вы довольно уверены, что Вам исправили все или можете позволить себе перезагрузить Ваши серверы при необходимости для небезопасного режима.

Затем это предоставит очень полный градуируемый отчет для каждой машины, которую это видит, каких уязвимостей/слабых мест это находит, и оценивают их относительно серьезности - и даже рекомендуют действиям быть взятыми для решения проблем.

217
задан 17 June 2009 в 04:32
10 ответов

Полномочия являются вредителем.

В основном необходимо удостовериться, что все те разработчики могут записать во все в мерзавце repo.

Пропустите вниз к Решению Новой волны для превосходящего метода предоставления, что группа разработчиков пишет возможность.

Стандартное решение

При помещении всех разработчиков в особенно созданную группу можно, в принципе, просто сделать:

chgrp -R <whatever group> gitrepo
chmod -R g+swX gitrepo

Затем изменитесь umask для пользователей к 002, так, чтобы новые файлы были созданы с перезаписываемыми группой полномочиями.

Проблемами с этим является легион; если Вы находитесь на дистрибутиве, который принимает a umask из 022 (такие как наличие общего users группа, которая включает всех по умолчанию), это может открыть проблемы безопасности в другом месте. И рано или поздно, что-то собирается завинтить Вашу тщательно созданную схему полномочий, помещая repo неисправное, пока Вы не добираетесь root доступ и ремонтирует его (т.е. повторное выполнение вышеупомянутых команд).

Решение новой волны

Отличное решение — хотя менее хорошо понято, и который требует немного большей поддержки ОС/инструмента — состоит в том, чтобы использовать расширенные атрибуты POSIX. Я только приехал в эту область справедливо недавно, таким образом, мое знание здесь не является столь горячим, как это могло быть. Но в основном, расширенный ACL является способностью установить полномочия на больше, чем просто 3 слота по умолчанию (user/group/other).

Так еще раз создайте свою группу, затем работайте:

setfacl -R -m g:<whatever group>:rwX gitrepo
find gitrepo -type d | xargs setfacl -R -m d:g:<whatever group>:rwX

Это настраивает расширенный ACL для группы так, чтобы элементы группы могли читать/писать/получать доступ, любые файлы уже там (первая строка); затем, также скажите всем существующим каталогам, что новые файлы должны иметь этот тот же примененный ACL (вторая строка).

Надежда, которая получает Вас на Вашем пути.

191
ответ дан 16 December 2019 в 22:45
  • 1
    мерзавцу init назвали параметр - совместно использовал, который настраивает core.sharedRepository переменную для коллективной работы. Можно также установить переменную на существующем репозитории. Это устраняет необходимость ручной установки umask, поскольку мерзавец установит его на нормальное значение прежде, чем управлять файлами. –  ptman 17 February 2010 в 11:04

Руководство пользователя Мерзавца описывает, как совместно использовать репозиторий несколькими способами.

Более сложный, хотя полная функция способы совместно использовать репозитории:

Мы используем GitHub для команды 6 разработчиков.

21
ответ дан 16 December 2019 в 22:45
  • 1
    Мне нравится Gitosis. It' s довольно эффективный способ управлять доступом на основе открытых ключей. –  Mike Mazur 17 June 2009 в 10:42
  • 2
    Как делают любое из этих решений решает проблему " I' d как несколько человек для получения по запросу к этому repository"? –  womble♦ 17 June 2009 в 10:59
  • 3
    взгляните на gitosis., что каждый решает Вашу проблему. –  pilif 17 June 2009 в 11:43
  • 4
    Когда Вы совместно используете репозиторий, люди смогут вытянуть от него. They' ll, вероятно, должен клонировать его или добавить удаленное ответвление. Документация, которую я связал, очень ясно обойдет Вас посредством решения Вашей проблемы; I' ve использовал все методы, описанные разработчикам справки, сотрудничают исходный код с Мерзавцем. К моему знанию ServerFault isn' t для handholding. –  jtimberman 17 June 2009 в 20:34
  • 5
    Я должен согласиться с использованием Gitosis. Это обходит проблему полномочий при помощи единственной учетной записи, аутентифицируемой несколькими ключами SSH. Этим также управляют полностью самим через фиксации мерзавца. –  Jeremy Bouse 18 June 2009 в 21:42

Можно использовать мерзавца-демона для совместного использования репозитория. Прочитайте документацию для мерзавца-демона для получения дополнительной информации.

Править:

Также проверьте эту статью 8 способы совместно использовать Ваш репозиторий мерзавца.

2
ответ дан 16 December 2019 в 22:45

если Вы создали репозиторий (или клонировал новый пустой repo от существующего) с

$ git init --shared=group 

или

$ git init --shared=0NNN

Мерзавец, как предполагается, обрабатывает полномочия выше и вне того, что обеспечивает Ваше значение по умолчанию umask. Наконец это верно на моей версии Мерзавца (1.6.3). Конечно, это предполагает, что Ваши пользователи находятся в той же группе.

Если бы мне было нужно управление пользователями в нескольких группах с различными степенями чтения-записи однако, то я пошел бы с gitosis. Я также услышал упоминание о gitolite (http://github.com/sitaramc/gitolite), gitosis ветвление, которое, как предполагается, предоставляет полномочия уровня ответвления, не может сказать, что у меня есть каждый используемый это лично все же.

121
ответ дан 16 December 2019 в 22:45

Также взгляд gitolite для хостинга Вашего репозитория мерзавца. Gitosis, по-видимому, не разрабатывается больше.

9
ответ дан 16 December 2019 в 22:45

Это не было сказано, таким образом, я хочу быстро добавить его.

Чтобы гарантировать, чтобы проблемы полномочий не обрезали ужасную голову, удостоверьтесь, что установили следование Вашего файла конфигурации общего репозитория мерзавца:

[core]
    sharedRepository = true

Это гарантирует, что уважают "umask" настройки Вашей системы.

55
ответ дан 16 December 2019 в 22:45

Один из способов исправить разрешения в общем репозитории, чтобы у пользователей не было разрешения проблемы при нажатии, заключается в создании сценария перехвата после обновления, который будет делать именно это. Это должно работать в любой версии git.

Предположим, у вас есть общий репозиторий в /myrepo.git. Все файлы в этом репозитории принадлежат, скажем, mysharedgroup . Все пользователи, отправляющие в этот репозиторий, также должны принадлежать к mysharedgroup . Теперь создайте следующий файл (изменив mysharedgroup на свои предпочтения):

/myrepo.git/hooks/post-update

#!/bin/sh
chmod -R g+w . 2>/dev/null
chgrp -R mysharedgroup . 2>/dev/null
4
ответ дан 16 December 2019 в 22:45

Для объединения битов и кусочков хороших советов из различных других ответов и комментариев по настройке нового репо:

Если вы настраиваете новое репо myrepo в /srv/git для группы mygroup, то это то, что вы хотите:

mkdir /srv/git/myrepo.git
chgrp mygroup /srv/git/myrepo.git
git init --bare --shared /srv/git/myrepo.git
  1. в первой строке создается repo dir
  2. , во второй устанавливается значение для моей группы
  3. , а в третьей инициализируется "голое" repo со следующей конфигурацией:
    1. core.bare = true: делает его "пустым" репо
    2. core.sharedrepository = 1 (также как и core.sharedrepository = group): каталог репо и все последующие созданные в нём каталоги будут управляться git'ом, чтобы разрешить mygroup чтение, запись и выполнение разрешений (также с установленным sgid-битом -- так, чтобы работать с пользователями, для которых mygroup не является их основной группой)
    3. . denyNonFastforwards = 1: deny non-fast-forward push to repo

Если вы хотите точно настроить права пользователя, группы или других пользователей, используйте --shared=0NNN, где NNN - стандартные пользовательские, групповые и другие биты для файлов - (биты исполнения и sgid в каталогах - будут соответствующим образом управляться git'ом). Например, это позволяет пользователю получить доступ на чтение и запись и доступ только на чтение к группе (и отсутствие доступа к другим):

git init --bare --shared=0640 /srv/git/myrepo.git

Это позволяет пользователю и группе (и отсутствие доступа к другим) получить доступ на чтение и запись:

git init --bare --shared=0660 /srv/git/myrepo.git

Это позволяет пользователю и группе получить доступ на чтение и запись, и доступ только на чтение к другим:

git init --bare --shared=0664 /srv/git/myrepo.git

Обратите внимание, что если вы не собираетесь разрешать доступ на запись для группы, то сначала используйте chown, чтобы установить владельца репо, а затем выполните команду git init от имени этого пользователя (чтобы убедиться, что репо инициализировано с правильным владельцем для всех исходных файлов и подкаталогов).

3
ответ дан 16 December 2019 в 22:45

@stevek_mcc. Ответ - тот, который я искал, когда искал этот вопрос в Google

git clone --config core.sharedRepository=true
0
ответ дан 16 December 2019 в 22:45

Это сработало для меня, для существующего репозитория. Это требует советов из нескольких ответов и комментариев ранее:

Из родительского каталога вашего репозитория на сервере:

chgrp -R <whatever group> gitrepo
chmod -R g+wX gitrepo
cd gitrepo
find . -type d -exec chmod g+s {} +
git config core.sharedRepository group
1
ответ дан 16 December 2019 в 22:45

Теги

Похожие вопросы