Centos – Problems restarting apache via PHP (even with sudo)

apache-2.2centosPHPsudo

As part of the signup process on our site, VirtualHost directives get created an added to a config file via PHP, after each VirtualHost is created apache is restarted gracefully so that the new site starts working. The user PHP which runs under (www) was given permission to restart apache in /etc/sudoer and then a php script called exec('/usr/local/bin/sudo /usr/local/sbin/apachectl graceful');

This works perfectly. However we're in the process of moving to a new server and I cant get this working at all on the new setup

Ive added the following line to /etc/sudoers

apache ALL= NOPASSWD: /usr/sbin/apachectl graceful

and then our PHP script calls:

exec('/usr/bin/sudo /usr/sbin/apachectl graceful');

If I enable shell access for the apache user and login I can run 'sudo /usr/sbin/apachectl graceful' perfectly fine, its just when we call it from PHP it doesnt work.

Has anybody got any ideas? Thanks.

On our old FreeBSD server we were running Apache 1.3.x and PHP 4.4

Our new server is CentOS 5.4 w/ Apache 2.2.x and PHP 5.3.2

Best Answer

In the sudoers file (use visudo), below the extant defaults line, add:

defaults:www !requiretty

Actually, are you sure it's running as the "www" user? The default for CentOS is "apache". A little script to try:

<?php print system("whoami");?>

If it's not "www", just replace the "www" bit in sudoers, above.

Related Topic