Розуміння PAM та NSS


21

Останніми днями я створив деяку систему Linux з автентифікацією LDAP, і все працює нормально, але все ще є щось, чого я не можу зрозуміти щодо NSS та PAM, також після багатьох досліджень.

Цитуючи:

NSS дозволяє адміністраторам вказати список джерел, де зберігатимуться та шукатимуться файли аутентифікації, імена хостів та інша інформація

і

PAM - це набір бібліотек, які надають настроювану платформу аутентифікації для додатків та базової операційної системи

Я не розумію, як PAM і NSS працюють і взаємодіють разом. У цій книзі архітектура пояснюється досить добре: я налаштовую PAM на використання pam_ldapдля облікових записів LDAP та pam_unixдля локальних облікових записів, потім налаштовую nsswitch.confна отримання інформації з локальних файлів та LDAP.

Якщо я правильно зрозумів, LDAP використовується два рази: спочатку, pam_ldapа потім NSS, з якого викликається сама pam_unix. Це так? Чи дійсно LDAP використовується два рази? Але чому мені потрібно налаштувати як NSS, так і PAM? Моє пояснення полягає в тому, що PAM виконує інші завдання, ніж NSS, і це використовується іншими програмами. Але тоді слід мати можливість використовувати лише NSS або лише PAM, як я читав на цій сторінці .

Тому я трохи експериментував, і спершу спробував видалити LDAP з nsswitch.conf(і автентифікація перестала працювати так, як ніби лише pam_ldap недостатньо для виконання роботи). Потім я ввімкнув LDAP в NSS і видалив його з конфігурації PAM (цього разу все працювало нормально, ніби pam_ldapмарно, і NSS достатньо для автентифікації користувача).

Хтось може допомогти мені прояснити це? Заздалегідь дякую.

ОНОВЛЕННЯ

Я просто щось спробував зараз. Я знову видалені всі pam_ldapзаписи у всіх областях конфігурації Співай , і я також видалений shadow: ldapз nsswitch.conf. Як і зараз у всій системі є лише рядки: passwd: ldap filesі group: ldap filesв nsswitch.conf. Ну ... вхід з користувачами LDAP прекрасно працює, цих двох рядків (плюс /etc/ldap.conf) достатньо для налаштування автентичності LDAP.

З моїх знань PAM незалежно від NSS, але мої тести показали, що це не так. Тож я запитую себе , чи можна повністю відключити NSS та використовувати лише PAM?


Я не бачив вашого оновлення. Будь ласка, запустіть наступні команди та повідомте про свої висновки, замінивши LDAPUSER тим користувачем, який, на вашу думку, налаштований лише в LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Андрій Б

Відповіді:


25

Це допомагає розбити такі речі в голові:

  • NSS - Модульна система для управління тим, як різні бази даних на рівні ОС збираються в пам'яті. Це включає в себе (але не обмежується) passwd, group, shadow(це важливо відзначити), і hosts. Шукання UID використовують passwdбазу даних, а пошук GID - groupбазу даних.

  • PAM - Модульна система, що забезпечує аутентифікацію та облік на основі сервісу. На відміну від NSS, ви не розширюєте існуючі бази даних; PAM модулі можуть використовувати будь-яку логіку їм подобається, хоча оболонки логіни все ще залежить від passwdі groupбаз даних НСС. (вам завжди потрібні пошукові записи UID / GID)

Важлива відмінність полягає в тому, що PAM не робить нічого самостійно. Якщо програма не посилається на бібліотеку PAM і не здійснює дзвінки до неї, PAM ніколи не звикне. NSS є основним для операційної системи, а бази даних є досить повсюдними для нормальної роботи ОС.

Тепер, коли у нас це не виходить, ось крива куля: хоча 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, як я зазначив. Вони отримані з баз даних passwdта groupданих (NSS), а це означає, що вони повинні бути в локальній системі ( /etc/passwd+ /etc/group) або отримані через ldapмодуль NSS.
Андрій Б

3
Ось спосіб допомогти вам зрозуміти: запустити getent passwdта getent groupввімкнути LDAP для обох баз даних у /etc/nsswitch.conf. Потім відключіть LDAP у цьому файлі та запустіть обидві команди ще раз. getentє командою для демпінгу баз даних NSS.
Андрій Б

Нарешті я зміг зрозуміти все за допомогою трохи більшої роботи. Дякую, хлопці!
ColOfAbRiX

1

NSS є для перерахування інформації про послуги / користувачів (до якої групи ви належите, де ваш домашній каталог тощо). PAM визначає, що робити з цією інформацією.

Якщо ви хочете використовувати LDAP для автентифікації, вам потрібен pam_ldap. Якщо ви використовуєте щось інше (локальні акаунти, Kerberos тощо), ви можете цього не робити.

Так вони роблять різні речі. NSS отримує інформацію, PAM визначає, кому дозволено робити те, щойно ця інформація буде отримана.


Дякую, але проблема полягає в тому, що він не працює таким чином, принаймні в моїй системі :) На початковому етапі я зрозумів те саме, але потім спробував видалити всі записи pam_ldap в аутентифікації PAM і LDAP як і раніше працював (і вимкнено кеш). Це посилило мою розгубленість :)
ColOfAbRiX

Як ви підтверджуєте, що ви перевіряєте автентифікацію через pam_ldap після її видалення? Опублікуйте, будь ласка, вміст вашого спільного автора. Я не впевнений у шляхах до SUSE, але у відповідь на першу частину вашого третього запитання, навіть коли працює пам_ldap, вам знадобиться певний шлях, щоб система дізналася, хто ви - це надає NSS
TheFiddlerWins

Вибачте, я маю на увазі, що після видалення pam_ldap, LDAP auth працював без нього, я думаю, він працював через NSS. Файл common-authмістив лише pam_env, pam_unix та pam_deny.
ColOfAbRiX

Це не має сенсу, як ви підтвердили, що працював LDAP?
TheFiddlerWins

Вхід у систему за допомогою облікового запису LDAP та моніторинг журналу серверів ldap. nscd (кешування) вимкнено
ColOfAbRiX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.