как я могу получить ip клиента в pam

Я пишу собственный модуль pam, в котором аутентификация контролируется только с определенных IP-адресов.

Я не могу получить IP-адрес клиента, выполняющего соединение. Есть ли пример?

Я использую эту функцию в своем коде

....
    err = pam_get_item(pamh, PAM_RHOST, (const void **) &pHost);
.....

Но я получаю phhost как всегда null


person Ram    schedule 07.10.2015    source источник
comment
не очень хорошая идея, IP-адреса могут быть легко подделаны. ОЧЕНЬ ЛЕГКО   -  person Behrooz    schedule 07.10.2015


Ответы (1)


Прежде всего:

где аутентификация контролируется только с определенных IP-адресов

Плохая идея основывать это на IP-адресах, так как их можно до смешного легко подделать. Просто не делай этого.

Во-вторых:

Как man pam_get_item скажет вам

Запрашивающее имя хоста (имя хоста машины, с которой объект PAM_RUSER запрашивает службу). То есть PAM_RUSER@PAM_RHOST действительно идентифицирует запрашивающего пользователя. В некоторых приложениях PAM_RHOST может иметь значение NULL. В таких ситуациях неясно, откуда исходит запрос аутентификации.

Это будет иметь место во многих приложениях в настоящее время.

Возможно, вы просто путаете источники PAM-запросов (которым не следует никогда доверять — это люди, которые пытаются получить аутентификацию, поэтому доверять им, прежде чем доверять им, просто) делая ваш собственный механизм аутентификации бесполезным) и «аутентификатор», работающий в фоновом режиме.

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

person Marcus Müller    schedule 14.10.2015