Topic: 关于Runtime.exec()的问题 |
Print this page |
1.关于Runtime.exec()的问题 | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-30 16:18 代码如下(在RedHat 9.0下运行) String[] s = {"/bin/bash","-c","/bin/su","-c","/home/ctc/commapp.bin"}; String cmd = "su -c /home/ctc/commapp.bin"; try{ Runtime.getRuntime().exec( s ); Runtime.getRuntime().exec(cmd); }catch(Exception ex){ ex.printStackTrace(); } 其中 s 和 cmd 的路径和可执行文件名绝对是正确无误的,但两个进程 的执行结果总是: a, 产生的进程立刻消失或根本没有产生(在shell 里面可正常执行) b, 执行期间未抛出任何异常 问题是: a, 这是否有可能是JVM自己的安全限制(我还未看到相关的文档有提到该 问题, 不知道大家有没有看到过) b, 还有其他的方式可以决绝这个问题吗(在没有commapp.bin代码的情况下) |
2.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-30 17:12 自己试了一下用: SecurityManager的 checkExec(String cmd); 的方法,结果抛出了 access denied (java.io.FilePermission <<ALL FILES>> execute) java.security.AccessControlException: access denied 的异常,看来是没什么希望了,不知道版主有没有其他办法推荐? |
3.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: why Posted on: 2004-08-30 21:29 cxp108 wrote: Have you checked the java.security or java.policy file -- I have fogotten which one -- and grant the proper access permission? |
4.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: floater Posted on: 2004-08-30 21:31 i don't know what you are trying to do. |
5.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: joelwx Posted on: 2004-08-30 22:42 jdk/bin/policytool.exe 可以为你的CLASS/JAR设置FILE PERMISSION,研究一下吧!god will bless u! |
6.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-31 09:37 呵呵,没表达清楚! 这个程序是我在Linux上写的服务器程序,其主要功能是启动 几个由C写的本地程序进程(这些进程为网络中的某些客户提供服务) 其中有一个名为commapp的进程,需要使用root权限运行因此必须用 su -c "....." 这种方式运行,程序实验阶段root不设置任何密码,连空 密码都没有,也就是说运行su命令时系统根本不会要求输入密码 在启动这些进程的同时获得其进程对象(Process),并启动GUI对这些进程进行 管理(如:获取其标准输出并进行排序,管理进程的启动和结束等) 由于该程序在是本地运行的应用,默认的权限应该是AllPermission才对 我用SecurityManager的 checkExec("su -c /home/ctc/commapp.bin"); 检查运行该条命令的权限,抛出了该异常 access denied (java.io.FilePermission <<ALL FILES>> execute) java.security.AccessControlException: access denied java.io.FilePermission 明明已经是 <<ALL FILES>> 了 为什么还会access denied? 希望大家能尽量帮忙,这对我很重要,直接关系到项目的成败问题!! 谢谢大家. |
7.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: floater Posted on: 2004-08-31 09:51 ok, let's seperate what you want to do and what you did for the troubleshooting. You want to run a unix command through exec, now what did you get when you run it?? This will let us know what's wrong. can you run it under unix? a side note, never never su to root to run anything, even for testing. You don't want to look for trouble, . Just create a new user for that. I haven't been su'd to root for years, feel so good when I could do it, THE POWER! |
8.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-31 10:13 当我运行exec("su -c /home/ctc/commapp.bin")时出现了以下情况 a, 产生的进程立刻消失或根本没有产生(在shell 里面可正常执行) b, 执行期间未抛出任何异常 在Linux 下可以直接运行 su -c /home/ctc/commapp.bin 没有任何问题 求助: 我使用exec的方式是否有错误? 问题到底出在哪? 有什么方法可以绕过exec来生成我的进程? |
9.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-31 10:14 小弟虽然用Linux和UNIX只有2个年头,但是对于root的威力还是有相当 "震撼"性的认识,但无奈commapp.bin是别人写的程序,它是一个要求必 须在root下运行的守护进程,否则我也不会走exec这条路(我可是个夸平 台的死硬分子),我宁愿自己在java中实现它 |
10.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: floater Posted on: 2004-08-31 11:16 Try this
|
11.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: think Posted on: 2004-08-31 12:11 Runtime.getRuntime().exec(...)返回Process类,你可以检查一下它的getInputStream()和getErrorStream()方法,看看有没有什么信息。 我曾经用Runtime.getRuntime().exec(...)编译过java代码,没什么问题的。 |
12.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: 烂泥 Posted on: 2004-08-31 12:34 http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html |
13.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-31 14:13 我终于发现自己表达毛病所在了.............. 实在是惭愧! 其实,我已经用Runtime.exec()生成数个进程了(都是直接运行一个本地的 二进制文件,如:Runtime.exec("/home/ctc/commsrv.bin")),它们都工作正常 并在控制之下,唯独当我用Runtime.exec("su -c /home/ctc/commapp.bin") 生成进程时出现问题. 浪费大家诸多宝贵时间,实在抱歉!(尤其是floater......) 现在经反复实验后,我得出以下结论: Runtime.exec()不能运行 Linux 下的 su 命令,这可能是由Java 虚拟机和 Linux Shell这两重安全机制同时决定的. |
14.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: xiaopa Posted on: 2004-08-31 15:58 如果直接把java本身的提升到root用户运行应该可以解决这个问题,但是安全上要考虑的问题就多了。 |
15.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: xiaopa Posted on: 2004-08-31 16:12 这样不知道可不可以? Runtime.getRuntime().exec("sh bin/su -c /home/ctc/commapp.bin"); |
16.Re:关于Runtime.exec()的问题 [Re: xiaopa] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-08-31 17:21 xiaopa wrote: 试过了,不行 |
17.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: floater Posted on: 2004-08-31 22:03 cxp108 wrote: If my memory serves me right, I think it's RedHat linux's restriction, google it. |
18.Re:关于Runtime.exec()的问题 [Re: cxp108] | Copy to clipboard |
Posted by: cxp108 Posted on: 2004-09-01 11:23 了解 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |