我正在尝试通过java代码切换unix超级用户。但出现身份验证失败错误,请帮助使用java切换用户。
答案1
你根本做不到。在 unix 中的进程中切换用户的唯一方法是通过setuid(2)
系统调用,对于非特权用户帐户来说,只有在真实用户 ID 和保存的用户 ID 之间切换用户 ID 才有效(这种情况仅在 suid 可执行文件的情况下发生Thread
)在允许这种情况的体系结构中作为进程线程运行,但不能作为不同的进程运行,因此所有 JVM 都作为单个进程正常运行。
所有这些概念对于 Java 来说都是陌生的,因为 JVM 代表启动应用程序的用户运行(您可以使 java setuid root,但这是一个非常危险的安全风险,因为 JVM 无法检查该应用程序的有效性) uid 更改,在这种情况下,所有能够执行 java 代码的用户都应该能够切换到他们想要的任何用户)因此,话虽这么说,在 un*x 系统中不允许更改 java 进程的用户。
我不知道是否存在Runtime.setuid()
调用,但由于唯一的实用程序是由 root 启动的 JVM,他是唯一可以在不验证用户的情况下切换用户的用户,我认为没有实现,你将不得不处理一些JNI编程就实现了这么一个东西。