SSH接続を処理する場合、システムはどのような手順を実行しますか?


9

SSH接続を処理する場合、システムはどのような手順を実行しますか?

  1. ssh経由でログインを試みます
  2. sshd pamとpamモジュールを起動して私たちを認証します
  3. pamの設定に応じて、ユーザー名とパスワードを提供する必要があります(pamチェックpasswdshadowファイル)
  4. PAMのためのチェックhosts.allow/deny/etc/shellsおよびその他のもの
  5. すべてがうまくいけば、ログインしています
  6. ???
  7. シェルが起動しました

だから私の質問は、どのメカニズムがpasswdファイル内のユーザーに割り当てられているかを確認する責任があるということです(ステップ6で)?それはpam自体、特定のpamモジュールsshd、または何か他のものですか?私は取り替えることができることを知っているpasswdPAMモジュールを書き込むことによって(ユーザ名とパスワードをチェックするための)ファイルを、どのように私は置き換えることができpasswd、シェルのエントリのファイルを?

回答:


8

私の知る限り、PAMはユーザーのシェルを決定しません。これはアプリケーションに委ねられます。PAMのセッションモジュールは、その特定のサービスを使用してログインするたびに実行する必要がある一般的なアクションとチェックを実行します。その後、アプリケーションがシェルを開始したい場合は、自由に開始でき、通常はユーザーデータベースでシェルを検索します。

あなたの質問がOpenSSHについてであると仮定すると、それはまさにそれが行うことです:ユーザーが認証され、PAMセッションが行われると(PAMを使用するように構成されている場合)、sshサーバーはユーザーデータベースでシェルを検索します(直接ではなく、 PAMライブラリを通じて)。

ユーザーデータベースは/usr/passwdや友達に限定されません。Linuxでは(あなたが言及しているので使用していると思いますshadow)、ユーザーデータベースを構成するものはのpasswd設定によって決まります/etc/nsswitch.conf。複数コンピュータのセットアップでは、ローカルデータベースへの一般的な追加はNISLDAPです。にないシェルを使用したい場合/etc/passwd、これは構成するものである可能性があります(少し奇妙ですが、達成しようとしていることを教えてくれれば、人々はより良​​い提案を提供できるでしょう)。

完全なシェルアクセスを持たないユーザーが必要な場合、自然な解決策は/etc/passwd、制限されたシェル(おそらくrsshがscp、rsync、cvsなどのファイルコピータイプのアプリケーションのみを許可する)を配置するように変更することです。ユーザーの~/.ssh/authorized_keysファイルで強制コマンドを使用することもできます

sshサーバーが何をしているかのトレースを表示したい場合は、デーモンをとして起動しますssh -ddd。また、を使用してクライアントのビューを取得することもできますがssh -vvv、ここではサーバーのビューが最も重要です。

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


システムにアカウントを作成せずに、自分のアプリケーションのユーザーが通常のユーザーとしてシェルにログインできるようにしたい。ユーザーデータ(ユーザー名、パス、シェル)はsqlite dbに保存されます。最初のステップは、dbに対してユーザーを認証するsqlite pamモジュールです。2番目のステップは、データベースから読み取ったシェルを提供することです。したがって、適切なnisモジュールを作成することで実現できると思います。回答ありがとうございます
pbm

@pbm:nisむしろdb(またはおそらくカスタムモジュール)を望んでいないと思います。
Gilles「SO-邪悪なことをやめなさい」

それはタイプミスです。私は「適切な(カスタム)nssモジュールを作成することによって」という意味です...
pbm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.