Debian - 禁用特定用户的控制台访问

Debian - 禁用特定用户的控制台访问

我有一台服务器,git上面运行着一台服务器。

我希望 git 用户能够使用他们的 linux 用户名和密码进行克隆、推送和拉取,但不能登录到 linux 控制台。

如果我使用 锁定他们的帐户passwd -l,他们将无法再登录 Linux 控制台,但也会锁定他们对git.

如果我将他们的默认 shell 更改为/bin/falsegit 说,Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.当我尝试使用他们的凭据登录服务器时,putty 就会崩溃。

任何想法 ?谢谢。

答案1

有一个git-shell针对这种情况的命令。看man git-shell了解详情。

设置方法如下:

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

假设有~username/testrepo/.git/一个 git 克隆就可以正常工作:

git clone username@host:testrepo
Cloning into 'testrepo'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

在 上ssh username@host,你会看到

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

并且连接将被终止。

可以创建一个~username/git-shell-commands/包含脚本的目录,但我无法让它与 一起工作git clone,因为脚本总是运行,产生输出,破坏 git 存储库操作。因此,最好不要创建该目录。


这是另一种方法(基于 GitLab 的做法)。让一个git用户拥有所有存储库。它将包含所有主机密钥~git/.ssh/authorized_keys。每行都带有选项前缀,如下所示。

command="~/bin/gitshell.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB34234234.....

我们不能gitlab-shell在这里使用,所以我们使用自定义脚本~git/bin/gitshell.sh

#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"

这种方法不需要,chsh因为 in 的命令authorized_keys优先。

答案2

我相信你应该限制用户的sshd_config级别,例如:

Match User git # or Group git-group
  ForceCommand git-shell

http://git-scm.com/book/ch4-4.html

答案3

尝试/sbin/nologin一下/etc/passwd,用户可以执行。

相关内容