Bloqueia a entrada do usuário no shell interativo usando “cat / dev / ttyS0”

1

Eu criei uma rotina de atualização para o meu dispositivo. O processo de atualização pode ser iniciado usando o console serial, SSH, telnet, um servidor da Web ou uma API REST. Depois que a atualização for iniciada, desejo bloquear todas as entradas do usuário de todas as fontes até que a atualização seja concluída e o dispositivo seja reinicializado. Matar o SSH, o telnet, o servidor da web e o servidor REST é fácil, mas também quero bloquear a entrada no console serial.

Então, para isso, tenho a seguinte situação:

  • O usuário se conecta usando a interface serial em /dev/ttyS0 / /dev/console .
  • Se essa sessão de shell estiver fechada, o inittab a reaparecerá
  • Após o início da atualização, não quero que o usuário insira nada no console, portanto, gostaria de bloquear a entrada dessa sessão de shell.

Descobri que, se eu cat /dev/ttyS0 ou cat /dev/console eu puder "roubar" a entrada do shell, bloqueando a entrada. E se eu fizer (cat /dev/ttyS0 > /dev/null) & , posso fazer isso em segundo plano e sem ver a entrada.

Este método está ok? Existe alguma razão pela qual eu não deveria fazer isso? Existe alguma maneira melhor?

    
por Dakkaron 29.09.2015 / 14:55

1 resposta

1

Sugiro alterar temporariamente a configuração init para que o shell não fique ativo por um momento.

Como você mencionou inittab , presumo que esteja usando sysvinit . Com isso, você pode fazer isso alterando o arquivo inittab config e, em seguida, executando init q (o que faz com que init releia seu arquivo de configuração e atualize o estado interno). Dependendo da versão do sysvinit e do shell que está sendo executado no seu console serial, você também pode precisar matar o próprio shell explicitamente.

    
por 29.09.2015 / 16:10