在大多数UNIX系统中,您可以检索其他用户' PATH环境变量使用" su - [username] -c 'echo $PATH'
"。
是否可以在Java中执行此操作?
我知道System.getenv("PATH")
只能提供系统环境信息而不是单个用户。是否有一种简单的方法来获取此信息而不是使用ProcessBuilder
?
答案 0 :(得分:0)
只能使用ProcessBuilder
等来实现。 Java通常不支持无法(相对)移植的事情。
此处执行的实际任务需要权限提升。 “su”命令需要“root”权限才能更改为其他用户的身份。执行此操作的任何其他方式还需要“root”权限...因为您正在执行的是读取不同用户拥有的文件。将Java应用程序作为“root”运行是一种危险的 1 。
简而言之:如果你想通过ProcessBuilder运行“su - -c echo $ PATH”,那么JVM需要以“root”权限运行。危险!
注意:确保你找到另一个人的路径的机制不会变成一个巨大的安全漏洞。
解决此问题的一种方法是编写一些安全应用程序(不是用Java!)来执行一些非常具体的安全敏感任务。审核他们。然后使用chown
和chmod
将它们设为“setuid root”。限制对特定组的执行权限,并在该组中运行Java应用程序。
但更好的想法是避免首先从Java中做这种事情。
1 - 实际风险取决于各种事物。 Java应用程序是否暴露在机器外部?你能限制对机器的访问吗?机器上是否有敏感信息或服务?是否始终运行Java的最新版本/发行版?您能信任Java应用程序使用的所有框架,库等吗?他们被审核了吗?