Ограничение доступа к оболочке для пользователей git, но все же разрешение доступа push / pull

Я размещаю репозиторий git на моем сервере. Любой может нажать / pull со следующего удаленного URL:

ssh://git@example.com/opt/git/my-project.git

В частности, любой, у кого есть доступ ssh к (скрытому) пользователю, может нажимать / тянуть (т. Е. У меня их открытый ключ указан как authorized_key )

Я бы хотел и дальше разрешать доступ push / pull, но я бы хотел отключить доступ к оболочке / логину

Github использует этот подход - если вы попытаетесь использовать ssh на любом из их серверов git, вы получите:

$ ssh git@github.com
PTY allocation request failed on channel 0
Hi [USER]! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

В частности, я бы хотел -

  1. Отключить доступ к оболочке через ssh и пароль для пользователя git
  2. Тем не менее позволяю себе (как root ) иметь возможность интерактивно принимать пользователя git
  3. Тем не менее разрешить разработчикам нажать / pull на репозиторий

Я попытался отключить оболочку для пользователя git следующим образом:

root@example:~# usermod -s /usr/sbin/nologin git

Это отлично работает для №1 (доступ ssh заблокирован) и №2 (я могу по-прежнему получить доступ к оболочке с помощью sudo -u git -s / bin / bash )

Однако №3 не может быть выполнен. Отключение доступа к оболочке, по-видимому, также отключает доступ push / pull (поскольку он, вероятно, использует ssh ).

Есть ли здесь другое решение? Как сам Github это делает?

Спасибо!

0
задан 3 October 2019 в 16:46
2 ответа

Самым простым решением было бы использовать git-shell в качестве оболочки для входа пользователя.

Подробное описание того, как это настроить, можно найти здесь: https: // git-scm. com / docs / git-shell или, альтернативно, на странице руководства оболочки git man git shell

4
ответ дан 4 December 2019 в 11:41

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

Добавьте ограничения: no-port-forwarding, no-X11-forwarding, no-agent-forwarding, no-pty

См. Описание формата файла authorized_keys в https: //www.freebsd .org / cgi / man.cgi? sshd (8) по их значению

cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB... comment 

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE... other comment

Вы можете добавить аналогичные ограничения для учетной записи git, установив их в блоке "match user" в файле sshd_config:

### add this to the bottom of the sshd_config
Match User git
    X11Forwarding no
    AllowTcpForwarding no
    PermitTunnel no
0
ответ дан 4 December 2019 в 11:41

Теги

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