2014-10-21 4 views
2

POST 요청으로 쉘 스크립트를 시작하려고합니다 (nginx에서 처리). 지금까지 성공하지 못했습니다.Nginx에서 PHP를 사용하여 다른 사용자로 쉘 스크립트를 실행하는 방법은 무엇입니까?

내가 무엇을 가지고 : 우리가 볼 수 있듯이

exec('whoami'); // nginx 

nginx:x:220:498:Nginx web server:/var/lib/nginx:/sbin/nologin 

는 nginx를 사용자가 어떤 쉘이 없습니다. 그게 문제가 될 수 있습니까? 내 실제 사용자에 nginx을 변경하는 경우 다음

nginx ALL=(user) NOPASSWD: /path/to/script.sh 

, 내가 암호 프롬프트없이 sudo -u user /path/to/script.sh를 실행할 수 있습니다,하지만 난 su -s /bin/bash -c /path/to/script.sh user을 실행하면 어떤 이유로 난 여전히 암호를 묻는거야. 아마도 후자의 인보 케이션은 nologin 쉘을 가지고 있기 때문에 nginx 사용자에게 다소 적합 할 것입니다.

그래서 exec('sudo -u user /path/to/script.sh');을 실행할 때마다 또는 PHP를 통해 해당 행이있는 래퍼 스크립트를 실행할 때마다 아무 일도 일어나지 않습니다. 오류가 발생하지 않으므로 작동하지 않는 것을 식별 할 수 없습니다.

도움을 주시면 감사하겠습니다.

+1

오류 출력을 다시 얻으려면 명령 끝에 '2> & 1'을 추가하십시오. 또한'/ bin/bash'를 실행하고 싶다면,'sudoers' 파일의 엔트리가 필요합니다. 대안으로'nginx'가 간단하게 실행할 수있는 래퍼 스크립트를 만들고 싶다면'sudo'를 처리 할 수 ​​있습니다. – fejese

+1

'sudoers'에'nginx'를 추가하면 su가 아니라'sudo' 권한 만 부여됩니다. '. 이 둘은 비슷한 목적을 수행하지만 그럼에도 불구하고 분리되어 있다는 점에서 관련이 있습니다. 역사적으로,'sudo'는 추가적인 유용성 기능과 접근 제어 메커니즘을 가진'su'의 래퍼입니다. – tripleee

+0

"오류가 발생하지 않았습니다."라는 오류가 있습니다. 시스템 로그에 오류 메시지가 있어야합니다. 전통적으로,'sudo' 오류는'LSB 시스템에서'/ var/log'에있는'auth.log'에 기록됩니다. (이제 읽기 액세스 권한을 갖기를 바랍니다 :-) – tripleee

답변

1

@fejese와 @triplee 덕분에, 나는 그것을 마침내 발견했습니다. 나는 모든 것 갔다 ... 그이 변경되었을 때의 sudoers 파일에 requiretty 매개 변수에

#Defaults requiretty 
#Defaults !visiblepw 

을했다!

+1

자신의 답변을 수락하는 것을 잊지 마십시오! :) 이제 당신의 질문이 내 질문에 답하는 것이 재미 있다는 것을 말해야합니다! 하하 – Tek

관련 문제