На моем сервере ubuntu у меня есть приложение MyApp
который работает как демон со своим пользователем myapp
.
Тогда у меня есть веб-приложение MyPortal
который запускается быстро httpd как пользователь www-data
. Это приложение обслуживает веб-страницу с Redeploy MyApp
кнопка. При нажатии на эту кнопку я хочу запустить скрипт redeploymyapp
. Этот сценарий останавливает демон MyApp, обновляет приложение и снова запускает демон.
Проблема в том, что redeploymyapp
скрипт должен быть выполнен пользователем myapp
, а MyPortal работает как www-data
.
Как лучше всего решить эту проблему?
Один из вариантов - позволить MyPortal при нажатии кнопки записывать значение в a в базе данных или в файл. В свою очередь MyApp постоянно контролирует эту базу данных / файл.
В противном случае вы можете использовать магию suexec, чтобы убедиться, что redeploymyapp может быть запущен от имени пользователя myapp. Какое решение suexec является наиболее подходящим, действительно зависит от того, какой язык сценариев вы используете и т. Д.
(Работая со скриптами PHP, у меня есть хороший опыт работы с suPHP.)
Также, как упоминает Джеймс, есть маршрут sudo.
Настройте sudo, чтобы www-data выполнял этот сценарий как myapp или root (в зависимости от того, что предпочтительнее), а затем выполните его как sudo redeploymyapp.
Это должно быть так просто, как:
www-data ALL = (myapp) NOPASSWD: redeploymyapp
добавлено через visudo. Вероятно, также стоит отметить, что redeploymyapp должен быть полностью автономным (то есть без аргументов, предоставляемых веб-запросом, без использования переменных среды и т. Д.)