Я вижу несколько подходов. Конечно, вы можете добавить www-data в список sudoers, а затем либо жестко закодировать пароль www-data в ваш скрипт (не очень хорошо), либо прочитать его из файла (чуть лучше), чтобы sudo работало. Если вы пойдете по этому пути, вам, вероятно, придется вручную переопределить пароль www-data, поскольку на самом деле он не имеет пригодного для использования пароля. Любой из этих подходов не должен поощряться, потому что www-данные намеренно лишены большинства привилегий в качестве меры безопасности. Предоставление ему большого размера (например, sudo) и помещение его пароля в файл или скрипт создает значительную уязвимость безопасности.
Возможно, вы сможете предоставить очень ограниченные привилегии sudo для www-данных, которые обеспечивают необходимую вам функциональность, не открывая слишком много дыр в безопасности. Прочтите sudo и файл sudoers для получения дополнительной информации.
Лучшим подходом может быть написание сценария, который принимает аргумент start / stop / restart и вызывает соответствующую команду upstart. Хитрость заключается в том, чтобы сделать этот скрипт setuid root (chown root:root script.sh; chmod +s script.sh
), чтобы он выполнялся как root вместо www-data. Дайте этому сценарию 755 разрешений, чтобы его мог изменить только root. Это ограничивает риск безопасности и при этом дает вам необходимые полномочия, но не более.
Подход setuid, вероятно, не будет работать напрямую в вашей системе (попробуйте сначала), поскольку большинство систем Unix в наши дни намеренно отключают setuid для работы, как объявлено в сценариях оболочки, поскольку риск безопасности слишком высок. Вот статья , которая объясняет обходной путь, который использует программу на C (на которой все еще работает setuid) для вызова вашего скрипта. Это немного запутанно, но это должно сработать.
Возможно, наилучшим подходом было бы использовать механизм событий upstart и заставить ваши события в веб-коде запускать события, которые upstart перехватывал и передавал в ваш файл .conf. Я только учусь выскочить сам, поэтому не могу дать вам больше подробностей, но у меня есть ощущение, что он предназначен для этого.