Я работаю над переносом приложения с 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
Почему бы вам просто не установить приложение как оболочку пользователя? Это означает, что это единственное, что запускается, когда они входят в систему, и (запрещая какой-либо доступ внутри самого приложения) они не могут делать ничего другого.
Использовать 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
и иметь ту же функциональность из консоли входа в систему.