O que eu preciso saber ao criar um comando não shell para o login de um usuário?

3

Estou trabalhando em software e configuração para um dispositivo que usa o Linux.

Fui solicitado a fornecer uma interface administrativa que não requer conhecimento do uso do Linux e que tenha recursos restritos.

Acredito que a melhor maneira de lidar com isso seja usar um login no console (por meio do ssh ou com uma porta serial) para apresentar um menu de opções. Digamos que eu tenha um programa chamado admin_menu que lide com todas as minhas tarefas desejadas.

Então, eu deveria ser capaz de criar uma linha em / etc / password assim:

admin:x:230:235:Administrative Interface:/home/admin:/local/sbin/admin_menu

Há alguma consideração especial de que preciso estar ciente ao criar meu programa admin_menu ? As respostas diretas são boas, mas os indicadores para bons documentos são ainda melhores.

Áreas gerais que eu quero mais informações são:

  • Quais variáveis de ambiente posso esperar para serem configuradas? Quais deles eu precisarei me estabelecer?
  • Há alguma consideração especial ao gerar processos filhos?
  • O que acontece após o término do meu processo de menu?
  • Eu uso o STDIO para interagir com o console ou alguma outra interface?
por daotoad 18.11.2009 / 20:51

2 respostas

3

Um script pode funcionar como um shell de login. Você precisará adicionar / local / sbin / admin_menu a /etc/shells . Caso contrário, logins do ssh (e possivelmente outros) não funcionarão sem nenhuma explicação do motivo (se bem me lembro).

Existem algumas variáveis de ambiente que serão transferidas do cliente, como o tamanho da janela. Alguns serão definidos no login no sistema. O PAM pode definir alguns deles, mas eu não tenho um exemplo.

Após o término do processo do menu, o cliente está desconectado, acredito. Eu me baseio nisso para observar o que acontece quando /bin/bash termina.

Se eu fosse você, usaria stdin / stdout para sua fonte de entrada e saída.

    
por 18.11.2009 / 21:29
3

Você pode colocar qualquer programa no lugar de / bin / sh em uma entrada / etc / profile, seja shell script ou binário executável. A coisa que você quer assistir é escapa para um shell - se você tentou capturá-los em um programa, você provavelmente não quer que eles tenham acesso a uma linha de comando.

Por exemplo, se o programa fosse algo como vi, o usuário poderia usar ":! / bin / sh" e chegar a uma linha de comando. Da mesma forma, ao usar um script, muitas vezes a entrada do usuário é usada como dados em uma linha de comando - isso pode ser abusado para obter uma linha de comando também. Se a interface do menu lhe pedir um arquivo para imprimir que pode ser usado em um comando "lpr $ input", o que acontece se o nome do arquivo for digitado em "myfile.txt; / bin / sh"?

Existem várias outras maneiras de entrar em uma linha de comando, você precisa ter muito cuidado ao configurar uma conta capturada que leva a entrada do usuário.

    
por 20.11.2009 / 08:03