在我的 ubuntu 服务器上,我有一个MyApp
作为守护进程运行的应用程序,它有自己的用户myapp
。
然后我有一个MyPortal
以用户身份在 httpd 中快速运行的Web 应用程序www-data
。此应用程序提供一个带有按钮的网页Redeploy MyApp
。单击此按钮时,我想启动脚本redeploymyapp
。此脚本停止 MyApp 守护进程,升级应用程序并再次启动守护进程。
问题是,当 MyPortal 以 身份运行时,该redeploymyapp
脚本需要由用户执行。myapp
www-data
解决这个问题的最佳方法是什么?
答案1
配置 sudo 以让 www-data 以 myapp 或 root 身份执行该脚本(取决于首选身份),然后以 sudo redeploymyapp 身份执行它。
它应该很简单:
www-data ALL=(myapp) NOPASSWD: redeploymyapp
通过 visudo 添加。可能还值得注意的是,redeploymyapp 应该是完全独立的(即,没有由 Web 请求提供的参数,不使用环境变量等)。
答案2
一个选项是让 MyPortal 在按下按钮时将值写入数据库或文件。反过来,MyApp 会持续监控该数据库/文件。
否则,您可以使用一些 suexec magic 来确保 redeploymyapp 可以作为 myapp 用户运行。哪种 suexec 解决方案最合适实际上取决于您使用的脚本语言等。
(处理 PHP 脚本我有丰富的经验苏普。
正如詹姆斯提到的,还有 sudo 路线。