Назад | Перейти на главную страницу

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

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

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

В частности, любой, у кого ssh доступ к git@example.com пользователь может нажимать / тянуть (т.е. у меня их открытый ключ указан как 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. Тем не менее позволяют разработчикам push / pull в репозитории

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

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

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

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

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

Спасибо!

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

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

В файле 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