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