Substituir shell de login por programa (mini-cadeia)

0

existe uma maneira melhor, de preferência sem uma pilha de software extra, para bloquear usuários ssh específicos em um programa sem acesso a um shell funcional? Imagine um programa cli que deve ser a única interface que o usuário tem acesso via ssh.

Minha solução hacky:

Em / etc / passwd substituindo o shell do usuário pelo seguinte script:

#!/bin/bash
/bin/bash -c /usr/bin/cli
exit 1
    
por xiconfjs 27.06.2018 / 14:58

2 respostas

0

Problema na mão

Você deseja bloquear usuários remotos para usar um shell específico quando eles se conectarem ao seu servidor. Como você provavelmente descobriu, chsh ou outras soluções são voltadas para usuários locais.

Solução

De acordo com esta solução do usuário muru , eu editaria seu sshd_config para usar a opção ForceCommand .

You could use a ForceCommand along with Match:

 Match Address 10.1.0.0/16
 ForceCommand /usr/bin/[some shell]

From man sshd_config:

Match   Introduces a conditional block.  ...

The arguments to Match are one or more criteria-pattern pairs or the single token All which matches all criteria. The available criteria are User, Group, Host, LocalAddress, LocalPort, and Address.

ForceCommand
     

Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present. The command is invoked by using the user's login shell with the -c option.

     

Assim, o comando que você especificar seria executado usando o shell de login do usuário, que deve aceitar a opção -c. A conexão é fechada quando o comando sai, então, para todos os efeitos práticos, esse comando é o shell deles.

Usando ForceCommand no seu arquivo de configuração, você pode forçar o uso de um shell que suporte a opção -c . Eu também faria referência a esta postagem de falha do servidor para obter mais informações sobre como conclua esta tarefa.

Conclusão

Use suas opções sshd_config para forçar o uso de um shell que possa suportar -c , pois isso fechará o shell e a sessão assim que for concluído.

Por favor, comente se você tiver dúvidas ou problemas com esta resposta. Eu aprecio o feedback para corrigir quaisquer equívocos e melhorar minhas postagens. Eu posso atualizar minha resposta conforme necessário.

Melhor da sorte!

    
por 27.06.2018 / 15:19
0

Você seria mais adequado para criar um ambiente real de cadeia ou chroot do BSD para o usuário em questão. Claro que isso exigiria alguma criação manual de um usuário, grupo, sistema de arquivos mini linux, adquirindo as bibliotecas necessárias para cli etc ou usando as ferramentas jail disponíveis em distribuições unix.

Veja os documentos para mais informações

Linux chroot

Cadeia BSD

    
por 27.06.2018 / 15:17