【发布时间】:2016-02-25 21:07:00
【问题描述】:
如果我以 sudo 用户身份运行 java 类文件,则有效用户 ID 将更改为 sudo 用户。我可以使用System.getProperty("user.name") 获得有效的用户标识。但是,有什么方法可以从 java 程序中获取真正的用户 ID?变量 $SUDO_USER 在 shell 中不是一个可靠的变量。
【问题讨论】:
-
不,你不能;这将需要访问 Java 无法访问的操作系统级原语,即使这样,它也会询问 API 在 Java 可以运行的其他操作系统上的兼容性问题(例如,Windows 没有这样的概念) .
-
@fge:有各种操作系统级原语的 Java API;我不能直接说,肯定没有提供这个的,你可以吗?另外:Windows 具有模拟功能,这将呈现与上述类似的场景,因此可能包含在任何此类抽象 API 中。
-
@T.J.Crowder 我从来没有说过理论上不可能;只是现在没有。我的评论仍然成立。 Windows 的模拟与 getuid() 与 geteuid() 不同。
-
如果有linux命令,那么可以使用Runtime.getRuntime().exec(),然后通过从命令中获取inputstream来解析输出。
-
@SourabhBhat:非常正确和好点,如果您可以合理地假设该命令没有以某种方式被破坏。