JavaコードでUnixスーパーユーザーを切り替えようとしています。ところで、認証失敗エラーが発生しました。 javaを使用してユーザーを切り替えるのに役立ちます。
ベストアンサー1
できません。 Unixでプロセス内のユーザーを切り替える唯一の方法は、setuid(2)
システムコールを介することです。権限のないユーザーアカウントの場合は、実際のユーザーIDと保存されたユーザーIDの間でユーザーIDを切り替えることができます(これはsuid実行可能ファイルの場合にのみ可能です。file Thread
)は、それを許可するアーキテクチャからプロセススレッドとして実行されますが、別のプロセスは実行されないため、すべてのJVMは通常単一のプロセスで実行されます。
これらの概念はすべて、JVMがアプリケーションを起動したユーザーに代わって実行されるため、Javaには不均一です(Java setuidルートを作成できますが、JVMがアプリケーションを検証できないため、これは非常に危険なセキュリティリスクです)。この場合、Javaコードを実行できるすべてのユーザーは必要なユーザーに切り替えることができなければなりません。つまり、un*x システムでは、Java プロセスのユーザーを変更することはできません。
呼び出しがあるかどうかはわかりませんが、Runtime.setuid()
唯一のユーティリティは、ユーザーを認証せずにユーザーを切り替えることができる唯一の人であるルートによって開始されたJVMなので、実装しないと一部を処理する必要があるようです。 JNIプログラミングがまさにこのようなことが実現しました。