Como iniciar um programa no login do usuário no Debian mas não permitir o shell interativo

0

Eu quero ter um usuário no Debian 7.x com as seguintes restrições:

  1. Quando o usuário efetua login, um programa de linha de comando será iniciado automaticamente na sessão de shell do usuário. Em seguida, o programa analisará a entrada do usuário para sempre e executará comandos até que o usuário digite um comando de saída específico.
  2. Quando o programa termina, o usuário deve ser desconectado automaticamente.
  3. CTRL + C não deve fazer nada ou abortar o programa e desconectar o usuário.
  4. Para resumir, o usuário não deve ter permissão para interagir com o sistema de qualquer outra forma que não seja este programa iniciado automaticamente. Isso deve ser verdade, independentemente da forma como a sessão é iniciada, seja SSH ou outros meios.

Como ponto de partida, eu adicionei estas linhas no final do novo usuário .bashrc (o shell do usuário é bash):

exec /path/to/myprogram
logout

Geralmente funciona. No entanto, se o início da sessão for lento, um usuário (não particularmente rápido) pode pressionar CTRL-C e ser felizmente solicitado no terminal antes que myprogram seja iniciado. Como posso evitar isso?

Atribuir um shell falso como /usr/sbin/nologin ou /bin/false ao usuário não funcionará, pois não permitiria iniciar o programa também.

    
por Antonio Ceballos 14.12.2015 / 15:15

1 resposta

1

Os usuários normais autenticam o log (também conhecido como usuário / senha) e são apresentados por um shell. O sistema procura qual shell iniciar em seu arquivo de senha.

Um usuário pode alterar seu shell com o comando change shell ( chsh ), embora isso possa ser limitado a uma lista de shells listados em / etc / shells.

Neste caso, não queremos iniciar um shell interativo. Em vez de iniciar o bash e, em seguida, pedir ao bash para sobrescrever-se com outro programa, imediatamente iniciamos o outro programa.

O resultado é que:

  1. O programa é iniciado. Não há shell entre e não há shell para capturar um controle rápido-C
  2. Quando o programa termina a mesma coisa acontece quando o shell termina (por exemplo, depois de sair ou controlar d ). O usuário está desconectado.

Observe que isso pressupõe que o usuário não pode sair do programa. O que nem sempre é verdade. (por exemplo, um mailreader sunch como elm pode escapar para um shell. Same for vim). Com exceção desses casos, o usuário não terá escolha entre fazer login e usar o único programa atribuído.

PS: Isso também significa que não há acesso ao passwd. Espero que a senha nunca expire.

    
por 14.12.2015 / 16:06