죄송합니다. sudo를 실행하려면 tty가 있어야합니다


13

이미 Stack Overflow 에서이 질문을 했지만 여기에 게시하라는 요청을 받았습니다. 똑같이.

내 Java 프로그램을 사용 하여이 명령을 실행했습니다.

sudo -u <username> -S pwd

나는이 출력을 얻었다

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo

/ etc / sudoers 편집을 시도했지만 이미 포함되어 있습니다.

<username>       ALL=(ALL)       NOPASSWD: ALL

그런 다음 / etc / sudoers에서 다음 코드를 주석 처리하여이 작업을 수행 할 수 있음을 알게되었습니다.

# Defaults requiretty

또한 기본적으로을 사용하여 다른 사용자로 명령을 실행하려고 할 때 sudo자체 비밀번호를 제공해야합니다. 그러나 이것은 / etc / sudoers-에서 다음과 같이 변경하여 변경할 수 있습니다.

Defaults targetpw

내 질문은, 어디서든지 기본 설정을 변경하지 않고 Java에서 위의 명령을 실행할 수 있습니까?


1
이것이 왜 sudo에 대한 오히려 고안된 대안을 요구하고 있습니까?
slhck

6
requiretty기본적으로 사용하도록 설정되어 있으면 배포판 고유의 것으로 보입니다 . sudo자체 문서 에 따르면 "기본적으로 꺼져 있습니다".
mpy

답변:


3

Java에서 쉘 명령을 실행하는 방법을 모르지만 ssh 명령의 -t 옵션을 살펴보십시오.

-t force pseudo-tty allocation.

그것이 ssh를 통해 루트로 명령을 실행해야 할 때 수행하는 작업입니다 (직접 루트 로그인 비활성화 및 tty가 sudo에 필요)


1
이 접근법은 첫눈에 문제를 해결할 수 있지만 문제와 어떻게 관련이 있는지는 분명하지 않습니다. 더 자세히 설명해 주시겠습니까?
pabouk

1
기본 설정을 변경할 필요없이 문제를 해결하기 위해 +1
Luke

1

내 질문은, 어디서나 기본 설정을 변경하지 않고 Java에서 위의 명령을 실행할 수 있습니까?

sudo -u -S 암호

짧은 대답은 아니오입니다. sudo가 현재와 다르게 작동하도록 설정을 변경해야합니다.

sudo는 이것에 대한 잘못된 도구 일 수 있습니다. Sudo의 규칙은 시스템 관리자가 추가 / 의도하지 않은 권한을 얻기 위해 남용하기 어려운 권한을 얻는 방법을 구성하는 데 도움이됩니다.

sudo가 무엇을하는지 고려한다면 :

  1. 신원 확인을 위해 비밀번호를 묻습니다.
  2. 특권을 높이다
  3. 그런 다음 선택적으로 다른 사용자로서 권한을 얻습니다.
  4. sudo를 사용하여 액세스 권한을 얻거나 명령을 실행합니다.

Java가 해당 사용자 또는 자신의 암호를 제공하지 않고 임의의 사용자로 임의의 명령을 실행하려면 본질적으로 sudo를 대체해야합니다. 이 경우 남용을 방지하는 방법에 대한 고유 한 규칙을 만들어야합니다.

기본적으로 두 가지 방법이 있습니다.

  1. 높은 권한으로 Java를 실행하고 필요한 권한을 신중하게 가져 와서 돌려주십시오 (setuid () seteuid () C 함수 호출 참조).
  2. 높은 수준의 권한을 원할 때 외부 프로그램을 실행

# 1의 경우 Java 프로그램이 sudo가 수행하는 작업을 자체 수행하므로 악용으로부터 보호하기 위해 자체 규칙 세트를 구현해야합니다.

# 2를하기 위해 sudo 이외의 프로그램이 있습니다. 한 가지 예는 https://code.google.com/archive/p/exec-wrapper/downloads 에서 찾을 수 있습니다.

이 편리한 쉘 스크립트는 다른 명령 (보통 스크립트)을 실행하는 C 프로그램을 만듭니다. 그런 다음 C 프로그램을 바이너리로 컴파일하고 setuid 루트를 표시하거나 실제로 모든 사용자에게 setuid를 표시 할 수 있습니다. (모드 : 4555 및 소유자 : 루트)

파일 시스템을 허용하는 한 이진 프로그램을 실행하면 이진 프로그램 자체를 소유 한 사용자 ID로 구성된 명령이 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.