Sem shell e aplicação de lançamento no login

2

Estou trabalhando na migração de um aplicativo do OpenVMS para o RedHat Linux 6. O aplicativo é um aplicativo de terminal de tela verde. Os usuários entrarão no Linux via SSH e o aplicativo deverá iniciar automaticamente, mas eles nunca devem ter acesso ao shell. Depois que o aplicativo fechar ou travar, ele deverá ser desconectado automaticamente. Qual é a melhor maneira de abordar isso?

Eu tentei criar um novo usuário com o seguinte comando.

useradd -s /sbin/nologin test

Eu adicionei o ftp & para os usuários .bash_profile na esperança de que ele abriria o console do ftp imediatamente e, em seguida, uma vez que eles saíssem, eles seriam desconectados. No entanto, após a autenticação no SSH, a sessão é eliminada. Alguma idéia?

    
por greyfox 21.04.2014 / 22:05

3 respostas

2

O aplicativo "tela verde" que eu suportei nos últimos 12 anos faz isso por meio de um script .bash_profile e um wrapper modificados para iniciar o aplicativo.

Apósacriaçãodossistemaseacriaçãodosusuáriosdoserviço,modificamosopadrão.bash_profilenodiretório/etc/skel.Issogarantequenovosusuárioscriadosnosistemaselecionemasconfiguraçõesdelogin.

Vamoschamaroaplicativo"pêssego"

Dentro do .bash_profile,

# Source any peach-specific variables
. /etc/default/peach

# Set up the search paths:
        PATH=$PATH:.

# Set up the shell environment:
        set +u
        trap "echo 'logout'" 0

# Run the peach application or start script:
        /opt/peach/bin/run-peach

O script wrapper "run-peach" real será parecido com:

#!/bin/bash

set -e

<blah blah> # do stuff, set MOAR variables
/opt/peach/bin/peach # run application binary

Os set -e e trap são importantes aqui .

    
por 21.04.2014 / 23:06
1

Use um bloco Match para esse grupo de usuários e ForceCommand para forçar a execução do programa OpenVMS usando um script de wrapper que use seu próprio exit para efetuar logout do usuário.

ForceCommand
  Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell with the -c
  option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment
  variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with ChrootDirectory.

Como não será um shell de login, não é necessário fazer logout, basta sair:

Match Group oldies
    ForceCommand /usr/local/bin/wrapper

Um exemplo de script de wrapper pode ser parecido com:

# cat /usr/local/bin/wrapper
#!/usr/bin/env bash

dialog --title "Message"  --yesno "Wrapper around your OpenVMS program" 6 25

exit 0

Isso é válido para ssh access.

Você também pode forçar a execução do mesmo script de wrapper a partir de /etc/passwd :

bob:x:1100:1100:Sponge Bob:/home/bob:/usr/local/bin/wrapper

e ter a mesma funcionalidade de um console de login.

    
por 21.04.2014 / 22:23
1

Por que você não define o aplicativo como o shell do usuário? Isso significa que é a única coisa que é executada quando eles efetuam login e (exceto algum tipo de acesso dentro do próprio aplicativo) eles não podem fazer mais nada.

    
por 21.04.2014 / 23:03