我正在运行 Ubuntu 11.04。
我正在尝试使用“C”execlp 程序来运行 Java 程序,然后我想在“C”程序上设置 setuid,以便 Java 程序可以以 root 身份执行。这里有一个例子:
http://www.coderanch.com/t/110254/Linux-UNIX/setuid
除了不是tomcat用户,我使用了root,我按照这个例子进行了操作。
Root 能够执行“C”程序,该程序又执行 Java 程序。并且,在授予 root 所有权之前,用户(我)可以运行执行 Java 程序的“C”程序。但是一旦我设置使用 setuid,并且用户尝试执行该程序。我得到似乎是 LD_LIBRARY_PATH 类型的错误: java:加载共享库时出错:libjli.so:无法打开共享对象文件:没有这样的文件或目录
libjli.so 文件存在于 Java JRE 下。用户和 Root 在单独运行时都可以看到此文件。但是用户在 setuid 到 root 发生后运行程序时看不到它。
当 setuid 程序执行时,是否有一些不同的方式设置 root 的 LD_LIBRARY_PATH?这是交互式与非交互式问题吗?
有任何想法吗?提前致谢。