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 に答える