>  기사  >  Java  >  ProcessBuilder 제한에도 불구하고 Java에서 Sudo 권한으로 Bash 명령을 실행하는 방법은 무엇입니까?

ProcessBuilder 제한에도 불구하고 Java에서 Sudo 권한으로 Bash 명령을 실행하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-24 11:36:29763검색

How to Execute Bash Commands with Sudo Privileges in Java Despite ProcessBuilder Limitations?

Java에서 Sudo 권한으로 Bash 명령 실행

ProcessBuilder는 bash 명령을 실행하는 편리한 방법을 제공합니다. 그러나 슈퍼유저 권한이 필요한 명령을 실행하려고 하면 충분하지 않을 수 있습니다. 이 기사에서는 Java를 사용하여 bash 명령에 수퍼유저 비밀번호를 효과적으로 전달하는 방법을 살펴봅니다.

제공된 코드 조각에서는 sudo 권한을 사용하여 "gedit" 명령을 실행하는 것이 목적입니다. "gksudo"를 사용하는 접근 방식은 지원 중단으로 인해 실현 가능하지 않을 수 있지만 대체 솔루션이 제시됩니다.

제안 접근 방식 소개

참고: 이 접근 방식은 보안 문제로 인해 프로덕션 용도로 권장됩니다.

제안된 솔루션에는 Runtime.getRuntime().exec()를 사용하여 일련의 명령을 실행하는 것이 포함됩니다.

  1. bash 셸은 다음을 사용하여 호출됩니다. "-c" 옵션을 사용하여 후속 명령을 실행합니다.
  2. 원하는 명령(이 경우 "ls" 앞에는 파이프 "|"가 붙습니다.
  3. 파이프 내부에는 문자열 "password"는 "echo" 명령의 입력으로 전달됩니다.
  4. "echo" 명령의 출력은 제공된 암호를 사용하여 "ls"를 실행하는 "sudo -S" 명령으로 파이프됩니다. 높은 권한을 가진 명령입니다.

샘플 코드

<code class="java">public static void main(String[] args) throws IOException {

    String[] cmd = {"/bin/bash","-c","echo password| sudo -S ls"};
    Process pb = Runtime.getRuntime().exec(cmd);

    String line;
    BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
    while ((line = input.readLine()) != null) {
        System.out.println(line);
    }
    input.close();
}</code>

사용 및 주의 사항

이 접근 방식에서는 다음을 가정합니다. 제공된 "비밀번호"는 올바른 sudo 비밀번호입니다. 잠재적인 보안 위험으로 인해 이 기술을 사용할 때는 주의를 기울여야 합니다. 비밀번호를 일반 텍스트로 저장하지 말고 민감한 작업을 위한 대체 솔루션을 고려하세요.

위 내용은 ProcessBuilder 제한에도 불구하고 Java에서 Sudo 권한으로 Bash 명령을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.