Java 코드를 사용하여 Unix 수퍼유저를 전환하는 방법은 무엇입니까? [폐쇄]

Java 코드를 사용하여 Unix 수퍼유저를 전환하는 방법은 무엇입니까? [폐쇄]

Java 코드를 통해 Unix 수퍼유저를 전환하려고 합니다. 그런데 인증 실패 오류가 발생했습니다. java를 사용하여 사용자를 전환할 수 있도록 도와주세요.

답변1

당신은 그것을 할 수 없습니다. 유닉스에서 프로세스 내 사용자를 전환하는 유일한 방법은 setuid(2)시스템 호출을 통하는 것입니다. 권한이 없는 사용자 계정의 경우 실제 사용자 ID와 저장된 사용자 ID 간에 사용자 ID를 전환하는 것만 가능합니다(이는 suid 실행 파일인 경우에만 가능합니다. file Thread)은 이를 허용하는 아키텍처에서 프로세스 스레드로 실행되지만 다른 프로세스로는 실행되지 않으므로 모든 JVM은 일반적으로 단일 프로세스로 실행됩니다.

이러한 모든 개념은 JVM이 애플리케이션을 시작한 사용자를 대신하여 실행되기 때문에 Java에는 이질적입니다(Java setuid 루트를 만들 수 있지만 JVM이 애플리케이션의 유효성을 확인할 수 없기 때문에 이는 매우 위험한 보안 위험입니다). 이 경우 Java 코드를 실행할 수 있는 모든 사용자는 원하는 사용자로 전환할 수 있어야 합니다. 즉, un*x 시스템에서는 Java 프로세스의 사용자를 변경하는 것이 허용되지 않습니다.

호출 이 있는지는 모르겠지만 Runtime.setuid()유일한 유틸리티는 사용자를 인증하지 않고 사용자를 전환할 수 있는 유일한 사람인 루트에 의해 시작된 JVM이므로 구현하지 않으면 일부를 처리해야 할 것 같습니다. JNI 프로그래밍이 바로 이런 것이 실현되었습니다.

관련 정보