2013-04-09 56 views
0

我發現了一個link,它說明了如何使用基於用戶的uid獲取pwd。在java中的C++的pwd.h lib的等價物

我有一個類似的需求在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上述要求。

回答

1

Java不提供這種開箱即用的功能,因爲它既依賴於系統,又會破壞Java的安全性概念。

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

  • 使用JNI封裝打電話給你的C++方法,讓你可以做你需要在C++
  • 一切
  • 使用ssh啓動腳本不同的用戶
  • 使用sudo啓動腳本不同的用戶

參見

+0

感謝您的指導,但我不能使用SSH或sudo,因爲我不能PWD進入他們爲了執行所需的操作 – Galaxin 2013-04-09 09:19:47