代码之家  ›  专栏  ›  技术社区  ›  mindas

Java中的Linux-PAM模块

  •  3
  • mindas  · 技术社区  · 15 年前

    我有一个用Java编写的自定义身份验证机制。我想知道在不重写C代码的情况下实现Linux PAM模块的最佳方法是什么?

    我知道 this list of available PAM modules

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

    欢迎提出任何建议。

    5 回复  |  直到 15 年前
        1
  •  2
  •   el.pescado - нет войне    15 年前

    你可以试试:

    • 编写嵌入JVM并加载Java代码的glue C程序

    但这两种想法似乎都不理想。

        2
  •  3
  •   Doug    9 年前

    你想过用 pam_exec?

    e、 g.在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 $?
    
        3
  •  1
  •   Edwin Buck    15 年前

    JVM启动包装器非常流行,因为人们仍然希望交付真正在jar中运行程序的“exe”。您将需要研究JNI通常不做的事情,从二进制可执行文件调用JVM;不幸的是,大多数JNI指令关注于从Java调用C代码。

    可以找到一个关于如何从C代码创建JVM的好例子 here . 将C代码模块转换为PAM共享对象库需要做一点工作,但不太困难。

    祝你好运!

        4
  •  0
  •   Elf King    15 年前

    实际上,您可以让Java与一个C存根通信,而C存根又连接到PAM回调。阅读JNI(Java本机接口)。JNI主要用于将C公开给Java,但实际上可以用另一种方法。您可能还想调查GNU CNI,因为它实际上更方便使用。网站上列出了很多资源 Wikipedia JNI page

        5
  •  0
  •   weberjn    12 年前

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

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