Які кроки проходить система під час роботи з SSH-з'єднанням?


9

Які кроки проходить система під час роботи з SSH-з'єднанням?

  1. Ми намагаємось увійти через ssh
  2. sshd запускає модуль пам і пам, щоб підтвердити нас
  3. Залежно від конфігурації пам’яті, нам потрібно вказати ім’я користувача та пароль (перевірки пам’яті passwdта shadowфайли)
  4. ПАМ перевіряє hosts.allow/deny, /etc/shellsі інші речі
  5. Якщо все піде добре, ми входимо в систему
  6. ???
  7. Снаряд запускається

Отже, моє запитання полягає в тому, який механізм відповідає за перевірку того, яка оболонка призначена користувачеві у їхньому passwdфайлі (на кроці 6)? Це сам пам, якийсь конкретний модуль пам’яті sshdчи щось інше? Я знаю, що я можу замінити passwdфайл (для перевірки імені користувача та пароля), написавши модуль пам’яті, але як я можу замінити passwdфайл для введення оболонки?

Відповіді:


8

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

Якщо припустити, що ваше питання стосується OpenSSH , це саме те, що він робить: як тільки користувач проходить автентифікацію, і дані сеансу PAM зроблено (якщо налаштовано використовувати PAM¹), ssh-сервер шукає оболонку в базі даних користувачів (безпосередньо, не через бібліотеку PAM).

База даних користувачів не обмежується /usr/passwdі друзями. У Linux (який, я вважаю, ви використовуєте з моменту згадування shadow), те, що складається з бази даних користувачів, визначається passwdналаштуваннями в /etc/nsswitch.conf. У налаштуваннях для багатьох комп’ютерів поширеними доповненнями до локальної бази даних є NIS та LDAP . Якщо ви хочете скористатись оболонкою, яка не є такою /etc/passwd, можливо налаштувати (хоча це було б трохи дивно, і, можливо, люди можуть запропонувати кращі пропозиції, якщо ви скажете нам, що ви намагаєтеся виконати).

Якщо ви хочете мати користувачів без повного доступу до оболонки, природним рішенням є змінити /etc/passwdна встановлення обмеженої оболонки - можливо, rssh, щоб дозволити лише кілька додатків типу копіювання файлів, таких як scp, rsync та cvs. Ви також можете використовувати примусові команди у ~/.ssh/authorized_keysфайлі користувача .

Якщо ви хочете побачити слід того, що робить ssh-сервер, запустіть демон як ssh -ddd. Ви також можете отримати уявлення клієнта ssh -vvv, хоча тут погляд на сервер - це те, що вас найбільше зацікавить.

¹ OpenSSH використовує тільки PAM , якщо він налаштований з підтримкою PAM і UsePAMдиректива встановлена в yesв sshd_config. Навіть коли він використовує PAM, він пропонує інші методи аутентифікації на додаток до PAM; зокрема аутентифікація відкритих ключів не проходить через PAM.


Я хочу дозволити користувачам моїх заявок входити в оболонку як звичайний користувач без створення облікового запису в системі. Дані користувачів (ім’я користувача, пароль та оболонка) будуть зберігатися у sqlite db. Перший крок - це модуль пам’яті sqlite, який автентифікує користувачів від db. Другий крок - надання оболонки, прочитаної з бази даних. Тому я думаю, що це можна досягти, написавши належний модуль nis. Танс для відповіді ...
pbm

@pbm: Я не думаю, що ви хочете nis, скоріше db(або, можливо, спеціальний модуль).
Жил "ТАК - перестань бути злим"

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