我正在運行Ubuntu 11.04。在Ubuntu中使用setuid來從C執行Java
我想使用「C」execlp程序來運行Java程序,然後我想setuid在「C」程序上,以便Java程序可以作爲根執行。這裏有這樣的一個例子:
http://www.coderanch.com/t/110254/Linux-UNIX/setuid
我所不同的而不是Tomcat的用戶的示例,以信,我用根。
根能夠執行「C」程序,然後執行Java程序。並且,在給予root用戶所有權之前,用戶(我)可以運行執行Java程序的「C」程序。但是,一旦我設置爲使用setuid,並且用戶嘗試執行該程序。我得到什麼似乎是錯誤的LD_LIBRARY_PATH類型: java的:錯誤而載入共享庫:libjli.so:無法打開共享對象文件:
的libjli.so文件下,不存在任何這樣的文件或目錄Java JRE。 User和Root都可以在單獨運行時看到這個文件。但是當用戶在setuid到root之後運行程序時,用戶看不到它。
當setuid程序執行時,根的LD_LIBRARY_PATH是否設置了一些不同的方法?這是一個交互式還是非交互式問題?
任何想法?提前致謝。
現在我有一個包裝Java程序的C程序。您是否建議我使用腳本來封裝包含Java程序的C程序?還是你的意思是別的?我願意嘗試一切。請說明。謝謝。 – 2011-06-12 04:16:56
是的 - 無論是一個腳本或另一個C程序,適當地設置'LD_LIBRARY_PATH'和'exec()'是C程序。 – duskwuff 2011-06-12 04:18:53
我不認爲這會奏效。鏈接器檢測來自進程的EUID和RUID的setuid位,該進程保存在exec中。 – 2011-06-12 04:28:38