mod_perl을 통해 웹 브라우저에서 실행되는 다른 스크립트에서 분기된 Perl 스크립트가 있습니다. sudo service X stop
백업 복구 프로세스의 일부로 분기된 스크립트(결국 아파치로 실행됨)가 필요합니다 . X 서비스는 복구에 의존합니다. Windows에서는 잘 작동했지만 이제 CentOS로 이식하면 제목에 오류가 표시됩니다.
설정:
- sudoers 파일이 주석 처리되었습니다.
# Defaults requiretty
- sudoers 파일에는
apache_usr localhost=(root) NOPASSWD: /sbin/service X stop
(visudo -c
검사를 통해) 다른apache_usr
줄이 없습니다.
내가 시도한 것들:
sudo /sbin/service
sudo service
포크된 프로세스 뿐만 아니라- 주석이 있거나 없는 sudoers 파일
Defaults !visiblepw
- 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
이 변경이 왜 필요한지 정말 궁금합니다.