В рамках процесса регистрации на нашем сайте директивы VirtualHost создаются и добавляются в файл конфигурации через PHP, после создания каждого VirtualHost apache корректно перезапускается, чтобы новый сайт начал работать. Пользователь PHP, работающий под (www), получил разрешение на перезапуск apache в / etc / sudoer, а затем скрипт php с именем exec ('/ usr / local / bin / sudo / usr / local / sbin / apachectl graceful');
Это прекрасно работает. Однако мы находимся в процессе перехода на новый сервер, и я не могу заставить его работать в новой настройке.
Я добавил следующую строку в / etc / sudoers
apache ALL= NOPASSWD: /usr/sbin/apachectl graceful
а затем наш PHP-скрипт вызывает:
exec('/usr/bin/sudo /usr/sbin/apachectl graceful');
Если я включу доступ к оболочке для пользователя apache и входа в систему, я могу отлично запустить sudo / usr / sbin / apachectl graceful, просто когда мы вызываем его из PHP, он не работает.
Есть ли у кого-нибудь идеи? Спасибо.
На нашем старом сервере FreeBSD мы использовали Apache 1.3.x и PHP 4.4.
Наш новый сервер - CentOS 5.4 с Apache 2.2.x и PHP 5.3.2.
В файле sudoers (используйте visudo) под существующей строкой значений по умолчанию добавьте:
defaults:www !requiretty
На самом деле, вы уверены, что он работает от имени пользователя www? По умолчанию для CentOS используется "apache". Небольшой сценарий, который стоит попробовать:
<?php print system("whoami");?>
Если это не «www», просто замените бит «www» в sudoers выше.
Можете попробовать с shell_exec?