sshがログインした状態でコマンドを実行し、コマンドが終了したらログアウトします。

sshがログインした状態でコマンドを実行し、コマンドが終了したらログアウトします。

Centos7システムでユーザーの活動を追跡したいと思います。このために、経営陣は以下を使用することにしました。スクリプトそしてスクリプトの再生デフォルトでは、ユーザーアクティビティを記録して再生します。設計方法についていくつか調査しましたが、 auditd に依存するソリューションはここで管理から拒否されました。

予想される動作は次のとおりです。

  1. ユーザーが SSH を介してサーバーにログインすると、スクリプト・コマンドが生成され、ユーザーの活動がファイルに書き込まれ始めます。
  2. ユーザーがサーバー操作を完了したら、ログアウトします(通常はシャットダウンまたはCTRLDを入力)。
  3. スクリプトプロセスが停止し、ファイルが閉じられます。

今質問は次のとおりです。

  1. 私の研究では、スクリプトが実際に別のシェルを生成することがわかりました。したがって、スクリプトscript.logを各ユーザー(またはskel)の.bash_profileに配置すると、ログイン後にユーザー用の新しいシェルが実行され、ユーザーは簡単にプロセスを中断して実行を開始できます。彼のいつものSSHセッション。 ユーザーがスクリプトコマンドで生成されたシェルを終了したときにスクリプトが実際にユーザーを追い出すようにするにはどうすればよいですか?

  2. スクリプト出力(つまり、ユーザーコマンド)は、sudo以外のユーザーがR / W / E権限なしで何も実行できない個人の場所に保存する必要があります。ユーザー自身が権限を持っていないときにユーザーがログインしたときに高い権限でスクリプトを実行するにはどうすればよいですか?

答え1

強制コマンドには、次のオプションがsshdありますForceCommand

クライアントおよび ~/.ssh/rc (存在する場合) が提供するすべてのコマンドを無視し、ForceCommand で指定したコマンドを強制的に実行します。コマンドは、ユーザーのログインシェルと-cオプションを使用して呼び出されます。
これはシェル、コマンド、またはサブシステムの実行に適用されます。 Matchブロック内で最も便利です。クライアントが最初に提供したコマンドは、SSH_ORIGINAL_COMMAND環境変数にあります。

だから私が読んだところによると、ForceCommandに設定するとscriptおおよその目的の結果が得られます。

監査証跡を安全に保つためのマルチサーバーシステムの1つの解決策は、システムログで学習し、ネットワークを介してエントリを別の物理ホストに送信することです。これは、ログが生成された後にユーザーがログにアクセスするのをほとんど防ぎます。他のすべてが失敗した場合は、デーモンがログを収集して保存するlocalhostの他のポートにログを送信するように何かを構成できます。 (当然の方法を試した後はbashで処理しなければならscript -f /dev/tcp/localhost/8888ないのでできないので、次のような通信パスが直接/dev/tcp/...必要になるようです。mkfifoマンページの例script -f)

関連情報