![Javaコードを使用してUnixスーパーユーザーを切り替えるには? [閉鎖]](https://linux33.com/image/92540/Java%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6Unix%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
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プログラミングがまさにこのようなことが実現しました。