Модуль Linux PAM на Java - PullRequest
       18

Модуль Linux PAM на Java

3 голосов
/ 30 июня 2010

У меня есть собственный механизм аутентификации, написанный на Java.Мне было интересно, что было бы лучшим способом реализовать модуль PAM Linux без переписывания кода на C?

Мне известен этот список доступных модулей PAM , но ни один из них не является Java

Существует также JPam , но он делает противоположную вещь: он позволяет получать информацию о пользователях / группах для использования в приложении Java, тогда как мне нужно использовать существующий код Java для аутентификации пользователей.в Linux (например, через SSH).

Любые предложения приветствуются.

Ответы [ 5 ]

2 голосов
/ 03 октября 2016

Задумывались ли вы об использовании pam_exec?

Это позволяет запустить скрипт для PAM.

Например, вы добавляете что-то вроде следующего в вашу конфигурацию PAM:

auth sufficient pam_exec.so expose_authtok /usr/local/bin/myscript-example

Вот простой сценарий, который отображает все переменные, но вы также можете легко запустить его с помощью Java-программы и передать необходимые переменные.

В зависимости от того,Выполнение сценария или ошибки должны контролировать успешность проверки подлинности.

Пример сценария, отображающий все переменные:

#!/bin/sh
read password
echo "User: $PAM_USER"
echo "Ruser: $PAM_RUSER"
echo "Rhost: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Password : $password"
exit $?
2 голосов
/ 30 июня 2010

Вы можете попробовать:

  • Скомпилируйте вашу Java-программу, используя GCJ для собственного кода
  • Напишите клейкую C-программу, которая встраивает JVM и загружает ваш Java-код

но ни одна из этих идей не кажется идеальной.

1 голос
/ 30 июня 2010

Напишите оболочку C для взаимодействия с PAM и в реализации используйте JNI для вызова экземпляра JVM.

Обертки для запуска JVM были очень популярны, когда люди все еще хотели предоставлять «exe», которые действительно запускали программы в JAR. Вы захотите посмотреть, что обычно не делается с JNI, вызывая JVM из двоичного исполняемого файла; к сожалению, большинство инструкций JNI сосредоточены на вызове кода C из Java.

Хороший пример того, как создать JVM из кода C, можно найти здесь . Превращение модуля кода C в библиотеку общих объектов PAM займет немного времени, но вряд ли это будет слишком сложно.

Наконец, не забывайте, что JNI использует и возвращает типы Java для большинства своих операций. Это означает, что вам придется читать типы данных «C» (возможно, char *) и создавать строки Java, прежде чем передавать их в JVM. То же самое верно для получения информации из Java и ее передачи обратно в библиотеки PAM.

Удачи!

0 голосов
/ 01 апреля 2014

http://jaas -pam.sourceforge.net /

Он выполняет аутентификацию пользователя и работает с jaas-областью Tomcat, но не возвращает информацию о группе / роли, поэтому нет веб-аутентификации на основе ролей.

0 голосов
/ 30 июня 2010

Вы можете заставить Java общаться с заглушкой C, которая, в свою очередь, подключается к обратным вызовам PAM.Читайте о JNI (собственный интерфейс Java).В основном JNI используется для представления C на Java, но вы можете сделать это наоборот.Вы также можете изучить GNU CNI, так как на самом деле его удобнее использовать.На странице Википедии JNI

перечислено много ресурсов.
...