
M
リモート マシンに(ssh 経由で) 接続し、固定された一連のコマンド (N
合計で言うと)を実行する必要があるユーザーがいます。
これらのコマンドは、Python、そのライブラリ、およびネットワークへの特権アクセス(マシンM
が持つ)に依存します。
N
Linux ユーザー シェルを、以下の可能性を排除して、これらのコマンドの実行のみに制限するデフォルトの戦略はありますか?
- FSへのさらなるアクセス
- コマンド自体の内容を読む
- ネットワークへの特権アクセスを取得する
- 同様
1
言い換えると、ユーザーがログインした後に、たとえばとの間の数字のみを入力できるような制限されたコンソールをユーザーに表示するためのデフォルトの戦略は何でしょうかN
?
答え1
authorized_keys ファイルには便利なトリックがあります。コマンド オプションを使用して、ログイン時に実行するコマンドを定義できます。コマンドはキーで識別されます。したがって、N コマンドが静的である場合は、サーバー上で定義するだけで済みます。ネットワークは制限されず、コマンドが起動されるだけです。authorized_keys ファイルは次のようになります。
command = "date" ssh-rsa AAAA
これに関する詳しい情報はチュートリアル
ユーザーのネットワーク アクセスを防止するには、SELinux または他の同様のソフトウェアを使用できます。また、必要なものだけを許可する eBPF フックを作成することもできます。
答え2
これは、必要なものだけを備えた小さな chroot またはコンテナーではなく、汎用のマルチユーザー オペレーティング システムであると仮定します。
十分な自動化があれば、ホストへのログインは不要になる場合があります。自動化によって実行されるこれらの限定されたオプションを、何らかのセルフサービス システム経由で提供することもできます。
ホスト上で操作できるようにするには、いわゆるキャプティブ テキスト メニューを試してください。これは、記述する必要があるスクリプトです。
相手が他のことをするのを厳しく制限するには、いくつかのコツが必要です。
- 特権のない、理想的には固有のユーザーとしてログインします。doas や sudo などのツールを使用して、特権のあるものをエスカレーションします。
- このメニューを必須にするのは、OpenSSH
ForceCommand
ブロックで実行されるものです。 - また、シェル プロファイルから実行します。exec するとシェル プロセスが置き換えられ、メニューが終了するとセッションも終了します。
- メニュー スクリプトで信号をトラップします。
- 任意のコマンドを実行できるプログラムに注意してください。シェルアウトは簡単ですvimでは、コマンドは
:shell
- より複雑な操作や出力のより詳細な制御を行うには、メニュー項目のラッパー スクリプトを記述して使用します。
メニューを記述するためのスクリプト言語を選択してください。既存のテキスト メニュー ライブラリの使用を検討してください。入力ループ自体は難しくありませんが、実際に運用する際に必要なのは、堅牢で、変更しやすく、優れた UX を備えたものにすることです。