【发布时间】:2012-02-16 19:52:53
【问题描述】:
我有一个 Java 可执行文件,它接受命令行参数以在我的 Linux 机器上启动受根保护的应用程序。我们有单独的用户帐户,它们被授予 sudo 访问权限来启动单个 Java 可执行文件,然后用户可以使用它来启动受 root 保护的应用程序。我对 sudo 的理解是,用户在单次调用和之后的任何后续调用(即 Java exec 对应用程序的调用)期间担任根“角色”。它适用于我的大多数应用程序,但仅部分适用于其他应用程序。特别是有时启动的外部应用程序无法正常运行,并且似乎会输出无法打开文件的错误(所有人都可以读取)。如果我以 root 身份运行可执行文件,则可执行文件和后续应用程序都运行良好,所以我知道它与 sudo 有一些关系。
如有必要,我可以提供更多详细信息,但看看是否有人知道 sudo 是否会更改我不知道的环境或运行时问题。
更新:
配置文件位于可读目录中。为了确保测试,我制作了 Java exec 尝试启动的二进制文件,所有人都可以读取。然后,我从我的测试人员帐户启动 Java exec(不带 sudo),应用程序运行良好。然后我只保护二进制文件根目录,并使用 sudo 运行 Java exec,应用程序启动失败并给我一个错误,例如:
“记录器:无法打开 edtrecorder.cfg”
该文件及其所在的目录都可供所有人读取。
【问题讨论】:
-
您的 Java 程序试图读取的文件是否在可访问目录中?
-
你能提供更多细节吗?哪些命令有效,哪些无效?具体给出了哪些错误?正在进行哪些 sudo 调用?