2010-11-15 50 views
3

我想子進程的用戶轉變爲輕微的特權 用戶,但是當我與父同用戶執行的ProcessBuilder子進程EXEC的啓動方法更改用戶環境下的的ProcessBuilder + java的

 LinkedList<String> commands = new LinkedList<String>(); 
     commands.add("vlc"); 
     ProcessBuilder builder = new ProcessBuilder(commands); 
     Map<String,String> enviroment = builder.environment(); 
     enviroment.clear();    
     enviroment.put("USER", "otheruser"); 
     enviroment.put("LOGNAME", "otheruser"); 
     enviroment.put("PWD", "/home/otheruser"); 
     enviroment.put("HOME", "/home/otheruser"); 
     enviroment.put("USERNAME", "otheruser"); 
     enviroment.put("SHELL", "/bin/false"); 
     builder.directory(new File("/home/otheruser"));    

     Process process = builder.start(); 
     process.waitFor(); 

我在Linux操作系統(Ubuntu的)

回答

0

你不能僅僅通過傳遞不同USER環境變量改變有效用戶的工作。這是Linux的安全功能(通常是Unix),否則惡意用戶可以將USER變量設置爲ROOT。除非可執行文件標記爲setuid,或者進程執行setuid()更改有效用戶(並允許setuid()),否則子進程始終以與父進程相同的用戶身份執行。

3

吉姆是絕對正確的。 但是,如果您仍想以不同的用戶身份運行程序,則必須使用用戶平臺相關工具。

Windows: 使用runas命令,例如:runas/user:domain \ jamesbond regedt32.exe 不幸的是runas要求用戶手動輸入密碼。 以下文章解釋瞭如何解決此問題: http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/Miscellaneous/RunprogramsasanotheruserinWindows2000WindowsXP.html

或者,您可以在VBS中編寫自己的實用程序並從java運行它。看到這篇文章的詳細信息:http://weblogs.asp.net/hernandl/archive/2005/12/02/startprocessasuser.aspx

Unix: 請參閱su和sudo的參考。 su很好,但它也需要密碼(除非當前用戶是root)。 要解決此問題,您可以創建期望腳本(請參閱http://en.wikipedia.org/wiki/Expect)。 Expect默認安裝在大多數unix發行版上。

祝你好運!