web-dev-qa-db-ja.com

「仮想」シェル、すなわち。 (SSH)ログイン後のプロセス内でユーザーを投獄する

SSH経由でbashシェルにシステムにログインできるカジュアルユーザーがいるとしましょう。また、PHP(ここでは言語は関係ありません)スクリプトがあります。このスクリプトは、さまざまなコマンドやその他のユーザー入力を受け入れるプロセスとして機能し、それらに従って機能します(基本的には「シェルのような」スクリプト)。 。

さて、私がやりたいのは、前述のPHPスクリプト内でユーザーをロックすることです。つまり、ユーザーがログインするとすぐに実行します(この部分は.bashrcを介して簡単です)が、同時にスクリプトの実行が終了すると、ユーザーはbashとその結果としてsshセッションから自動的に「キックアウト」されるため、bash自体を介して何も実行できず、PHP =スクリプトオファー。

それも可能ですか?はいの場合、どうすればよいですか?

更新:これまでの回答に基づく-スクリプトとSSH経由でログインするユーザーの間にbashを設定する必要はありません。最初は必需品のようでした。 SSHログインの直後にのみユーザーをスクリプトに強制するものはすべて歓迎すべき答えです。

4
alkor

更新された情報に従って、秘密鍵と公開鍵のペアを実行し、.ssh/authorized_keysファイル内でscript.phpファイルのみを実行するように設定する必要があります。特に環境を初期化するために必要なので、保護のために.bashrcに依存するべきではありません。

6
sparticvs

問題のユーザーのシェルを、/etc/passwdの適切な行の最後のフィールドで好きなように変更できます。例:

specialuser:x:12345:123::/home/specialuser:/usr/bin/restricted_script.php

適切なハッシュバン(スクリプトの最初の行に#!/usr/bin/phpなど)を含めると、すぐに機能するはずです。セキュリティ上の理由から、ユーザーが書き込み可能なディレクトリにスクリプトを配置しないことをお勧めします。

4
peterph

最も簡単な方法は、このようなsthを.bashrcに入れることです。

php script.php
exit

Script.phpの実行後、シェルはセッションを終了します。

しかし、正確に何をする必要があるのか​​、どの程度のセキュリティレベルが必要なのかを正確に言うのは難しいです。

0
Mateusz W