2010-02-21 6 views

답변

3

exec() 또는 system()을 사용할 수 있지만 apache을 실행하는 사용자에게 PHP가 실행되면 사용 권한이 문제가되는 것은 사실입니다.

빠른 해결 방법으로 사용자 아파치가 다시 시작할 수있는 권한을 부여 받았을 수 있습니다. 시스템에 따라이 설정은 상당히 어려울 수 있습니다.

또 다른 방법은 몇 분 (또는 초)마다 파일을 검사하고 PHP 프로그램에서 편집 한 Cron 작업 (루트에 속함)을 사용하는 것입니다. 이 파일은 Apache 만 편집 할 수 있도록 설정됩니다. 이것은 훨씬 더 쉽습니다.

희망이 도움이됩니다.

1

exec() 또는 system()과 같은 방법을 사용하여 시스템 명령을 실행하여 컴퓨터를 다시 시작할 수 있습니다.

0

일반적으로 컴퓨터를 다시 시작하려면 수퍼 유저 권한이 필요합니다. 그러나 웹 서버를 수퍼 유저로 실행하는 것은 나쁜 습관입니다. 일부 프로세스 간 통신을하는 것이 좋습니다. E. g. PHP 스크립트가 파일에 비밀 키를 쓰고 cron 작업이 파일을 읽고 컴퓨터를 다시 시작합니다.

그리고 웹을 통해 컴퓨터를 다시 시작하는 것이 좋습니다. 왜 그걸하고 싶니?

+1

Plesk과 같은 일부 서버 관리 도구에서 허용됩니다. – zneak

0

이 답변은 Linux 기반 서버와 관련이 있습니다.

위험 : PHP에서 system()을 사용하면 시스템에서 "sudo shutdown -r now"를 사용하여 다시 시작하고 "sudo shutdown -h now"를 사용하여 종료합니다.

에서의/etc /의 sudoers,

하나의 문제가 sudo는이 암호를 요청 할 수있다 아파치 사용자 종료를 실행할 수있는 권한을 추가합니다.

apache 사용자의 암호를 제거하거나 (sshd, telnetd, ftpd 등을 실행하지 마십시오)// etc/sudoers에 암호없는 구성이 있는지 확인하십시오. 200 번째 줄에 대한 "man sudoers"와 270 번째 줄에 대해서는 Tag_Spec에 사용자가 sudo 명령을 실행하기 위해 암호를 다시 인증 할 필요가 없다는 것을 지정하는 NOPASSWD를 포함 할 수 있다고합니다.

안전 : token/cron PHP 파일을 어딘가에 작성하십시오. cron이 루트로 실행하는 스크립트를 작성하십시오.이 파일이 존재하면 파일이 제거 된 후 종료 또는 다시 시작됩니다.

1

우리 시스템에서는 Paul이 말한 것을 수행합니다.

  1. 일부 명령 dir (예 :/data/command /)에 쓰는 스크립트가 있어야합니다. 이 스크립트를 강화해야합니다.
  2. 분당 명령 실행을 확인하는 cron을 실행하십시오. 다시 시작 명령이 있으면 해당 cron은 시스템에 다시 시작 명령을 실행합니다.
1

데비안/레니를 운영하는 CarPC 설정에 대한 필요성이있었습니다. 해당 서비스의 포트에 연결될 때마다 inetd를 실행하여/sbin/reboot을 구성했습니다.

나는 PHP 스크립트를 사용하여 localhost/port에 fsockopen()을 수행하고 즉시 재부팅을 수행합니다.

빠른 설정 (데비안 - 시스템에 대한 수정) : /etc/services에서

"reboot stream tcp nowait root /sbin/reboot" Restart inetd using /etc/init.d/openbsd-inetd restart

지금 로컬 호스트에 연결 한 줄을 추가 /etc/inetd.conf에서 선 "reboot 88/tcp" (또는 무엇이든 포트 당신이 원하는) 를 추가 : 88 시스템을 재부팅합니다.

시스템이 xinetd를 실행하는 경우 로컬 호스트의 연결 만 허용하도록 구성하여 보안을 약간 강화할 수 있습니다. 어쨌든 이것은 여전히 ​​해킹입니다.