Limitando usuários SSH no LDAP a apenas um comando em um bastião SSH

1

Eu tenho uma rede privada de servidores Centos 7. Cada um dos servidores só pode ser alcançado através de um bastião SSH. Além disso, todos esses servidores usam o SSSD para autenticar as chaves dos usuários SSH em um diretório LDAP.

Como as chaves são autenticadas em um diretório LDAP, não há um arquivo authorized_keys padrão. Em vez de um arquivo authorized_keys padrão, o /usr/bin/sss_ssh_authorizedkeys binário canaliza uma consulta em relação ao LDAP para sshd formatado como um arquivo authorized_keys - mas não na verdade como um arquivo. Portanto, limitar os usuários a comandos específicos, vinculando chaves RSA a commands=" ... " entradas, não é possível, até onde eu sei.

Os usuários de SSH podem se autenticar através do bastião em suas estações de trabalho usando o seguinte comando:

ssh -A -l [email protected] joes.workstation.ip -o ProxyCommand="ssh -l [email protected] -q bastion.ip nc joes.workstation.ip %p"

Infelizmente, eles também são capazes de usar o SSH em uma sessão no servidor bastion, algo que eu não gostaria que eles pudessem fazer.

Existe mesmo assim que eu posso usar minhas ferramentas atuais - SSSD, SSHD, um diretório LDAP - para permitir que os usuários de SSH passem pelo bastião, mas não para dentro do bastião?

    
por StudentsTea 13.10.2015 / 20:06

1 resposta

0

A versão de sssd que permite definir configurações por grupo ainda estava em desenvolvimento quando me deparei com esse problema.

Acabei de adicionar uma entrada ForceCommand à minha diretiva sshd_config sob Match , bem como uma diretiva AcceptEnv :

Match Group [email protected]
  AcceptEnv SomeVariable
  AcceptEnv SomeOtherVariable
  ForceCommand /path/to/some/script/I/wrote

Então, no shell script, eu uso as variáveis passadas pelo cliente ssh para executar alguma ação.

Por exemplo, se o cliente chamou isto:

$ SomeVariable=foo ssh -i path/to/key -l [email protected] -o SendEnv=SomeVariable bastion.server

O script terá acesso a uma variável de ambiente SomeVariable ; acessá-lo usando qualquer idioma que você goste, usando-o para tomar alguma ação.

Certifique-se de que seu script não saia em uma sessão de shell no bastião.

    
por 15.10.2015 / 05:57