Создайте пользователя SSH с ограниченными правами, чтобы использовать только Git-репозиторий

12

У меня есть git-репозиторий, размещенный на моем сервере SunOS, который я использую удаленно через ssh

git clone ssh://myUser@mydomain.com/path/to/git

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

Я добавил одного testUser в ssh, но я не могу ограничить привилегии пользователей только использованием git.

testUser может пройти через ssh и просмотреть весь сервер.

Как я могу создать пользователей, которые могут получать доступ к git только удаленно, клонировать / тянуть / толкать и т.д.?

Благодарность

холостяк
источник

Ответы:

12

Вы можете рассмотреть возможность использования gitolite под одним пользователем вместо настройки нескольких пользователей git-shell (и необходимых групповых и групповых разрешений, чтобы они могли совместно использовать доступ к репозиториям).

gitolite работает под одним обычным пользователем на сервере и использует открытые ключи SSH для разграничения доступа к репозиториям Git (см. « как gitolite использует ssh », чтобы узнать некоторые подробности того, как gitolite выполняет идентификацию на основе SSH). gitolite предлагает управление доступом для каждого хранилища, для каждой ветви и даже для управления некоторыми путями.

Крис Джонсен
источник
1
+1 за гитоз ... Это было сделано именно для этой установки.
Джереми Бауз
12

У вас в основном есть два варианта.

  1. Как уже упоминалось в topdog, когда вы создаете пользователей на сервере, установите для их оболочки git-shell ( запись книги здесь ). Это позволит пользователю войти в систему через SSH, но вместо запуска обычной полнофункциональной оболочки (например, sh, bash и т. Д.) Будет запущена git-shell, которая предоставляет доступ только к функциональности git.

  2. Кроме того, вы можете сделать свои репозитории доступными по другому протоколу, например, TCP (используя git-deamon ) или HTTP / HTTPS. Я бы порекомендовал такой сценарий только для доступа только для чтения.

Вы упомянули о желании поддерживать функциональность «push» для своих пользователей, поэтому вам действительно стоит воспользоваться вариантом № 1.

chuckx
источник
5

вам нужно изменить их оболочку на git-shell, которая даст им доступ только к функциям git.

победитель
источник
Спасибо topdog. В основном пользователь будет использовать свою собственную оболочку git на своем Mac. Я действительно не хочу, чтобы он был в состоянии SSH к серверу. Поэтому, если git-репозиторий находится на mydomain.com с компьютера testUser / Mac, в терминале он может просто запросить пароль для git clone ssh: //myUser@mydomain.com/path/to/git, а затем загрузить репозиторий. Я только что попробовал установить его оболочку на git-shell. Он запрашивает при вызове клона, но пароль отклоняется.
Бах
вам нужно установить оболочку myUsers в git-shell, если все, что вы хотите, чтобы они делали на сервере, это запускали команды git и не могли входить в оболочку. Для запросов пароля используйте ключи. Для получения более подробной информации о git на сервере смотрите бесплатную git book progit.org/book/ch4-0.html
topdog
спасибо за ссылку на книгу! очень полезно. Закончился использованием gitolite, но все еще имел проблемы с настройкой.
Бах
git-shell : "Это оболочка входа в систему для учетных записей SSH, предоставляющая ограниченный доступ к Git. Она позволяет выполнять только команды Git на стороне сервера, реализующие функцию pull / push, плюс пользовательские команды, представленные в подкаталоге с именем git-shell-команды в домашний каталог пользователя. " В Linux добавьте «/ bin / git-shell» в «/ etc / shells», а затем «usermod --shell / bin / git-shell $ USER». Кстати, git book теперь на git-scm.com/book/en/ch4-0.html
Дэвид Тонхофер,
0

Другой способ сделать это - ограничить доступ пользователей внутри ssh.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

Примером является использование только одного пользователя, но если пользователи находятся в одной группе, вы можете отфильтровать их с помощью директивы group. Что-то вроде

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Николайдис Фотис
источник