Итак, дело было в Linux.Задача: наряду с passwd/shadow создать возможность авторизации пользователей из базы данных Firebird в операционной системе, а в перспективе — в почте, в самбе, на прокси и так далее.
Начав копать информацию по теме, я наткнулся на PAM. Оказалось, нужно написать PAM-модуль. Собственно, все там понятно и красиво, кроме одного.
В ответ на попытку авторизации модуль должен выяснить:
существует ли такой пользователь,
правильно ли указан пароль,
не истек ли срок аккаунта
и так далее.Казалось бы, всего делов — взять за основу исходник pam_permit (этот модуль пускает всех без разбора) или пример модуля из какой-нибуь статьи (примеров по пальцам сосчитать, но их все же предостаточно), воткнуть его в систему и дорабатывать, тестировать.
Исходя из спецификации PAM-модулей для того, чтобы функция ответила вопрошающему приложению "да", достаточно в ее реализации вернуть PAM_SUCCESS и все.
То есть буквально пишу везде:
{
return PAM_SUCCESS;
}в /etc/pam.d/ в login или даже system-auth для модуля пишу sufficient в auth и password
(кроме sufficient перепробовано и required и т. д.)Проблема: не пускает.
Оставлял в конфиге уже одного его. Не пускает.
Чтобы избежать лишних предположений, скажу, что модуль успешно собирается, копируется в папку к другим модулям и ему даются теже права доступа, что и другим. Отладочные сообщения доказывают, что функции, которые должны выполняться из моего модуля таки выполняются точно.
Чего я хочу.
Пример конфигурации PAM, при котором работает хотя бы тот же pam_permit. То есть тупо пускает с любым логином/паролем. Далее разборки с доступом к базе, домашним каталогом, группой, правами, uid-ом и прочим хозяйством более-менее ясны. Уперся я именно в PAM. Чувствуется, что истина где-то рядом, но чего-то не хватает.
или
Задача сама по себе просто обязана возникать из-за растущего применения БД везде, где только можно. И дело тут даже не конкретно в Firebird-е. Наверное кто-то уже натыкался на эти грабли и может поделиться ссылками, кусками кода или конфигов. (ни одна из найденных мной статей (не меньше, чем штук пять, на этом сайте в том числе) решения на проблему не подкинула).
Что я упустил?
я думаю что не стоит изобретать велик
http://www.kernel.org/pub/linux/libs/pam/modules.html
> я думаю что не стоит изобретать велик
> http://www.kernel.org/pub/linux/libs/pam/modules.htmlСпасибо за ссылку. Там много классных великов!
Видимо, в этот раз я насиловал гугл в режиме пониженного зверства и не нашёл.Кстати, если интересно, временно решено по-другому:
все юзеры из базы + потом при манипуляциях зеркалятся в LDAP.
Для упрощённого доступа к LDAP заюзан самокат
под названием smbldap-tools (http://www.iallanis.info/).В результате вышло хоть и тормозное (кроме первого зеркалирования не критично)
решение, но успешное (хоть и временное). Всё, о чём писал выше, работает.
>я думаю что не стоит изобретать велик
>http://www.kernel.org/pub/linux/libs/pam/modules.htmlсейчас глянул, писец, неужели ни кто не додумался написать pam-odbc?!