SSH接続を処理するとき、システムはどのようなステップを経ますか?
- SSH経由でログインしよう
sshd
ID を確認するには、pam モジュールと pam モジュールを起動します。- pam構成に応じて、ユーザー名とパスワードを指定する必要があります(pamチェックサム
passwd
ファイルshadow
)。 hosts.allow/deny
pamは、/etc/shells
およびその他の項目を確認します。- すべてがうまくいったらログインします
- ???
- シェルが起動しました
passwd
だから私の質問は、ファイル内のユーザーに割り当てられたシェルをチェックするのに役立つメカニズムですか? pam自体ですか、特定のpamモジュールですかsshd
、それとも別のものですか? pamモジュールを作成してファイル(ユーザー名とパスワードの確認用)を変更できることを知っていますが、シェルエントリのファイルをどのように変更しますかpasswd
?passwd
答え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 -ddd
。ssh -vvv
ここではサーバービューに最も興味がありますが、Get the client's viewを使用することもできます。
1 OpenSSHは、
PAMサポートが設定され、UsePAM
ディレクティブがに設定されている場合にのみyes
PAMを使用しますsshd_config
。 PAMを使用しても、特にPAMに加えて他の認証方法を提供するため、公開鍵認証はPAMを経由しません。