문제

웹 서버에서 백그라운드에서 실행하려면 응용 프로그램이 필요하지만 루트 권한으로 응용 프로그램을 시작/중지 할 수 있어야합니다.

이를 위해서는 루트 권한이있는 서비스를 실행하고 싶어서 응용 프로그램을 죽이고 필요한 경우 다시 시작할 수 있습니다.

마지막으로, 웹을 통해 간접적으로 제어 할 수 있도록 Apache/PHP를 통해 시작 및 킬 명령을 서비스로 보낼 수 있어야합니다.

Linux 서비스를 어떻게 만들려면?
이런 식으로 Linux 서비스와 어떻게 통신합니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

PHP 스크립트에서 exec 명령을 사용하여 쉘 파일을 호출하십시오. "SetUser"비트로 쉘 파일을 설정할 수 있으므로 웹 서버의 권한을 사용하여 실행하는 대신 소유자로 실행됩니다.

물론 테스트, 모니터링 등의 조명은 매우 조심해야합니다.

마지막으로, 서비스를 루트가 아닌 전용 사용자로 생각하십시오. 예 : Apache와 같은 대부분의 다른 서비스는 그렇습니다.

추가 : Re : Linux에서 서비스 실행. 리눅스의 맛에 따라 다릅니다. 앱 서비스가 실패하면 자동으로 다시 시작되는지 확인하고 로깅, Checkout Runit :

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/opensource/?p=202

http://smarden.org/runit

추가 : setuid 비트 대신 Sudo 시스템을 사용하는 Frank의 제안이 더 좋습니다.

다른 팁

그래서 여기에는 세 가지 조각이 있습니다.

  • 루트 권한이없는 웹 서버
  • 지원서
  • 응용 프로그램을 모니터링하는 데몬

당신의 문제는 데몬을 시작하는 것이 아니라, 루트 권한이 필요하지 않고 그것을 작성하고 웹 서버에서 통신하는 것입니다.

데몬은 백그라운드에서 시작된 비 대화식 응용 프로그램만큼 간단 할 수 있습니다.

# my_dameon &

나는 PHP Developper가 아니지만 메시지 대기열과 PHP를 찾고 있습니다. Beanstalkd
첫 페이지의 예를 살펴보면 다음을 수행하는 데 사용할 수 있습니다.

  • Apache/PHP는 Beanstalkd에 메시지를 보냅니다
  • 당신의 데몬은 beanstalkd에서 메시지를 읽습니다. 명령에 따라 배경 응용 프로그램을 시작하거나 킬 또는 다시로드합니다.

PHP에 데몬을 쓸 수 있습니다. 많은 언어로 된 고객
당신은 또한 확인할 수 있습니다 이 질문

다음 명령을 수락하는 데몬을 만들 수 있습니다.

  • daemon_name start
  • daemon_name stop
  • daemon_name restart
  • deamon_name reload

데몬을 시작하는 것은 어렵지 않아야합니다. 그냥 실행 daemon_name start PHP 스크립트에서 실행해야합니다. 시작 후 프로세스의 PID를 잠금 파일에 쓸 수 있습니다 (나중에 중지, 다시 시작 또는 재 장전). 데몬은 신호를 처리해야합니다.

PHP 스크립트에서는 호출 할 수 있습니다 daemon_name stop. 이것은 잠금 파일을 확인하고 달리는 데몬의 PID를 가져 와서 달리기 데몬이 처리 할 신호를 보내는 새 데몬을 발사해야합니다. 잠금 파일을 제거/지우고 stop 데몬/프로세스를 시작하면 종료 될 수 있습니다.

나는 당신이 봐야한다고 생각합니다 inetd, 모든 종류의 서비스를 실행하도록 구성 할 수 있으며 루트로 실행됩니다. 그런 다음 루트 특권이 아닌 비교적 간단한 프로그램을 작성할 수 있지만 루트가 실행할 때 필요한 작업을 수행 할 수 있습니다.

서비스와 의사 소통하는 한 서비스 유형의 서비스 유형은 말하지 않았지만 가장 일반적인 방법은 Unix 소켓이나 MMAP를 통해 컴포지션하는 것입니다. 당신의 필요에 따라 달라집니다.

예, Linux 시스템의 웹 관리를위한 응용 프로그램이 이미 있음을 지적해야합니다. 웹 민 필요한만큼 제어 할 수 있도록 구성 할 수있는 정말 좋은 것입니다.

@shodanex가 제안한 바와 같이, Beanstalkd를 사용하는 것은 Running-as-As-root 명령 라인 작업자와 웹 프론트 엔드를 분리하는 훌륭한 방법이 될 것입니다. 필요한 것을 정확하게 실행하도록 사소하게 설정 될 수 있습니다.

노동자를 운영하려면 배의 시스템 _daemon 시작/정지/재시작으로 데몬 실행 스크립트를 생성하고 실행할 수 있습니다.

이것을 할 때 매우 조심하십시오. exec 명령에서 웹에서 제출 된 데이터를 사용하지 마십시오. 이를 통해 누군가가 컴퓨터에서 임의로 명령을 실행할 수 있습니다.

또한 두 번째 Frank는 Sudo 규칙을 사용하므로 필요한 권한으로 해당 명령을 실행할 수 있습니다. 그런 식으로 더 안전 할 것입니다.

물론

sudo apt-get install openbsd-inetd

원하는 서비스를 만들 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top