Я пишу свой собственный модуль PAM, который будет частью приложения, которое я разрабатываю, но я точно не знаю, где его разместить. Мой модуль в основном выполняет аутентификацию на уровне сети (с другими моджами, конечно) аналогично LDAP.
В моем /etc/pam.d/
каталоге много конфигурационных файлов , и я знаю, что делает большинство сервисов (кроме пары, например, atd, polkit, ppp). Я предполагаю, что аутентификация со стеком PAM происходит примерно так:
- Запускает стек на основе имени службы (если файл конфигурации существует)
- Если не аутентифицировано, используйте common- *, где * - тип модуля (аутентификация, учетная запись и т. Д.)
- Вернуть успех или не вызвать вызывающее приложение (и любые другие данные, конечно)
Я прав в этом предположении? Все ли платформы имеют общую аутентификацию, общую учетную запись, общий пароль и общий сеанс?
Если это так, я думал о том, чтобы просто поместить его на вершину common- * в качестве sufficient
модуля, чтобы при сбое обычный стек PAM оставался без изменений. Это особенно полезно, потому что я могу сделать это программно при установке программного обеспечения.
Я пропускаю какие-либо потенциальные уязвимости безопасности?
Я не смог найти очень хорошую документацию о том, где интегрировать пользовательские модули PAM, или о проблемах безопасности, связанных с размещением модулей.
источник
Ответы:
Когда вы вызываете Linux-PAM для какой-либо процедуры аутентификации, всегда выполняется один и только один стек.
Определение стека ищется в этих местах; первая успешная попытка определяет, какой файл читается:
файл
/etc/pam.d
назван в честь приложения «имя службы» (например,sshd
илиgdm
), илифайл,
/etc/pam.d/other
если файл для конкретной службы не существует, илифайл,
/etc/pam.conf
если каталог/etc/pam.d
не существует.Подробности смотрите в документации по функции pam_start .
Файлы common- * - это соглашение, которому следуют многие дистрибутивы Linux, но оно не требуется самим программным обеспечением PAM. Они обычно включаются другими файлами PAM с помощью
@include
операторов; например,/etc/pam.d/other
файл в Debian имеет следующее содержимое:Те же
@include
операторы могут использоваться и для файла, специфичного для службы, и -indeed- они находятся в конфигурации по умолчанию в Debian. Обратите внимание, что это вопрос конфигурации: системный администратор может изменить файл так,/etc/pam.d
чтобы он вообще не включал общие файлы *!Поэтому: если ваш модуль PAM относится к вашему приложению, создайте файл службы для конкретного приложения и оттуда вызовите модуль. Вы не автоматически добавить модуль PAM файл других служб , ни к осенне-обратно
others
файл, так как это может нарушить работу других приложений , установленных в системе. Управление программным стеком PAM является задачей системного администратора, а не разработчиков приложений.источник