0

我找到了一个链接,该链接说明了根据用户的 uid 获取 pwd 的用法。

我在java中有类似的要求,需要以不同的用户身份运行脚本,这需要这个实现。

c++中的代码片段如下:

static void su(const char* user)
{
    struct passwd* pwentry=getpwnam(user);
    if(!pwentry)
        COUT<<"su:getpwnam:couldnot get pwd entry for user %s",user;
    uid_t new_uid=pwentry->pw_uid;
    struct passwd* pwentry_nmsadm=getpwnam("nmsadm");
    if(!pwentry_nmsadm)
        cout<<"su:getpwnam:could not get pwd for nmsadm");
    gid_t new_gid=pwentry->pw_gid;
    if(chdir(pwentry->pw_dir)<0)
        cout<<"su:chdir";
    uid_t current_uid=geteuid();
    gid_t current_gid=getegid();
    if(current_gid!=new_gid)
    {
        if(setgid(new_gid)<0)
        cout<<"su:setgid";
    }
    if(current_uid!=new_uid)
    {
        if(setuid(new_uid)<0)
        cout<<"su: setuid";
    }

请提出一些有用的链接(可以使用的库)或解决java中的上述要求。

4

1 回答 1

1

Java 不提供这种开箱即用的功能,因为它既依赖于系统,又会破坏 Java 的安全概念。

一些可能的解决方案可能是:

  • 使用 JNI 包装器来调用您的 C++ 方法,这样您就可以在 C++ 中做所有您需要的事情
  • 用于ssh以其他用户身份启动脚本
  • 用于sudo以其他用户身份启动脚本

也可以看看

于 2013-04-09T07:12:22.427 回答