web-dev-qa-db-ja.com

PAMとNSSを理解する

最後の数日間、LDAP認証を使用してLinuxシステムをセットアップしましたが、すべて正常に動作しますが、NSSとPAMについては、多くの調査の結果、まだ理解できないことがまだあります。

引用:

NSSにより、管理者は、認証ファイル、ホスト名、およびその他の情報が格納および検索されるソースのリストを指定できます

そして

PAMは、アプリケーションと基盤となるオペレーティングシステムに構成可能な認証プラットフォームを提供する一連のライブラリです。

私が理解していないのは、PAMとNSSがどのように機能し、相互作用するかです。 この本 でアーキテクチャがかなり説明されています。LDAPアカウントにpam_ldapを使用し、ローカルアカウントにpam_unixを使用するようにPAMを構成してから、フェッチするようにnsswitch.confを構成します。ローカルファイルとLDAPからの情報。

私が正しく理解している場合、LDAPは2回使用されます。最初にpam_ldapによって、次にpam_unixから呼び出されるNSSによって使用されます。そうですか? LDAPは本当に2回使用されますか?しかし、なぜNSSとPAMの両方を構成する必要があるのですか?私の説明では、PAMはNSSとは異なるタスクを実行し、他のプログラムで使用されます。しかし、私が このページ で読んだように、NSSのみまたはPAMのみを使用することが可能であるはずです。

そこで少し実験して、最初にnsswitch.confからLDAPを削除しようとしました(そして、認証が機能しなくなりましたpam_ldapだけでは不十分であるかのようにジョブを実行するため)。次に、NSSでLDAPを再度有効にして、PAM構成から削除しました(今回はすべて正常に動作しましたpam_ldapは役に立たず、NSSで十分ですユーザーを認証するには)。

これを明確にするのを手伝ってくれる人はいますか?よろしくお願いします。

更新

今何か試したところです。すべてのpam構成フィールドのすべてのpam_ldapエントリを再度削除し、shadow: ldapnsswitch.confから削除しました。現在すべてのシステムで、passwd: ldap filesの行はgroup: ldap filesおよびnsswitch.confのみです。まあ... LDAPユーザーのログインは完全に機能します。これらの2行(および/etc/ldap.conf)でLDAP認証を設定できます。

私の知識からPAMはNSSから独立していますが、私のテストはそうではないことを示しました。だから私は自分自身に問いかけますNSSを完全に無効にしてPAMのみを使用することは可能ですか?

21
ColOfAbRiX

それはあなたの頭の中でこのように物事を分解するのに役立ちます:

  • [〜#〜] nss [〜#〜]-さまざまなOSレベルのデータベースがメモリ内でどのように組み立てられるかを制御するためのモジュールベースのシステム。これには、passwdgroupshadow(注意することが重要)、およびhostsが含まれます(これらに限定されません)。 UIDルックアップはpasswdデータベースを使用し、GIDルックアップはgroupデータベースを使用します。

  • [〜#〜] pam [〜#〜]-サービスベースの認証とアカウンティングを可能にするモジュールベースのシステム。 NSSとは異なり、既存のデータベースを拡張するわけではありません。 PAMモジュールは好きなロジックを使用できますが、シェルログインはNSSのpasswdおよびgroupデータベースに依存しています。 (常にUID/GIDルックアップが必要です)

重要な違いは、PAMはそれ自体では何もしないということです。アプリケーションがPAMライブラリにリンクせず、それを呼び出す場合、PAMは決して使用されません。 NSSはオペレーティングシステムの中核であり、データベースはOSの通常の操作のかなりどこにでもあります。

これで問題は解決しました。これがカーブボールです。pam_ldapはLDAPに対して認証する人気の方法ですが、のみの方法ではありません。

  • shadow/etc/nsswitch.conf内のLDAPサービスを指している場合、シャドウフィールドマッピングの属性(特に暗号化されたパスワードフィールド)がLDAPに存在し、ログインを許可します。
    • つまり、pam_unix.soはシャドウデータベースに対して認証を行うため、LDAPに対して認証が行われる可能性があります。 (これはNSSによって管理され、LDAPを指している可能性があります)
  • PAMモジュールがデーモンに対して呼び出しを実行し、次にLDAPデータベースにクエリを実行する場合(たとえば、sssdをフックするpam_sss.so)、LDAPが参照される可能性があります。
26
Andrew B

NSSは、サービス/ユーザー(所属するグループ、ホームディレクトリの場所など)に関する情報を列挙するためにあります。 PAMはその情報に対して何をするかを決定します。

authenticationにLDAPを使用する場合は、needpam_ldapが必要です。他のもの(ローカルアカウント、Kerberosなど)を使用している場合は、使用しない可能性があります。

したがって、彼らは異なることをします。 NSSが情報を取得すると、PAMは、その情報が取得されると誰が何を実行できるかを決定します。

1
TheFiddlerWins