SSH接続を処理するとき、システムはどのようなステップを経ますか?

SSH接続を処理するとき、システムはどのようなステップを経ますか?

SSH接続を処理するとき、システムはどのようなステップを経ますか?

  1. SSH経由でログインしよう
  2. sshdID を確認するには、pam モジュールと pam モジュールを起動します。
  3. pam構成に応じて、ユーザー名とパスワードを指定する必要があります(pamチェックサムpasswdファイルshadow)。
  4. hosts.allow/denypamは、/etc/shellsおよびその他の項目を確認します。
  5. すべてがうまくいったらログインします
  6. ???
  7. シェルが起動しました

passwdだから私の質問は、ファイル内のユーザーに割り当てられたシェルをチェックするのに役立つメカニズムですか? pam自体ですか、特定のpamモジュールですかsshd、それとも別のものですか? pamモジュールを作成してファイル(ユーザー名とパスワードの確認用)を変更できることを知っていますが、シェルエントリのファイルをどのように変更しますかpasswdpasswd

答え1

私が知っている限り、PAMはユーザーのシェルを決定できません。これはアプリケーションに依存します。 PAMのセッションモジュールは、特定のサービスを使用してログインするたびに実行する必要がある一般的なタスクと検証を実行します。その後、アプリケーションがシェルを起動しようとすると、そのままそれを行うことができ、通常はユーザーデータベースでシェルを見つけます。

あなたの質問が次のとおりです。SSHを開く、これがすぐに行われることです。ユーザーが認証され、PAMセッションコンテンツが完了すると(PAM1を使用するように構成されている場合)、sshサーバーはユーザーデータベースでシェルを見つけます(PAMライブラリを介さずに直接)。

ユーザーデータベースは/usr/passwd友達に限定されません。 Linuxでは、(この記事を参照してLinuxを使用していると仮定します)、ユーザーデータベースの構成は次の設定によってshadow決まります。passwd/etc/nsswitch.conf。マルチシステム設定では、ローカルデータベースへの一般的な追加は次のとおりです。国家庭園そしてLDAP。使用するシェルが にあるシェルでない場合は、/etc/passwd次の設定を行う必要があります。 (少し奇妙ですが、達成しようとしている目標を知ると、人々はより良​​い提案を提供できます。)

ユーザーがフルシェルアクセスを許可しないようにするには、自然な解決策は制限付き/etc/passwdシェルを配置するように変更することです。RSSHscp、rsync、cvsなど、いくつかのファイルコピータイプのアプリケーションのみが許可されています。ユーザーディレクトリでforceコマンドを使用することもできます。~/.ssh/authorized_keys文書

SSHサーバーが何をしているのかを見るには、デーモンを起動してくださいssh -dddssh -vvvここではサーバービューに最も興味がありますが、Get the client's viewを使用することもできます。

1 OpenSSHは、 PAMサポートが設定され、UsePAMディレクティブがに設定されている場合にのみyesPAMを使用しますsshd_config。 PAMを使用しても、特にPAMに加えて他の認証方法を提供するため、公開鍵認証はPAMを経由しません。

関連情報