Substituir o shell bash pela interface cmdline do programa python

4

Eu tenho um programa que usa o módulo cmd do python para interfaces de linha de comando.

Agora quero que ele seja executado no meu servidor Linux sempre que qualquer usuário normal fizer login nele de uma maneira que o usuário nunca receba o prompt padrão do Linux (ou seja, ele não deve ser capaz de matar o programa ou enviá-lo para o background ou qualquer outra coisa).

Por questões de segurança, o programa nunca deve permitir que o usuário obtenha acesso ao prompt normal. O usuário deve sempre usar o cmdline do programa para disparar todos os comandos. (O programa tem vários filtros embutidos).

Tentei colocar o comando de execução do programa em /etc/password (substituindo o shell padrão do bash pelo cmd de execução do programa) para o usuário & também tentei colocá-lo em usuários .bashrc file, mas sem uso; o usuário ainda pode obter acesso ao prompt padrão.

Todos os ponteiros para isso podem ser muito úteis.

    
por avasal 02.03.2012 / 08:41

1 resposta

2

Você pode substituir SHELL = / bin / sh pelo seu script em / etc / profile (ou equivalente para logins ssh) - a maioria dos emuladores de terminal e muitos outros aplicativos testarão env para obter esse valor para executar o shell padrão, mas voltar para / bin / sh ou / bin / bash se falhar (você pode querer permitir-se usar o shell, então envolva-o em uma verificação de usuário / gid / uid)

use um script de shell (ou simplesmente adicione-o na parte inferior do bashrc sem o cabeçalho)

#!/bin/sh
#public domain fake shell
while read -p "$PS1" CMD; do
   case "$CMD" in
      *exit*|*bad_case*|*another bad case*)echo bad command: user info logged etc..;;
      *good case*|*another good case*|*more*)eval "$CMD";;
      *)echo command not supported;;
   esac
done

ou altere as permissões no shell - mas esteja preparado para que coisas aleatórias não funcionem se você tiver que ir tão longe

    
por 14.03.2012 / 04:00