Debian - Desativa o acesso ao console para usuários específicos

3

Eu tenho um servidor com um servidor git em execução.

Eu gostaria que os usuários do git pudessem clonar, empurrar e puxar usando o nome de usuário e a senha do linux, mas não poder fazer o login no console do linux.

Se eu bloquear sua conta usando passwd -l , eles não poderão mais acessar o console do linux, mas também bloquearão o acesso deles a git .

Se eu alterar o shell padrão para /bin/false , git diz que Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. e putty travam quando tento fazer login no servidor usando suas credenciais.

Alguma ideia? Obrigado.

    
por Sara 18.11.2015 / 20:39

3 respostas

3

Existe um comando git-shell para este cenário. Veja man git-shell para detalhes.

Veja como configurá-lo:

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

Supondo que haja um ~username/testrepo/.git/ , um clone do git funcionará bem:

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.

Após um ssh username@host , você verá

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

e a conexão será encerrada.

É possível criar um diretório ~username/git-shell-commands/ com scripts nele, mas não consegui fazer isso funcionar junto com git clone , porque um script é sempre executado, produzindo saída, corrompendo ações do repositório git . Então, é melhor nem criar esse diretório.

Aqui está outra maneira (com base no que o GitLab faz). Faça um único usuário git possuindo todos os repositórios. Ele terá todas as chaves do host em ~git/.ssh/authorized_keys . Cada uma das linhas é prefixada com opções, assim.

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

Não podemos usar gitlab-shell aqui, por isso usamos um script personalizado ~git/bin/gitshell.sh :

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

Essa abordagem não exige chsh , pois o comando em authorized_keys tem precedência.

    
por 18.11.2015 / 22:22
0

Acredito que você deve limitar o usuário em sshd_config level, por exemplo:

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

de link

    
por 18.11.2015 / 21:16
-1

Experimente /sbin/nologin em /etc/passwd , o usuário pode executar.

    
por 18.11.2015 / 21:38