On Wed, 29 Aug 2007 13:23:30 +0100
John ORourke <[EMAIL PROTECTED]> wrote:
> Matthieu FEREYRE wrote:
> >
> > kill -USR1 apache_pid
> >
> > do that extremly well but apache doesn't have the rights to launch
> > it from perl !
> >
>
> Try writing a script which does it - eg.
>
> #!/bin/sh
> /etc/init.d/apache restart
>
> put that somewhere and make it setuid root, then in your perl code
> call
>
> system("/path/to/your/script &");
>
> which would launch it in the background and return control sensibly,
> I think.
>
> The 2 flaws are [1] you have no way to feed back success to the user
> - you could put a Refresh header in the returned page to jump to a
> status page - and [2] any script or user on your server would be able
> to restart it by running the setuid root script.
While that definitely will work, there is a better solution from
a security perspective. You write a small daemon that either
accepts simple messages via IP or a local socket, or just simply
looks for the existence of some file
'/home/httpd/restart-apache.now'.
When the daemon receives the message or spots the file on disk
it could handle the restart for you. Sure there is a bit of
a delay compared to issuing your own sigkill, but you don't have
as much exposure.
-------------------------------------------------------
Frank Wiles, Revolution Systems, LLC.
Personal : [EMAIL PROTECTED] http://www.wiles.org
Work : [EMAIL PROTECTED] http://www.revsys.com