![是否可以让守护进程以另一个用户的身份运行进程,而无需超级用户守护进程?](https://linux22.com/image/79849/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E8%AE%A9%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E4%BB%A5%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E7%9A%84%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%E8%BF%9B%E7%A8%8B%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E8%B6%85%E7%BA%A7%E7%94%A8%E6%88%B7%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我目前正在开发一个项目,其中我有一个守护进程需要以另一个用户身份运行进程。如果可能的话,我希望守护进程不要以 root 身份运行。然而,我正在努力弄清楚如何最好地做到这一点。
仅供参考,以下所有内容目前都是在 python 中完成的,但我不必使用 python。
我有 PAM 和 Kerberos Auth (GSSAPI) 的原型,我可以在其中成功验证用户身份。现在,如果我运行超级用户守护进程,那么我可以调用操作系统并使用以下命令生成进程:
ksu kerbuser -c "/bin/bash authed-process.py"
据我所知,这是安全的,因为为了欺骗它,您需要 krbtgt 或用户密码。
所以,我考虑的另一件事是将用户密码存储在 python user getpass 中,然后传递该密码(这是一个非常不安全的解决方案)。我不会那么做。
我想的最后一件事...如果我使用 kerberos 票证,我是否可以使用“ksu”命令行工具以该用户身份生成一个进程?我正在研究 POC,但我想这里有人可能有更好的方法来做到这一点?是否没有运行可以作为经过身份验证的用户运行进程的非特权守护进程的标准?
这是我的第一篇文章,所以如果您认为这更适合其他地方,请告诉我。
干杯,
摩根
答案1
如果其他人对答案感兴趣......
实现这一目标的方法似乎是使用可转发的 kerberos 票证。然后可以使用 gssapi 转发票证,并且在服务器端,可以将票证与问题中的 ksu 命令一起使用,以作为所述用户生成进程。
ksu kerbuser -c "/bin/bash authed-process.py"
此命令将在缓存中查找用户 kerberos 票证,然后运行该进程。不过,客户端-服务器 gssapi 必须具有特权,因为只有特权(root)用户才能查看 keytab 文件。