Soluções padrão para shells Linux remotos muito limitados

Soluções padrão para shells Linux remotos muito limitados

Eu tenho um usuário que precisa se conectar a uma máquina remota M(via ssh) e executar uma em um conjunto fixo de comandos (digamos, Nno total).

Esses comandos dependem de python, suas bibliotecas e acesso privilegiado à rede (que a máquina Mpossui).

Existem estratégias padrão para limitar o shell do usuário Linux apenas à execução desses Ncomandos, sem qualquer possibilidade de:

  • mais acesso ao fs
  • lendo o conteúdo dos próprios comandos
  • adquirir acesso privilegiado à rede
  • e similares

Em outras palavras, quais são as estratégias padrão para solicitar um console limitado ao usuário após o login, permitindo, por exemplo, apenas números entre 1e Ncomo entradas?

Responder1

Há um truque interessante no arquivo autorizado_keys, você pode usar a opção de comando para definir o comando a ser executado no login, identificado por uma chave, portanto, se seus N comandos forem estáticos - você pode defini-los no servidor e pronto. Não irá restringir a rede, apenas lançando o comando. Será algo parecido com isto no arquivoauthorized_keys:

command = "date" ssh-rsa AAAA

Você pode encontrar mais informações sobre issotutorial

Para impedir que o usuário acesse a rede - você pode usar o SELinux ou outro software semelhante, também pode escrever um gancho eBPF para permitir exatamente o que deseja.

Responder2

Vamos supor que este não seja um pequeno chroot ou contêiner com apenas o que eles precisam, mas sim um sistema operacional multiusuário de uso geral.

Com automação suficiente, o login no host pode não ser necessário. Talvez forneça através de algum sistema de autoatendimento essas opções limitadas, o que a automação faz.

Para permitir que eles façam isso no host, tente o que eu chamaria de menu de texto cativo. Qual é um script que você pode precisar escrever.

Impedir estritamente a pessoa de fazer outras coisas requer vários truques.

  • Faça login como um usuário não privilegiado, de preferência exclusivo para ele. Escale para coisas privilegiadas com ferramentas como doas ou sudo.
  • Mandar este menu é o que funciona com ForceCommandblocos OpenSSH.
  • Execute-o também a partir de perfis de shell. exec, então ele substitui o processo shell e, quando o menu sai, o mesmo acontece com a sessão.
  • Sinais de armadilha no script do menu.
  • Cuidado com programas que podem executar comandos arbitrários. Desembolsar é trivialno vim, o comando é:shell
  • Escreva e use scripts wrapper como itens de menu, para operações mais complexas ou mais controle sobre a saída.

Escolha uma linguagem de script para escrever o menu. Considere usar uma biblioteca de menu de texto existente. Um loop de entrada por si só não é difícil, mas torná-lo robusto, fácil de modificar e com boa UX é o que você realmente deseja na produção.

informação relacionada