首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Java代码在Linux上运行超级用户命令?

如何通过Java代码在Linux上运行超级用户命令?
EN

Stack Overflow用户
提问于 2014-02-13 17:21:52
回答 3查看 2.6K关注 0票数 3

我的应用程序有多个用户和一个超级用户。我试图通过Java代码在Linux中编写和存储一个文件,但我得到了权限被拒绝的错误。我使用了以下代码:

代码语言:javascript
复制
Process process = Runtime.getRuntime().exec("/usr/bin/tiff2pdf -o /tmp/tiff_dir/temp.pdf /tmp/tiff_dir/image.tiff");
int returnCode = process.waitFor();

我得到以下错误:

代码语言:javascript
复制
java.io.FileNotFoundException: image.tiff (Permission denied)

根据我的分析,似乎是因为用户没有root权限,所以我得到了这个错误。这个问题的解决方案是什么?

EN

回答 3

Stack Overflow用户

发布于 2014-02-13 17:31:02

你不应该以超级用户的身份运行这样的命令,因为这会带来安全风险(例如,如果有人控制了你的java程序,那么他们就拥有通向王国的钥匙)。相反,您应该以较低的权限运行。

看起来问题出在访问image.tiff上,而不是tiff2pdf上。检查image.tiff的所有者和权限。

票数 1
EN

Stack Overflow用户

发布于 2014-02-13 18:00:14

首先,这两行不会产生java.io.FileNotFoundException: image.tiff (Permission denied)

代码语言:javascript
复制
Process process = Runtime.getRuntime().exec("/usr/bin/tiff2pdf -o temp.pdf image.tiff");
int returnCode = process.waitFor();

如果由于某种原因,命令失败,它将返回一个非零的返回码,并根据进程的标准错误生成一些输出(这是惯例)。您可以从process.getErrorStream()获得该标准错误(为了以防万一,可能也值得查看一下标准输出)。如果在那里找不到文件有问题,它不会抛出这样的FileNotFoundException,因为Java不能理解您的命令的预期输出。

编辑,在您的评论之后:

它是从这一点抛出的,returnCode的值是1。而且,当我手动更改根用户的文件权限时,一切都正常工作。

这是不可能的。如果您的应用程序在这两行中的任何一行抛出异常,它将退出正常的控制流:您将根本无法读取returnCode

其次,您应该使用String[]中的每个参数来运行exec命令,而不是将所有参数都放在一行中,这应该可以防止出现引用问题,例如,如果文件名包含空格。

我还建议在命令中使用绝对路径,以确保您在预期的目录中工作。(*编辑:*现在您正在使用绝对路径,请确保您的用户在/tmp/tiff_dir上具有rwx权限。)

为了更直接地回答您的问题,您当然可以使用Runtime.exec(new String[] {"/usr/bin/sudo", ... the rest of your command ... }运行sudo,但出于安全原因,这不是一个好主意。您还需要更改sudoers文件以允许它不需要密码,或者找到一种方法来传递密码,无论是on the command line (肯定是一个安全风险!)或者以某种方式手动将其传递给输入流。)

票数 1
EN

Stack Overflow用户

发布于 2014-02-13 17:29:33

试试这个:

代码语言:javascript
复制
File file = new File("/opt/image.tiff");
Runtime runtime = Runtime.getRuntime();
runtime.exec(new String[] { "/bin/chmod", "777",file.getPath()});

这将对该文件执行完全权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21749862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档