문제

UNIX 명령을 다른 UNIX 사용자로 실행할 수있는 Java 프로그램을 작성하려고합니다. 사용자의 비밀번호가 있고 실행하려는 명령을 알고 있지만 명령은 해당 사용자로 실행해야하므로 먼저 사용자로 로그인해야합니다.

예를 들어 : 우리는 Bob의 홈 디렉토리에 무엇이 있는지보고 싶어하는 사용자 인 Jim이 있다고 말하며 (어떤 이유로 든 Jim은 LS를 실행할 수있는 반면 Bob은 그렇지 않습니다. 우리는 현재 Bob로 로그인되었습니다. 우리가 할 수있는 일은 다음과 같습니다.

bob@host$ su jim && ls ~bob

문제는 Jim의 비밀번호를 촉진한다는 것입니다. 이것은 Java 프로그램에서 실행되므로, 즉

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

우리는 Jim의 비밀번호를 자극하고 끊었습니다. 우리는 Jim의 암호를 알고 있습니다. 그러나 나는 그것을 입력 할 수 없습니다.

또한, 우리는 기대 스크립트를 사용할 수 없으며 (설치하지 않음) 슈퍼업자가 될 수 없습니다. 또한 기술적으로 할 수 있기 때문에 SSH를 사용하여 이것을 시도했습니다.

bob@host$ ssh jim@host "ls ~bob"

그러나 암호가없는 SSH를 설정할 권한이 없기 때문에 이것은 작동하지 않습니다.

마지막 도랑 노력은 Java 프로그램에 비밀번호를 사용할 수 있으므로 Java 용 SSH 라이브러리를 사용하는 것입니다. 이에 따라 로그인하고 적절한 명령을 실행할 수 있기 때문입니다. 그러나 나는 같은 호스트에서 실행할 예정이므로 과잉처럼 보입니다.

제안이 있습니까?

추신 : Java 버전 1.4.2, 업그레이드 할 수 없습니다. AIX UNIX 5.3.

도움이 되었습니까?

해결책 2

문제 해결됨. 중고 JSCH (http://www.jcraft.com/jsch/) 알려진 사용자 이름과 비밀번호로 서버에 ssh로, 명령을 실행하십시오. 귀하의 제안에 감사드립니다!

다른 팁

Sudo를 설치하고, Java 프로그램을 실행하는 사용자가 문제의 명령에 대해 /etc /sudoers에 입력하고 사용하도록하십시오. sudo -u jim ls ~bob.

아마도 기대의 Java 구현일까요? 예상 인터넷 검색 할 때 나오지만 1.4.2 미만의 실행에 관한 문서를 찾을 수 없었습니다.

Sudo 명령 입력을 리디렉션하고 작성해 보았습니까? 나는 한동안 Java를 사용하지 않았지만 입력 스트림을 얻고 글을 쓸 수있는 방법이 있다고 생각합니다. 이를 사용하여 비밀번호를 작성한 다음 새 라인을 작성하고 Sudo 또는 SU가 암호를 수락해야합니다.

getInputStream ()을 사용하고 비밀번호를 작성하십시오.

su jim -c ls ~Bob

아마도 이것은 효과가있을 것입니다 :

Process process = Runtime.getRuntime().exec("su jim && ls ~bob");

OutputStream standardInput = process.getOutputStream();
Writer standardInputWriter = new OutputStreamWriter(standardInput);
standardInputWriter.write("password\n");
standardInputWriter.close();

이 코드는 확실하지 않습니다.

Process p = Runtime.getRuntime().exec("su jim && ls ~bob");

&&, 즉 쉘 명령 (/bin/sh)을 평가하는 데 필요한 쉘에서 실행됩니다. SU의 명령 줄을 통해 "ls ~ bob"명령을 전달해야합니다. 같은 것 :

su jim -c 'ls ~bob'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top