PAMとNSSを理解する


21

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

引用:

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

そして

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

私が理解していないのは、PAMとNSSがどのように連携し、相互作用するかです。で、この本アーキテクチャはかなりよく説明されている:私のconfigure PAMを使用するpam_ldapLDAPを占め、のためにpam_unixローカルアカウントのために、そして私configureはnsswitch.confローカルファイルとLDAPから情報を取得します。

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

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

これを明確にするのを手伝ってくれる人はいますか?事前に感謝します。

更新

私は今、何かを試しました。pam_ldapすべてのPAM設定フィールドのすべてのエントリを再度削除しshadow: ldap、からも削除しましたnsswitch.conf。:今のようすべてのシステムでのみ行があるpasswd: ldap filesgroup: ldap filesではnsswitch.conf。さて... LDAPユーザーのログインは完璧に機能/etc/ldap.confします。LDAP認証を設定するには、これら2行(プラス)で十分です。

NSSから独立した私の知識PAMからですが、私のテストではそうではありませんでした。自分自身に尋ねる私はそう完全に無効NSSすることが可能であり、唯一のPAMを使うのか?


私はあなたの更新を見ませんでした。次のコマンドを実行して、結果を報告し、LDAPUSERをLDAPでのみ構成されていると思われるユーザーに置き換えてください。getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
アンドリューB

回答:


25

あなたの頭の中でこのようなことを分解するのに役立ちます:

  • NSS-さまざまなOSレベルのデータベースをメモリにアセンブルする方法を制御するためのモジュールベースのシステム。これには、(これらに限定されないが)passwdgroupshadow(これは注意することが重要である)、およびhosts。UIDルックアップはpasswdデータベースを使用し、GIDルックアップはgroupデータベースを使用します。

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

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

これが邪魔にならないようになったので、ここにカーブボールがあります。pam_ldapはLDAPに対して認証するための一般的な方法ですが、それが唯一の方法ではありません。

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

nsswitch.conf + pam_unixがすべての作業を単独で行えることを、心から感謝します。ただし、PAMも同様に実行できるはずです。これは、あなたが書いたように、独立しているためです。私の理解では、モジュールpam_ldapはLDAPサーバーに対してユーザーを認証するのに十分なはずです。そうじゃない?
ColOfAbRiX

6
はい、認証しますが、ユーザー情報(ローカル/ etc / passwdなど)を取得する別の方法がない限り、グループメンバーシップ、ホームディレクトリなどを見つける方法が必要です。認証と承認/属性の列挙は依然として混乱しています。
TheFiddlerWins

1
@ColOfAbRiX TheFIddlerWinsは正しいです。認証するだけで十分ですが、まだ述べたように、UID + GIDメンバーシップを検索する方法が必要です。これらはpasswdgroupデータベース(NSS)から取得されます。つまり、ローカルシステム(/etc/passwd+ /etc/group)上にあるか、ldapNSSモジュール経由で取得する必要があります。
アンドリューB

3
理解を助ける方法を次に示します。実行getent passwdgetent group、LDAPの両方のデータベースでLDAPを有効にします/etc/nsswitch.conf。次に、そのファイルでLDAPを無効にし、両方のコマンドを再度実行します。getentNSSデータベースをダンプするためのコマンドです。
アンドリューB

ついに、もう少しの作業ですべてを理解することができました。君たちありがとう!
ColOfAbRiX

1

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

認証に LDAPを使用する場合は、 pam_ldap が必要です。他のもの(ローカルアカウント、Kerberosなど)を使用している場合は、使用できません。

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


感謝しますが、問題は、少なくとも私のシステムではそのように機能しないということです:少なくとも最初は同じことを理解していましたが、PAMのすべてのpam_ldapエントリを削除しようとしましたが、LDAP認証はまだ機能していました(そしてキャッシュを無効にしました)。これにより私の混乱が増しました:)
ColOfAbRiX

pam_ldapを削除した後に認証していることをどのように確認していますか?common-authの内容を投稿してください。SUSEのパスについてはわかりませんが、3番目の質問の最初の部分に答えるには、pam_ldapが機能していても、システムがあなたが誰であるかを知るための何らかの方法が必要です-これはNSS
TheFiddlerWins

申し訳ありませんが、pam_ldapを削除した後、LDAP認証はそれなしで機能しましたが、NSSを介して機能したと思います。ファイルcommon-authには、pam_env、pam_unix、およびpam_denyのみが含まれていました。
ColOfAbRiX

それは理にかなっていませんが、LDAP認証が機能したことをどのように確認しましたか?
TheFiddlerWins

LDAPアカウントを使用してログインし、LDAPサーバーのログを監視します。nscd(キャッシュ)が無効になっています
ColOfAbRiX
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.