如何解决在 uWSGI 运行的 Flask 应用程序中以 sudo 身份运行 shell 脚本时出现身份验证错误
在收到来自 github 的 webhook 请求后,我正在使用 shell 脚本重新启动我的flask 应用程序,但是我遇到了无密码 sudo 身份验证的问题,但只有在运行 uWSGI
时才会重新启动功能。
我将应用程序部署为 systemd
服务,为了重新启动该服务,我必须以 systemctl restart myapp.service
的身份运行 sudo
。因此,我将该行插入脚本中,并由运行 web 应用程序的用户在 /etc/sudoers
中将其标记为可运行,无需密码身份验证。
重启功能很简单:
import os
def on_push():
os.setuid(os.geteuid())
os.system('sudo /path/to/script.sh')
而且脚本本身是单行的:
systemctl restart myapp.service
在普通的 python shell 中通过 os.system('sudo /path/to/script.sh')
运行命令会按预期重新启动应用程序,而不要求输入密码。但是,当该命令由 uWSGI
工作进程运行时,它无法重新启动并显示消息 Interactive authentication required
。
这是可以通过更改 uWSGI 启动参数来解决的问题吗?
解决方法
事实证明,我需要在用于启动 uWSGI 实例的 uid
文件中将 gid
和 .ini
设置为用于运行应用程序的用户/组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。