sudo: tty가 존재하지 않으며 Askpass 프로그램이 지정되지 않았습니다.

sudo: tty가 존재하지 않으며 Askpass 프로그램이 지정되지 않았습니다.

mod_perl을 통해 웹 브라우저에서 실행되는 다른 스크립트에서 분기된 Perl 스크립트가 있습니다. sudo service X stop백업 복구 프로세스의 일부로 분기된 스크립트(결국 아파치로 실행됨)가 필요합니다 . X 서비스는 복구에 의존합니다. Windows에서는 잘 작동했지만 이제 CentOS로 이식하면 제목에 오류가 표시됩니다.

설정:

  1. sudoers 파일이 주석 처리되었습니다.# Defaults requiretty
  2. sudoers 파일에는 apache_usr localhost=(root) NOPASSWD: /sbin/service X stop( visudo -c검사를 통해) 다른 apache_usr줄이 없습니다.

내가 시도한 것들:

  1. sudo /sbin/servicesudo service포크된 프로세스 뿐만 아니라
  2. 주석이 있거나 없는 sudoers 파일Defaults !visiblepw
  3. sudoers 파일에서 위의 NOPASSWD 줄을 (ALL)사용하세요 .(root)

또 무엇을 시도해 볼 수 있나요?

답변1

간단히 말해서 이것이 sudo가 설계된 방식입니다.이봐.

네트워크 연결/빠른 DNS 서버가 없을 때 지연을 피하기 위해 호스트 조회를 약간 다르게 수행합니다.

컴퓨터 이름이 "salt"인 경우 올바른 sudoers 줄은 다음과 같습니다.

apache_usr salt=(root) NOPASSWD: /sbin/service X stop

즉, localhost는 sudoer의 유효한 호스트 이름이 아닙니다.

답변2

"sudoers 파일이 주석 처리되었습니다"라고 언급하셨습니다 # Defaults requiretty.

requiretty귀하의 sudo 버전이 기본적으로 sudo를 활성화한 경우(내 버전은 그렇습니다) 아무런 영향을 미치지 않습니다. 관련 사용자에 대해 대상 기본 사양을 사용합니다.

Defaults:apache_usr !requiretty

답변3

내가 그것을 썼을 때 ALL=(root)효과가있었습니다. 스크립트가 중지하려는 서비스와 동일한 서버에서 실행 중인데도 마찬가지입니다. 기본 IP가 아닌 다른 IP에서 브라우저에 액세스했지만, 그럼에도 불구하고 ping -c 1 localhost얻은 결과를 실행해 보면 127.0.0.1이 변경이 왜 필요한지 정말 궁금합니다.

관련 정보