web-dev-qa-db-ja.com

シェルがなく、ログイン時にアプリケーションを起動します

私はOpenVMSからRedHatLinux6へのアプリケーションの移行に取り組んでいます。アプリケーションはグリーンスクリーンターミナルアプリケーションです。ユーザーはSSH経由でLinuxにログインし、アプリケーションは自動的に起動しますが、シェルにアクセスすることはできません。アプリケーションが閉じるかクラッシュすると、自動的にログアウトする必要があります。これにアプローチする最良の方法は何ですか?

次のコマンドで新しいユーザーを作成してみました。

useradd -s /sbin/nologin test

次に、ftp&をユーザーの.bash_profileに追加して、ftpコンソールがすぐに開き、ユーザーが終了するとログアウトすることを期待しました。ただし、SSHでの認証時に、セッションは強制終了されます。何か案は?

2
greyfox

私が過去12年間サポートしてきた「グリーンスクリーン」アプリケーションは、変更された.bash_profileとアプリケーションを起動するラッパースクリプトを介してこれを実現します。

enter image description here

システムが構築され、サービスユーザーが作成されたら、.bash_profileディレクトリのデフォルトの/etc/skelを変更します。これにより、システムで作成された新しいユーザーがログイン設定を確実に取得できます。

アプリケーションを呼び出しましょう "Peach"

.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 -etrapはここで重要です

2
ewwhite

このユーザーグループにはMatchブロックを使用し、ForceCommandを使用して、独自のexitを使用してユーザーをログアウトするラッパースクリプトを使用してOpenVMSプログラムを強制的に実行します。

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

ログインコンソールから同じ機能を使用できます。

1
dawud

アプリケーションをユーザーのシェルとして設定してみませんか?つまり、ログイン時に実行されるのはそれだけであり、(アプリケーション自体の内部での何らかのアクセスを除いて)実際には他に何もできません。

1
Michael Hampton