Назад | Перейти на главную страницу

Нет оболочки и запускать приложение при входе в систему

Я работаю над переносом приложения с OpenVMS на RedHat Linux 6. Это приложение терминала с зеленым экраном. Пользователи будут входить в Linux через SSH, и приложение должно запуститься автоматически, но у них никогда не должно быть доступа к оболочке. Как только приложение закроется или выйдет из строя, оно должно автоматически выйти из системы. Как лучше всего подойти к этому?

Я пробовал создать нового пользователя с помощью следующей команды.

useradd -s /sbin/nologin test

Затем я добавил ftp & к пользователям .bash_profile в надежде, что он немедленно откроет консоль ftp, а затем, как только они выйдут, выйдет из системы. Однако при аутентификации по SSH сессия прерывается. Любые идеи?

Приложение "зеленого экрана", которое я поддерживал последние 12 лет, выполняет это с помощью модифицированного .bash_profile и сценарий оболочки для запуска приложения.

После того, как системы построены и пользователи сервиса созданы, мы изменяем значение по умолчанию .bash_profile в /etc/skel каталог. Это гарантирует, что новые пользователи, созданные в системе, получат настройки входа в систему.

Назовем приложение "персик"

Внутри .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

Фактический сценарий оболочки "run-peach" будет выглядеть так:

#!/bin/bash

set -e

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

В set -e и trap здесь важны.

Почему бы вам просто не установить приложение как оболочку пользователя? Это означает, что это единственное, что запускается, когда они входят в систему, и (запрещая какой-либо доступ внутри самого приложения) они не могут делать ничего другого.

Использовать Match заблокировать для этой группы пользователей и ForceCommand для принудительного выполнения программы OpenVMS с помощью сценария-оболочки, который использует собственный exit чтобы выйти из системы.

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.

Поскольку это не будет оболочка входа в систему, выходить из системы не нужно, просто выйдите:

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

Пример сценария оболочки может выглядеть так:

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

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

exit 0

Это действительно для ssh доступ.

Вы также можете принудительно выполнить тот же сценарий оболочки из /etc/passwd:

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

и иметь ту же функциональность из консоли входа в систему.