Я пытаюсь разрешить пользователям ssh быть определенными в Radius, но совместно использовать домашний каталог, оболочку и т. д. Идея состоит в том, что все пользователи используют один и тот же домашний каталог и оболочку по умолчанию (приложение). Я бы хотел избежать создания множества учетных записей на локальном компьютере (на самом деле это контейнер докеров), поскольку их активность ограничена приложением. Я думаю, что мне просто нужно заменить информацию о пользовательской базе данных, но я не понимаю, как просто переопределить эту часть активности входа в систему. Кто-нибудь еще делал это, или я должен решить это по-другому?
В коде pam_radius FreeRadius в строке 1150 файла pam_radius_auth.c функция pam_sm_authenticate вызывает pam_get_user (...). Думаю, именно здесь в игру вступает пользовательская база данных. (Я новичок в этом коде.) Функция pam_get_user не реализована в коде pam_radius, но реализована в коде linux_pam. В строке 273 файла linux_pam pam_item.c определен pam_get_user, и он возвращает пользователя из pam_handle_t, переданного в * user = pamh-> user;
В модуле pam_ldap нет pam_get_user, но я ожидал, что он будет. Поэтому я не понимаю, как эти части сочетаются друг с другом. Каким-то образом pam_ldap заполняет структуру pam_handle_t или через какой-то путь получает туда информацию.





Хорошо, я отвечу на свой вопрос. Если у вас есть лучшая информация, пожалуйста, внесите свой вклад. Этот вопрос мог бы быть лучше в ServerFault, но как программист я трачу больше времени на StackOverflow, поэтому я не думал об этом. Библиотека PAM полезна для единого входа, но не может заменить файл / etc / passwd и связанные файлы. PAM и другие ресурсы, которые он приносит, дополняют внутреннюю информацию Linux. Итак, хотя вы можете аутентифицироваться на удаленном сервере, таком как Radius, у вас все равно будут записи в / etc / passwd. Поток управления - это список правил в pam.conf, а библиотека верхнего уровня движется вниз по списку, позволяя каждому модулю (плагину) выполнять свою работу. Прочтите "man pam.conf" и "man pam_mkhomedir" для получения хорошей информации о том, как это работает. Модуль реализует 6 функций, поэтому очень легко добавлять новые модули. См. Pam_deny.c для самого простого модуля. Кроме того, getpwnam - это функция, которая может вам понадобиться во всем, что вы пытаетесь сделать. Вы можете прочитать об этом, используя "man getpwnam", но вы, вероятно, уже это знали.
Сомнительно, подходит ли этот вопрос лучше для Server Fault, как я полагаю. Возможно, вы захотите взглянуть на stackoverflow.com/help/asking, потому что в идеале вы должны предоставить минимальный пример кода того, что вы пробовали до сих пор.