タスクシェルにアクセスせずに特定のsshユーザーをプログラムにロックするためのより良い方法(追加のソフトウェアスタックなし)はありますか?ユーザーがSSH経由でアクセスできる唯一のインターフェースであるcliプログラムを想像してください。
私のハッカーソリューション:
存在する/etc/パスワードユーザーシェルを置き換えるには、次のスクリプトを使用します。
#!/bin/bash
/bin/bash -c /usr/bin/cli
exit 1
答え1
現在の問題
リモートユーザーがサーバーに接続するときに特定のシェルを使用できないようにロックしたいと思います。すでに発見されていますが、chsh
他の解決策はローカルユーザー向けです。
解決策
~によるとユーザー muru のソリューションsshd_config
、対応するオプションを使用するように編集しますForceCommand
。
ForceCommand を Match で使用できます。
Match Address 10.1.0.0/16 ForceCommand /usr/bin/[some shell]
man sshd_configから:
Match Introduces a conditional block. ...
Match の引数は、1 つ以上の条件付きパターンのペア、またはすべての条件に一致する単一トークン All です。利用可能な基準には、ユーザー、グループ、ホスト、ローカルアドレス、ローカルポート、およびアドレスが含まれます。
ForceCommand
クライアントおよび ~/.ssh/rc (存在する場合) が提供するすべてのコマンドを無視し、ForceCommand で指定したコマンドを強制的に実行します。コマンドは、ユーザーのログインシェルと-cオプションを使用して呼び出されます。
したがって、指定したコマンドは、-cオプションを許可する必要があるユーザーのログインシェルを使用して実行されます。コマンドが終了すると接続が閉じられるので、すべての実際の目的のために、コマンドは対応するシェルです。
設定ファイルで使用すると、ForceCommand
このオプションをサポートするシェルを強制的に使用できます-c
。私も参考にしたいです。今回のサーバー障害の投稿このタスクを完了する方法の詳細をご覧ください。
結論として
完了すると、シェルとセッションが閉じるので、オプションを使用してsshd_config
それをサポートできるシェルを強制します。-c
この回答について質問や質問がある場合は、コメントを残してください。誤解を解決し、投稿を改善するためにフィードバックを送信していただきありがとうございます。必要に応じて回答を更新できます。
頑張ってください!
答え2
問題のユーザーのために、実際のBSD刑務所やchroot環境を作成する方が良いでしょう。もちろん、これを行うには、ユーザー、グループ、ミニLinuxファイルシステムを手動で作成し、必要なcli
ライブラリなどを入手するか、jail
UNIX展開で利用可能なツールを使用する必要があります。
詳しくはマニュアルをご覧ください。