微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中的Linux PAM模块

我有一个用Java编写的自定义身份validation机制。 我想知道什么是最好的方式来实现一个Linux的PAM模块,而不重写在C代码

我知道这个可用的PAM模块列表,但没有一个是与Java相关的。

还有JPam,但它却做了相反的事情:它允许获取在Java应用程序中使用的用户/组信息,而我需要使用现有的Java代码在Linux中validation用户(例如,通过SSH)。

任何build议,欢迎。

使用httpclient kerberos以编程方式设置用户名,而不是提示

基于主机的authentication和基于密钥的authentication之间的区别

使用基本身份validation(htaccess)来限制对特定URL的访问

用户凭据保存在Windows应用程序中

Web App模拟远程服务器:logonUser或LsalogonUser?

Python Samba:用户凭证未通过(cli_init_creds)?

如何进行基本身份validation排除重写的URL

在apache / Linux服务器上自动validationwindows用户

Nginx:auth_basic和PHP

Apache 2.4“..authentication失败..:密码不匹配”

你可以尝试:

使用GCJ将您的Java程序编译为本地代码

编写嵌入JVM并加载你的Java代码的粘合C程序

但这些想法都不是理想的。

你有没有想过使用pam_exec?

它允许您运行PAM的脚本。

例如,您可以在PAM配置中添加如下内容

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

这里有一个简单的脚本来回应所有的变量,但是您可以轻松地启动一个Java程序,传递所需的变量。

根据脚本是否成功或出错应控制auth是否成功。

示例脚本以反映所有变量:

#!/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 $?

编写一个C封装器与PAM进行接口,并在实现中使用JNI来调用JVM的一个实例。

当人们仍然想要提供真正在JAR中运行程序的“exe”时,JVM启动包装非常受欢迎。 您将需要查看JNI通常不会做什么,从二进制可执行文件调用JVM; 大多数的JNI指令都强调从Java调用C代码

如何从C代码创建JVM的一个很好的例子可以在这里找到。 将C代码模块转换为PAM共享对象库将需要一些工作,但这不太可能太困难。

最后,不要忘记,JNI在其大部分操作中使用并返回java类型。 这意味着您必须先读取“C”数据类型(可能是char *)并在将它们传递到JVM之前创建Java字符串。 反过来,从Java接收信息并将其传递回PAM库也是如此。

祝你好运!

实际上,您可以让Java与C stub进行交谈,然后再连接到PAM回调函数。 阅读JNI(Java本地接口)。 大多数情况下,JNI用于将C公开给Java,但实际上你可以用相反的方式来做到这一点。 您可能也想调查GNU CNI,因为它实际上更方便使用。 在Wikipedia JNI页面上列出了很多资源

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

它执行用户身份验证,并且与Tomcat的jaas领域一起工作,但不返回组/角色信息,所以没有基于角色的网络身份验证。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐