2012-03-31 5 views
3

나는 아치 리눅스를 사용하고 있습니다. 나는 시스템의 IP를 변경하는 PHP 파일을 실행하고 싶다. 내가 그랬어아치 리눅스에서 루트 사용자로 명령을 실행

ifconfig eth0 192.168.163.137 

터미널에 잘 작동합니다. 같은 시도는 PHP 파일에

shell_exec('ifconfig eth0 192.168.163.137'); 

와 함께 시도하고 라우터를 통해 연결된 다른 PC에서 원격으로 웹 브라우저에서 페이지를 열려고 시도. 페이지에 아무것도 표시되지 않고 코드도 실행되지 않습니다. 내가 it.apache를 실행하는 사용자와 문제가 그것을 실행하는 것 같아요. 그래서 나는 그것이 root에 의해 실행되기를 원합니다. 누구든지 제 코드 실행에 대해 안내해 줄 수 있습니다. 난 sudo를 설치하고 단지

shell_exec('sudo ifconfig......'); 

너무 나던 실행 ... 도와주세요 ... thanku을 넣어 .. :)

+0

디버깅하는 좋은 방법은 함수의 반환 값을 표시하는 것입니다. 항상 도움이됩니다. 이 함수 자체는 출력 버퍼에 쓰지 않습니다. – animuson

+0

doin that try ... 그게 아무것도 반환하지 않습니다. shell_exec ('ifconfig')를 사용하여 설정 한 경우에만; 그리고 반환 값이 에코 된 다음 웹 페이지에 완전한 텍스트를 얻고 있습니다. 텍스트는 터미널에 표시되는 텍스트입니다. –

+0

루트로 실행하는 방법 .. –

답변

3

일반적으로 Sudo는 대화 형 셸을 사용하여 암호를 입력해야합니다. 그것은 분명히 PHP 스크립트에서 일어나지 않을 것입니다. 자신이하는 일을 잘 알고 있고 보안 문제가있는 경우 Apache 사용자가 암호없이 sudo를 실행할 수 있도록 허용하고 특정 명령에 대해서만 시도하십시오.

예를 들어, sudoers 파일에 다음 행을 추가하면 Apache가 암호없이 sudo 명령을 실행할 수 있습니다 (ifconfig 명령에만 해당).

apache ALL=NOPASSWD: /sbin/ifconfig 

필요에 맞게 경로를 조정하고 인수를 추가하십시오.

주의 : 여전히 PHP가 쉘 명령을 호출하는 방법에 의한 합병증이있을 수 있습니다

  • .
  • 웹 서버에서 루트 권한으로 명령을 실행하는 것은 매우 위험한 일임을 기억하십시오!

아마 더 나은 대안 :

  • 는 상관없이 그것을 호출하는 사람들 루트로 실행되지 확인하기 위해 SUID 비트 쉘 스크립트를 작성합니다.
+3

이 부분으로 확장되었습니다. bash 스크립트를 매분마다 cron 작업으로 실행하십시오. 따라서 IP를 변경하려면 웹 서버가 텍스트 파일을 변경하거나 데이터베이스에 설치하십시오. bash 스크립트는이를 점검하고 ifconfig 명령을 수행합니다. 따라서 웹 서버에는 루트 액세스 권한이 없습니다. – David

+2

setuid는 쉘 스크립트에서 작동하지 않습니다. 데이빗의 해결책은 sudo보다 낫다. – strkol

+0

@strkol Dang, 잊어 버렸습니다. 감사. – kijin

0

명령을 대기열에 기록하고 cron을 선택하여 유효성을 검사 (알려진 양호한 요청 만 허용) 한 다음 실행하고 해당 대기열을 날짜와 결과로 완료 표시합니다.

최종 사용자는 아약스를 사용하여 업데이트를 클릭하거나 대기 할 수 있습니다.

관련 문제