限制 git 用户的 shell 访问,但仍允许推送/拉取访问

限制 git 用户的 shell 访问,但仍允许推送/拉取访问

我在我的服务器上托管了一个 git 存储库。任何人都可以从以下远程 URLpush访问:pull

ssh://[email protected]/opt/git/my-project.git

具体来说,任何有权ssh访问该[email protected]用户的人都可以推送/拉取(即我将他们的公钥列为authorized_key

我想继续允许推送/拉取访问,但我想禁用 shell/登录访问

Github 使用这种方法 - 如果您尝试通过 ssh 进入他们的任何 git 服务器,您将获得:

$ ssh [email protected]
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 和密码进行 shellgit访问
  2. 仍然允许我自己(作为root)能够以git交互方式假设用户
  3. 仍然允许开发人员pushpull存储库上

git我尝试按如下方式禁用用户的 shell :

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

ssh这对于 #1(访问被阻止)和 #2(我仍然可以使用 访问 shell sudo -u git -s /bin/bash)非常有效

但是,#3 是不可行的。切断 shell 访问显然也会禁用push/pull访问(因为它可能使用ssh)。

这里还有其他解决方案吗? Github 本身是如何做到这一点的?

谢谢!

答案1

最简单的解决方案是使用 git-shell 作为用户的登录 shell。

关于如何设置的详细说明可以在这里找到:https://git-scm.com/docs/git-shell或者在 git shell 手册页上man git shell

答案2

在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

您可以通过在 sshd_config 文件中的“匹配用户”块中设置来向 git 帐户添加类似的限制:

### add this to the bottom of the sshd_config
Match User git
    X11Forwarding no
    AllowTcpForwarding no
    PermitTunnel no

相关内容