Использовать пользовательский механизм аутентификации SSH (OpenSSH)

У меня есть коллекция серверов (Debian/Ubuntu), для которых мне нужно создать пользовательский механизм аутентификации ssh.

Я нашел пару 'same-ish' примеры для справки с Duo и Authy. Они используют свой собственный API для аутентификации, но идея делегирования процесса аутентификации ssh в отдельное приложение-это то, что я пытаюсь достичь.

в идеале я хотел бы написать проверку подлинности программа на C++ , но я рад написать сценарий, если это то, что нужно.

14
задан tarka
02.02.2023 10:02 Количество просмотров материала 2954
Распечатать страницу

1 ответ

tl;dr версия: если вы хотите реализовать свой собственный способ проверки введенного пароля, напишите модуль PAM, который имеет pam_sm_authenticate() функция, скомпилировать его как, и добавить его к серверу /etc/pam.d/sshd.

посмотреть Linux-Pam Module руководство писателя а также другие источники. Начните с чего-то вроде этого:

#define PAM_SM_AUTH

#include <security/pam_modules.h>
#include <security/pam_appl.h>

int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char *argv[]) {
    return PAM_SUCCESS;
}

struct pam_module pam_foobar_modstruct = {
    "pam_foobar",
    pam_sm_authenticate,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
};

[можно использовать pamtester чтобы проверить модуль локально, прежде чем связываться с конфигурацией sshd.]


" попытка ответить на "реальный" вопрос " версия: это зависит от того, что вы на самом деле подразумеваете под "пользовательским механизмом аутентификации".

обычно слово "механизм" используется протоколами, такими как SASL или GSSAPI для описания всего "диалога" между клиентом и сервером - использует ли он пароль или пару ключей; хэшируется ли пароль, шифруется или отправляется в простом виде; доказывает ли механизм только идентичность клиента, или также сервера; и так далее. В SSH то же самое называют "методом аутентификации".

уровень аутентификации SSH имеет несколько методов аутентификации "верхнего уровня". Наиболее распространенные из них password (который только отправляет необработанный пароль на сервер),public-key (который использует ваш SSH id_rsa ключей подписать запрос с сервера), и gssapi-with-mic (который вызывает в second уровень аутентификации-GSSAPI – и почти всегда присылает Kerberos билет).

эти методы реализуются непосредственно в OpenSSH и вам придется изменять ее исходный код (клиент и сервер) для реализации с нуля. Однако некоторые из них можно расширить, так как они уже обращаются во внешние библиотеки:

  • С password метод, клиент отправляет необработанный пароль, а сервер вызывает библиотеку PAM для его проверки. PAM затем использует модули, такие как pam_unix (проверьте для /etc/passwd С + /и т. д./тень), pam_radius (проверка на сервере RADIUS) и так далее. Они настраиваются через /etc/pam.d.

  • С gssapi-with-mic метод, как клиент, так и сервер вызывают библиотеку GSSAPI, которая обычно имеет Kerberos в качестве встроенного механизма GSSAPI и позволяет добавлять пользовательские; в Linux это настраивается через либо /etc/gss/mech или /etc/gssapi_mech.conf файлы.

иерархии есть, в основном:

  • соединение SSH (sshd)
    • password метод-один простой запрос пароля
      • проверьте полученный пароль на /etc / shadow
      • проверьте полученный пароль на KDC Kerberos ("поддельный Kerberos")
      • дает полученный пароль PAM (libpam), который затем вызывает настроенный стек модулей:
        • pam_unix для проверки на /etc / shadow
        • pam_radius для RADIUS
        • pam_krb5 "липовых" Керберос
        • pam_opie для одноразовых паролей
        • etc.
    • publickey метод - отправить вызов, пусть клиент подпишет его ключом пользователя
    • keyboard-interactive метод-любое количество вопросов-ответов
      • взаимодействие с PAM
        • такие же модули PAM как выше, но могут иметь многократную цепь подсказки
      • взаимодействовать с bsdauth
      • etc.
    • gssapi-with-mic метод-вызов библиотеки GSSAPI; переключение сообщений между библиотекой и клиентом
      • Kerberos (99,9% времени) - проверка билета, отправленного клиентом
      • NTLM, SPKM3, GSS-BrowserID и т. д. (редко, но возможно)
    • hostbased способ – отправлять вызов, клиент подписывать с host key
9
отвечен grawity 2023-02-03 17:50

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх