git-shell禁止 Git 用户登陆,仅允许访问

在搭建 Git 服务器时,我们需要新创建 Git 用户,来运行 Git 服务。但是添加的用户可以通过 SSH 进行远程登陆。这必然存在一定的安全问题,黑客可以通过 Git 用户提权获取超级管理员权限。那么我们怎么防止 Git 用户登陆,又不影响 Git 用户对代码库的pull/push操作呢,最简单的方式就是直接修改 Git 用户的默认 shell 为 /usr/bin/git-shell。

  1. 查看系统是否存在 git-shell,一般在安装完 Git之后都已经存在

    1
    whereis git-shell
  1. 查看 /etc/shells 文件内是否存在/usr/bin/git-shell

    1
    2
    3
    4
    5
    6
    7
    cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin
  2. /etc/shells 文件不存在/usr/bin/git-shell,编辑文件,加入/usr/bin/git-shell

    1
    echo "/usr/bin/git-shell" >> /etc/shells
  3. 更改 Git 用户的默认 shell 为 /usr/bin/git-shell,若未添加/usr/bin/git-shell/etc/shells 文件此步会执行错误

    1
    chsh -s /usr/bin/git-shell git
  4. 然后在 Git 用户家目录下,新建git-shell-commands/no-interactive-login文件,用于登陆提示信息

    1
    2
    3
    4
    #!/bin/sh
    printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
    printf '%s\n' "provide interactive shell access."
    exit 128

现在大功告成,自己验证下结果吧。以上操作环境均为 Linux 操作系统!!!