2011-10-31 3 views
0

브라우저에서 타임 스탬프 값을 가져 와서 시스템 시계를 설정하려고하는 PHP 스크립트를 사용하고 있습니다. 내 맥 미니에 mamp 상자를 사용하고 있습니다. 어떻게 PHP 스크립트를 통해 맥 미니 시스템 시계를 설정합니까.PHP에서 exec를 사용하여 시스템 시계 설정

이것을 달성하기 위해 shell_exec, exec, system을 사용해 보았지만 작동하지 않았습니다.

예, 내 PHP 스크립트는

<? 

$timestamp = $_GET['timestamp']; 

exec('date '.$timestamp); 

?> 

가 나는 시계가 변경 참조 터미널에 동일한 날짜 set 명령을하려고 할 때, 다음과 같이 보입니다. (sudo date timestamp),하지만 난 권한이 명령을 실행하는 PHP 스크립트를 통해 그것을 달성하는 방법을 모르겠다. 친절하게 도와주세요.

감사합니다. Srini.

+0

또한 php date/time을 사용하여 시간을 설정했지만 오류 메시지가 나타나지는 않지만 시스템 클럭에는 차이가 없습니다. 친절하게 도와주세요 – srini

답변

1

시스템 시간 변경은 일반적으로 루트 수준 계정으로 제한됩니다. PHP는 루트 사용자가 아닌 웹 서버의 사용자 ID로 실행됩니다. 이 목적으로 웹 서버를 높은 권한으로 실행하려면 sudo을 사용해야합니다.

그러나 왜 이렇게 타임 스탬프를 설정해야합니까? 당신은 기본적으로 url에 전달 된 무작위 데이터를 쉘 명령으로 전달합니다. 제출하는 사람을 막을 수있는 이유

http://example.com?timestamp=; rm -rf/

웹 서버가 액세스 할 수있는 모든 파일을 누킹하고 있습니까?

서버간에 시간을 동기화하려면 시계 동기화 용으로 설계된 ntp을 사용하십시오.

+0

프레임 워크를 테스트하고 있습니다. 이것은 단지 예일뿐입니다. 하지만 일반적으로 http에서 권한있는 명령을 실행하는 방법에 대해 알고 싶었습니다. – srini

0

우선 입력 내용을 살균하십시오. 이 경우, $ _GET [ 'timestamp']를 삭제하십시오. 형식이 date인지 확인하십시오. 그것이 escapeshellarg을 사용하고 있는지 확인하십시오.

exec('sudo date '.escapeshellarg($timestamp));을 사용할 수 있습니다. 하지만 아파치 사용자가 패스워드없이 sudo 할 수있는 권한이 있는지 확인하십시오. /etc/sudoers에 지정할 수 있으며 루트로만 날짜 명령을 실행할 수 있습니다. 그것은 더 안전합니다.

또 다른 옵션은 사용자 고유의 쉘 스크립트를 작성하고 스크립트 만 sudo 할 수 있도록 허용하는 것입니다.

+0

하는 방법 암호없이 date 명령을 실행할 수 있습니다. 좀 더 자세히 설명해 주시겠습니까 – srini

+0

/etc/sudoers를 사용하여 솔루션을 달성하는 방법을 자세히 설명해 주시겠습니까? 감사합니다 – srini

+0

당신의 아파치가 사용자 www-data로 실행되는 동안, https://help.ubuntu.com/community/Sudoers에서 더 읽을 수있는'www-data LOCAL = NOPASSWD :/usr/bin/date'를 사용할 수 있습니다. OBS : 내 sudoers에서 라인을 테스트하지 않았다. – gustavotkg