Нет оболочки и запуска приложения при входе
Я работаю над переносом приложения из OpenVMS в RedHat Linux 6. Приложение является терминальным приложением с зеленым экраном. Пользователи войдут в Linux через SSH, и приложение должно автоматически запуститься, но у них никогда не должно быть доступа к оболочке. Как только приложение закрывается или падает, оно должно автоматически выйти из системы. Каков наилучший способ приблизиться к этому?
Я попытался создать нового пользователя с помощью следующей команды.
useradd -s /sbin/nologin test
Затем я добавил ftp & к пользователям.bash_profile в надежде, что он немедленно откроет консоль ftp, а затем, когда они выйдут, выйдет из системы. Однако после аутентификации по SSH сеанс прерывается. Есть идеи?
3 ответа
Приложение "зеленого экрана", которое я поддерживал в течение последних 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
и имеют те же функции из консоли входа в систему.