阻止 git 用户登录,但允许该用户仍然充当 git 存储库?

阻止 git 用户登录,但允许该用户仍然充当 git 存储库?

我已经设置了一个 git 服务器,方法是创建一个用户“git”,然后在 git 用户的目录中创建一个本地存储库。

git 服务器工作得很好,我可以拉、推等。我允许用户通过将他们的公钥添加到

 .ssh/authorized_keys

文件。我已禁用基于密码的登录。但问题是这些用户可以通过 ssh 登录服务器,因为他们的密钥位于授权密钥列表中。好吧,权限设置对 git 用户来说相当有限,但是,如果 git 无法直接登录,我还是更喜欢它。

有没有办法禁用“git”用户的登录,但保持 git 用户接受推送并通过 git/ssh 拉取的能力?

答案1

您可以用来git-shell限制对 SSH 用户帐户的访问。来自文档页:

这是 SSH 帐户的登录 shell,用于提供受限的 Git 访问。它只允许执行实现拉/推功能的服务器端 Git 命令,以及用户主目录中名为 git-shell-commands 的子目录中存在的自定义命令。

git-shell默认情况下是非交互式的。将用户的默认 shell 设置为git-shell 将允许您阻止用户以交互方式登录到您的服务器,同时保持功能git完整。可以进行某种程度的定制,这记录在同一页面的“示例”部分下。

git-shell应与 git 一起安装在/usr/bin/git-shell.您可以使用以下命令将其设置为用户的默认 shell usermod

usermod -s /usr/bin/git-shell username

答案2

从安全角度来看,我不相信让所有用户以“git”用户身份登录是最好的主意,但肯定可以通过配置选项执行您想要的操作ForceCommand。例如,要仅让名为“git”的用户运行“git”命令,您可以将以下内容添加到文件中/etc/ssh/sshd_config

Match User git
    ForceCommand /usr/bin/git
    AllowTCPForwarding no
    X11Forwarding no

阅读sshd_config手册页并根据您的具体情况进行调整。

答案3

如果您安装gitlab-ce它,则明确指出非标准用户级 ssh 配置可能会导致奇怪的损坏,并且它想要修复它。

不过gitlab-ce,当通过网络界面添加密钥时,它会同时添加一些配置信息 -

# cat ~git/.ssh/authorized_keys
command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AA...restofkeysnip!

请注意,git用户没有~/.bashrc~/.profile或其他点文件,并且 shell 设置为/bin/sh,并且没有对sshd_config.

相关内容