登录时无 shell 和启动应用程序

登录时无 shell 和启动应用程序

我正在将应用程序从 OpenVMS 迁移到 RedHat Linux 6。该应用程序是一个绿屏终端应用程序。用户将通过 SSH 登录 Linux,应用程序应自动启动,但他们永远无法访问 shell。一旦应用程序关闭或崩溃,它应该自动注销他们。解决这个问题的最佳方法是什么?

我尝试使用以下命令创建一个新用户。

useradd -s /sbin/nologin test

然后,我将 ftp & 添加到用户的 .bash_profile 中,希望它能立即打开 ftp 控制台,然后一旦用户退出,它就会将他们注销。然而,在 SSH 上进行身份验证时,会话被终止。有什么想法吗?

答案1

我过去 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在这里很重要

答案2

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.

由于这不是一个登录 shell,所以不需要注销,只需退出:

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

并具有来自登录控制台的相同功能。

答案3

为什么不直接将应用程序设置为用户的 shell?这意味着它是用户登录时唯一运行的东西,并且(除非应用程序本身有某种访问权限)他们实际上不能做任何其他事情。

相关内容