2012-08-14 4 views
0

exec()를 통해 스크립트를 호출하는 PHP 코드를 실행 중입니다. 이 스크립트는 사용자가 지정되지 않은 svn commit 명령을 실행합니다. 이 스크립트 (whoami로 전화하여 확인)를 실행하는 사용자 (NICK)에 ~/.subversion/serversssl-client-cert-file 옵션이 지정되어있는 인증서가 ~/.subversion에 있습니다. 이 인증서 파일에는 사용자 이름이 첨부되어 있습니다 (인증서의 내용을 출력하여 볼 수 있음 like so).PHP에서 얻은 이상한 사람 exec()

이 스크립트가 NICK의 crontab에서 cron 작업을 통해 호출되면 커밋의 SVN 작성자는 앞서 언급 한 인증서의 작성자와 동일합니다. 그러나 PHP의 exec() 함수를 통해 동일한 스크립트가 호출되면 커밋 작성자는 다른 사용자가됩니다. 필자는이 다른 사용자가 왜 사용되고 있는지 파악할 수 없습니다. 커밋 명령에 --username 옵션을 지정하려고했는데 svn propset svn:author을 사용하지 않으려 고 시도했습니다. 누구나 이것이 왜 그런지 알 수 있습니까? PHP/Apache가 다른 인증서를 사용하고 있습니까? 무슨 일이 일어나고 있는지 또는이 행동을 바꾸는 방법에 대한 정보는 많은 도움이 될 것입니다.

답변

0

sudo로 exec에 명령을 접두어로 사용 했습니까?

exec('sudo -u nick ./path/to/script'); 
+0

그냥했는데 사용자가 여전히 cron 작업과 다릅니다. –

+0

내가 제대로 이해했는지 확인하기 위해 PHP cli를 통해 PHP 스크립트를 시작 했습니까? 아니면 Apache, Nginx 등을 통해 wget 또는 curl 요청을 만들어 스크립트를 실행 중입니까? – Travis

+0

crontab에 줄을 추가 할 수 있습니까? – Travis

0

일반적으로 Apache는 아무도 실행하지 않도록 구성됩니다. 브라우저에서 스크립트를 호출하는 경우. 그것은 사용자 apache가 구성 될 때 실행됩니다.

+0

Apache 사용자는 crontab을 소유 한 사람과 같습니다. : –

+0

PHP는 어떨까요? fastcgi로 실행하고 있습니까? 다른 사용자로 실행될 수 있습니다. – iWantSimpleLife

관련 문제